Flutter学习总结(十七、Flutter的网络请求)

Flutter的网络请求

一起从0开始学习Flutter!

网络请求在一个APP的分量还是很重的,我们需要熟练的掌握Http请求部分,在Flutter中我们有三种方式,一种是使用Dart给我们提供的HttpClient,第二种是使用第三方的Http请求库,第三种是使用Flutter给我们准备好的Dio。我们主要是看后面两种,第一种比较繁琐一般也不会使用,如果想要了解的可以自行搜索。

HTTP库

这是一个基础的网络请求库,我们在使用之前需要先引入这个类库,在pubspec.yaml中添加:

dependencies:
  http: ^0.12.1

添加完成后在右上角会出现一个pub get的按钮,点击后可以帮助我们下载这个类库,然后在我们需要的地方加载该类:

import 'package:http/http.dart';

这样我们的准备工作就算是完成了,接下来我们开始试一下如果使用Http库进行网络请求了:

void doHttpRequest() async{
   //里面包含异步请求的时候需要加上asyn关键字
    var url = "http://www.baidu.com";
    var postResponse = await http.post(url,//使用Post请求,在需要等待的时候加上await关键字
        headers: {
   "": "", "": ""},//添加请求头
        body: {
   "": "", "": "",});//添加请求的参数

    var response = await http.get(url);//使用get方法,直接请求该地址
    if(response.statusCode == 200){
   //如果返回的状态码是200则有正确的返回结果
      print("response body = ${response.body}");
    }else{
   //其他的异常状态码
      print("请求异常${response.statusCode}");
    }
  }

这是比较简单进行一次网络请求,我们也可以根据自己的需要进行一定的封装,这里不多介绍,我们主要是使用Flutter给我们准备好的Dio来进行网络请求。

DIO

套用一下dio中的介绍:
dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等
可以做的事情还是挺多的,我们一点点的进行学习吧。
首先我们需要将它引入到我们项目中:

dependencies:
  dio: ^3.0
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值