flutter for 安卓【三】retrofit接管dio

1。http_service.dart


import 'dart:convert';

import 'package:dio/dio.dart';
import 'package:carrynotenew/utils/logger.dart';
import 'package:carrynotenew/utils/network/error_response_handler.dart';
import 'package:carrynotenew/utils/network/retrofit_client.dart';
import 'package:carrynotenew/utils/bean/base_response_entity.dart';
import 'package:carrynotenew/utils/bean/chapter_info_entity.dart';

class HttpService {
  static late RetrofitClient _client;

  static void doInit() {
    var dio = Dio();
    dio.interceptors.add(InterceptorsWrapper(onRequest: (options, handler) {
      options.headers["Content-Type"] = "application/x-www-form-urlencoded";
      // options.headers["Accept-Language"] = Intr().currentLocale().languageCode;

      //设备信息【PC:PC网页端,MP:移动端,APP:原生APP】
      //网站ID
      //机器型号
      //系统版本号【APP强制使用】
      // var commonParams = {"machineModel":Constants.model(),"siteId":"9000","siteType":"1","terminal":"APP","version":Constants.version()};
      // options.queryParameters.addAll(commonParams);
      loggerArray([
        "发起请求",
        "${options.baseUrl}${options.path}\n",
        "${options.method}\n",
        "${options.headers}\n",
        options.data ?? options.queryParameters
      ]);
      handler.next(options);
    }, onResponse: (response, handler) {
      loggerArray([
        "返回响应",
        response.requestOptions.path,
        response.statusCode,
        "${response.statusMessage}\n",
        jsonEncode(response.data)
      ]);
      if (response.statusCode == 200) {
        handler.next(response);
      } else {
        ErrorResponseHandler().onErrorHandle(
            {"code": response.statusCode, "message": response.statusMessage});
      }
    }, onError: (DioException e, handler) {
      loggerArray(["异常响应", e.toString()]);
      handler.next(e);
    }));
    _client = RetrofitClient(dio);
  }

  ///游戏返回体
  ///封装请求体,自动处理各种异常问题
  static Future<T> buildFuture<T>(RequestCallback callback,
      {bool loading = true,
      bool needMsg = false,
      bool errorHandler = true}) async {
    // if(loading){ EasyLoading.show(maskType: EasyLoadingMaskType.black,status: Intr().jiazaizhong); }
    try {
      var value = await callback.call();
      // if(loading){ EasyLoading.dismiss(); }
      if (value.isOk()) {
        ///data为null时处理
        return Future.value(
            value.data ?? (needMsg ? value.errorMsg.toString() : ""));
      } else {
        if (errorHandler) {
          ErrorResponseHandler().onErrorHandle(
              {"code": value.errorCode, "message": value.errorMsg.toString()});
        }
        return Future.error(value.errorMsg.toString());
      }
    } catch (error) {
      loggerArray(["请求异常信息", error]);
      // if(loading){ EasyLoading.dismiss(); }
      if (errorHandler) {
        ErrorResponseHandler().onErrorHandle(error);
      }
      return Future.error(error);
    }
  }

  static Future<String> doLogin(
    Map<String, dynamic> params,
  ) {
    return buildFuture<String>(() => _client.doLogin(params), loading: false);
  }

  static Future<List<ChapterInfoEntity>> getChapters() {
    return buildFuture<List<ChapterInfoEntity>>(() => _client.getChapters(),
        loading: false);
  }

  static Future<String> queryArticle(
    Map<String, dynamic> params,
  ) {
    return buildFuture<String>(() => _client.queryArticle(params),
        loading: false);
  }
}

typedef RequestCallback = Future<BaseResponseEntity<dynamic>> Function();



2.retrofit_client.dart

import 'package:dio/dio.dart' hide Headers;
import 'package:retrofit/retrofit.dart';
import 'package:carrynotenew/utils/global.dart';
import 'package:carrynotenew/utils/bean/base_response_entity.dart';
import 'package:carrynotenew/utils/bean/chapter_info_entity.dart';

part 'retrofit_client.g.dart';

@RestApi(baseUrl: Global.base_url, parser: Parser.JsonSerializable)
abstract class RetrofitClient {
  factory RetrofitClient(Dio dio, {String? baseUrl}) = _RetrofitClient;

  @GET('/wxarticle/chapters/json')
  Future<BaseResponseEntity<List<ChapterInfoEntity>>> getChapters();

  @POST('/article/query/0/json')
  Future<BaseResponseEntity<String>> queryArticle(
    @Body() Map<String, dynamic> params,
  );

  @POST('/login/doLogin')
  Future<BaseResponseEntity<String>> doLogin(
    @Body() Map<String, dynamic> params,
  );
}


3.生成请求实例  retrofit_client.g.dart

flutter pub run build_runner build


4.调用

 HttpService.doLogin({
    'uname': _unameController.text,
    'upass': _upassController.text
  }).then((value) => {debugPrint(value.toString())})


打赏

看恩吧
网站不承担任何有关评论的责任
  • 最新评论
  • 总共条评论
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦