Dio的超簡單封裝,超好用

直接復(fù)制

import 'dart:convert';

import 'package:dio/dio.dart';

enum HttpMethod { post, get }

typedef ParseObject = dynamic Function(dynamic originMap);

extension ListExt on List<dynamic> {
  List<T> parseObj<T>(ParseObject covert) {
    return List<T>.from(map(covert)).toList();
  }
}

extension ResultJsonExt on ResultJson? {
  bool get requestIsSuccess => this!=null && this!.success == true && this!.errors.isEmpty;
}

abstract class BaseModel<T> {
  T fromJson(Map<String, dynamic> map);
}

class ResultJson {
  final bool success;
  final String errorMessage;
  final List<dynamic> errors;
  final dynamic data;

  ResultJson(
      {required this.success,
      required this.errorMessage,
      required this.errors,
      required this.data});

  factory ResultJson.fromJson(Map<String, dynamic> map) {
    return ResultJson(
        success: map['success'],
        errorMessage: map['errorMessage'] ?? '',
        errors: map['errors'] ?? [],
        data: map['data']);
  }

  //打印
  void printDataJson() {
    print(jsonEncode(data));
  }

  //轉(zhuǎn)數(shù)組
  List<dynamic> parseList() {
    return data as List<dynamic>;
  }

  List<T> dataCovertToList<T>(ParseObject covert) {
    return parseList().parseObj<T>(covert).toList();
  }

  @override
  String toString() {
    return '==========================================\n是否成功:${success ? '成功' : '失敗'} data類型:${data.runtimeType} \n錯誤消息:$errorMessage\n錯誤列表:$errors\n數(shù)據(jù):$data\n==========================================';
  }
}

abstract class BaseApi {
  static String host = 'http://192.168.199.79:8888';

  final String url;
  final HttpMethod httpMethod;
  final Map<String, dynamic> params = <String, dynamic>{};

  BaseApi(this.url, {this.httpMethod = HttpMethod.get});

  Future<ResultJson?> request() async {
    final response = await Dio().request(host + url,
        options: Options(method: methed),
        queryParameters: params,
        data: params);
    if (response.statusCode == 200) {
      final data = response.data;
      return ResultJson.fromJson(data);
    }
    return null;
  }

  //請求方法,
  String get methed => getMethod();

  String getMethod() {
    switch (httpMethod) {
      case HttpMethod.get:
        return 'GET';
      default:
        return "POST";
    }
  }
}


使用


import 'package:girlmerry_zhubo/api/base.dart';

class RoomApi extends BaseApi {
  RoomApi() : super('/app/api/room/list');
}


class StartLiveApi extends BaseApi {
  StartLiveApi(): super('/app/api/room/start',httpMethod: HttpMethod.post);
  set setId(int roomId) => params['id'] = '$roomId';
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容