最近刚学flutter,参考简书大佬们的文章,使用dio简单封装了一下网络请求工具类。
网络请求单例
get请求
needToken请忽略,以前是打算获取本地存储的token,需要传token的请求带上,后来发现这么做有问题,后面会提到。
请注意,如果get参数需要拼接在url后,那么使用queryParameters,后面放参数字典,如果是放body,使用data,后面跟参数字典。
BaseMode
根据后台返回数据,简单封装。
使用
post请求
post请求和get请求区别不大,我的项目get请求参数直接拼在url后面,所以get使用queryParameters,后台要求post放body,所以post使用data。
post使用
带本地存储token的get请求
我们项目很多请求需要带上登录返回的token,所以,我用shared_preferences插件把它存在本地,shared_preferences在iOS端使用的是NSUserDefaults。
以前的想法,如果needToken为true,则去获取本地的token,设置dio.header,如下所示
然而,获取token是异步的,也就是说获取到token后,不等网络请求完成,直接return了,所以,获取到的res自然为null了。因此,我们需要一个能控制future返回的工具,正好,flutter提供的Completer能让我们控制future。
适当的时机调用complete(),即网络请求完成,获取到数据的时候,然后返回complete.future。
使用
最后
我也是刚学的菜鸡,如有错误,嘿嘿嘿。。。