最近刚学flutter,参考简书大佬们的文章,使用dio简单封装了一下网络请求工具类。
网络请求单例
A2FD169B-6029-4CA6-A2A1-AEF2BA82692F.pngget请求
94900BD6-3931-4116-8D47-76609F5EF515.pngneedToken请忽略,以前是打算获取本地存储的token,需要传token的请求带上,后来发现这么做有问题,后面会提到。
请注意,如果get参数需要拼接在url后,那么使用queryParameters,后面放参数字典,如果是放body,使用data,后面跟参数字典。
BaseMode
E301BEA0-5226-421E-ABC8-D7C126E0261A.png根据后台返回数据,简单封装。
使用
0B8EAD53-485E-42A8-8DD6-DDF4D3710AC6.pngpost请求
4AD8E928-B6AB-4C0E-A58E-6AE3ED16CD4D.pngpost请求和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.png3797273D-4021-4D57-94FE-BC2053D93994.png
87803E0E-42C6-440E-A37C-DFA508A51772.png
最后
我也是刚学的菜鸡,如有错误,嘿嘿嘿。。。
网友评论