最近剛學(xué)flutter潜沦,參考簡書大佬們的文章靶溜,使用dio簡單封裝了一下網(wǎng)絡(luò)請求工具類柬采。
9683BF5F-1627-47F1-AE3A-ECBC55ED49CF.png
網(wǎng)絡(luò)請求單例
A2FD169B-6029-4CA6-A2A1-AEF2BA82692F.png
get請求
94900BD6-3931-4116-8D47-76609F5EF515.png
needToken請忽略党窜,以前是打算獲取本地存儲的token,需要傳token的請求帶上点把,后來發(fā)現(xiàn)這么做有問題橘荠,后面會提到。
請注意郎逃,如果get參數(shù)需要拼接在url后哥童,那么使用queryParameters,后面放參數(shù)字典褒翰,如果是放body贮懈,使用data,后面跟參數(shù)字典优训。
BaseMode
E301BEA0-5226-421E-ABC8-D7C126E0261A.png
根據(jù)后臺返回數(shù)據(jù)朵你,簡單封裝。
使用
0B8EAD53-485E-42A8-8DD6-DDF4D3710AC6.png
post請求
4AD8E928-B6AB-4C0E-A58E-6AE3ED16CD4D.png
post請求和get請求區(qū)別不大揣非,我的項目get請求參數(shù)直接拼在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,設(shè)置dio.header棍矛,如下所示
B2C34474-07CF-43CC-BE93-1B41C21D33B8.png
然而安疗,獲取token是異步的,也就是說獲取到token后够委,不等網(wǎng)絡(luò)請求完成荐类,直接return了,所以茁帽,獲取到的res自然為null了玉罐。因此,我們需要一個能控制future返回的工具潘拨,正好吊输,flutter提供的Completer能讓我們控制future。
88E414FE-79D7-48A5-8CE6-92EC3B8C84CD.png
適當(dāng)?shù)臅r機調(diào)用complete()铁追,即網(wǎng)絡(luò)請求完成季蚂,獲取到數(shù)據(jù)的時候,然后返回complete.future琅束。
使用
7CD99341-921F-45D8-8E85-B20B33DBA263.png
3797273D-4021-4D57-94FE-BC2053D93994.png
87803E0E-42C6-440E-A37C-DFA508A51772.png
最后
我也是剛學(xué)的菜雞扭屁,如有錯誤,嘿嘿嘿涩禀。料滥。示姿。