Flutter网络请求篇-dio-retrofit

9 篇文章 0 订阅

flutter  retrofit plug网址 https://pub.dev/packages/retrofit

创建抽象类

@RestApi(baseUrl: 'http://www.devio.org')
abstract class Http{
  factory Http(Dio dio,{String baseUrl}) = _HttpClient;

  @GET('/io/flutter_app/json/home_page.json')
  Future<HomeModel> getHomeDate();

  @GET('/restapi/h5api/searchapp/search')
  Future getSearch(@Query('source') String source,
      @Query('action') String action,
      @Query('contentType') String contentType,
      @Query('keyword') String keyword,);
}

具体类

class _HttpClient implements Http{
    _HttpClient(this._dio,{this.baseUrl}){
      ArgumentError.checkNotNull(_dio,'dio');
      this.baseUrl ??= 'http://www.devio.org';}
    final Dio _dio;
    String baseUrl;

  @override
  Future<HomeModel> getHomeDate() async {
    // TODO: implement getHomeDate
    final Response response =await _dio.request('/io/flutter_app/json/home_page.json',
      options: RequestOptions(method: 'GET', baseUrl: baseUrl));
    return HomeModel.formJson(response.data);
  }

  @override
  Future getSearch(String source, String action, String contentType, String keyword) async{
    // TODO: implement getSearch
    final Response response = await _dio.request('/restapi/h5api/searchapp/search',
      options: RequestOptions(method: 'GET',baseUrl: baseUrl)
    );
    return response.data;
  }

方法调用

initDate() async {
   await Http(widget.dio).getHomeDate().then((value){
     setState(() {
       homeModel = value;
     });
   });
}

flutter retrofit @Query 传参

final queryParameters =<String,dynamic>{
  'source' : source,
  'action' : action,
  'contentType' : contentType,
  'keyword' : keyword
};

然后在

final Response response = await dio.request('/restapi/h5api/searchapp/search',
  options: RequestOptions(method: 'GET',baseUrl: baseUrl,queryParameters: queryParameters)
);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter网络请求dio封装是一种常用的网络请求框架,它可以帮助我们快速地进行网络请求,同时也可以提高我们的开发效率。在使用dio进行网络请求时,我们可以通过封装来简化代码,提高代码的可读性和可维护性。常见的封装方式有: 1. 封装请求方法:将网络请求的方法封装成一个函数,可以传入参数,方便调用。例如: ``` Future<Response> post(String url, Map<String, dynamic> data) async { try { Response response = await Dio().post(url, data: data); return response; } catch (e) { throw e; } } ``` 2. 封装请求拦截器:可以在请求前或请求后进行一些操作,例如添加请求头、打印请求日志等。例如: ``` class HttpUtil { static Dio dio = Dio(); static Future<Response> get(String url, {Map<String, dynamic> params}) async { dio.interceptors.add(InterceptorsWrapper( onRequest: (options, handler) { // 添加请求头 options.headers['Authorization'] = 'Bearer token'; return handler.next(options); }, onResponse: (response, handler) { // 打印请求日志 print('response: ${response.data}'); return handler.next(response); }, )); try { Response response = await dio.get(url, queryParameters: params); return response; } catch (e) { throw e; } } } ``` 3. 封装错误处理:可以统一处理网络请求的错误,例如网络异常、请求超时等。例如: ``` class HttpUtil { static Dio dio = Dio(); static Future<Response> get(String url, {Map<String, dynamic> params}) async { try { Response response = await dio.get(url, queryParameters: params); return response; } on DioError catch (e) { if (e.type == DioErrorType.CONNECT_TIMEOUT) { throw '请求超时'; } else if (e.type == DioErrorType.RECEIVE_TIMEOUT) { throw '响应超时'; } else if (e.type == DioErrorType.RESPONSE) { throw '请求异常,状态码:${e.response.statusCode}'; } else if (e.type == DioErrorType.CANCEL) { throw '请求取消'; } else { throw '网络异常'; } } } } ``` 通过封装,我们可以让代码更加简洁、易读、易维护,同时也可以提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值