flutter Dio封装get/post请求

最近刚学flutter,参考大佬们的文章,使用dio简单封装了一下网络请求工具类。

依赖版本
9683BF5F-1627-47F1-AE3A-ECBC55ED49CF.png
网络请求单例
A2FD169B-6029-4CA6-A2A1-AEF2BA82692F.png
get请求
94900BD6-3931-4116-8D47-76609F5EF515.png

needToken请忽略,以前是打算获取本地存储的token,需要传token的请求带上,后来发现这么做有问题,后面会提到。

请注意,如果get参数需要拼接在url后,那么使用queryParameters,后面放参数字典,如果是放body,使用data,后面跟参数字典。

BaseMode
E301BEA0-5226-421E-ABC8-D7C126E0261A.png

根据后台返回数据,简单封装。

使用
0B8EAD53-485E-42A8-8DD6-DDF4D3710AC6.png
post请求
4AD8E928-B6AB-4C0E-A58E-6AE3ED16CD4D.png

post请求和get请求区别不大,我的项目get请求参数直接拼在url后面,所以get使用queryParameters,后台要求post放body,所以post使用data。

post使用
32A0B205-E43F-4A67-BF9B-406B14F78F7C.png
带本地存储token的get请求

我们项目很多请求需要带上登录返回的token,所以,我用shared_preferences插件把它存在本地,shared_preferences在iOS端使用的是NSUserDefaults。


5B7D1E5F-439D-4220-ADB2-C0BB8FFFE1EC.png

以前的想法,如果needToken为true,则去获取本地的token,设置dio.header,如下所示


B2C34474-07CF-43CC-BE93-1B41C21D33B8.png

然而,获取token是异步的,也就是说获取到token后,不等网络请求完成,直接return了,所以,获取到的res自然为null了。因此,我们需要一个能控制future返回的工具,正好,flutter提供的Completer能让我们控制future。
88E414FE-79D7-48A5-8CE6-92EC3B8C84CD.png

适当的时机调用complete(),即网络请求完成,获取到数据的时候,然后返回complete.future。

使用
7CD99341-921F-45D8-8E85-B20B33DBA263.png

3797273D-4021-4D57-94FE-BC2053D93994.png

87803E0E-42C6-440E-A37C-DFA508A51772.png
最后

我也是刚学的菜鸡,如有错误,嘿嘿嘿。。。

你可能感兴趣的:(flutter Dio封装get/post请求)