公司黑客松打到一半紀錄一下,
因為覺得 GetXConnect 要切太多格式雷同的 providers 有點冗,
畢竟服務規模如果不大的情境下其實用一個 network service 頂著就好,
所以就決定用 dio 接請求了,相對簡單又跟 axios 87%像,真香。
FormData
、Map
、含有 MultipartFile
的 FormData
都在守備範圍中。onResponse
裡的 handler.next
的參數必須是 Response<dynamic>
- 跟以前使用 JS 的 axios 認知不同,就算你想直接回傳 response.data.data
編譯也不會讓你過,我參考了官方的範例做法是把 response.data
直接改掉傳回去,因為 data 是被 Response 是先定義的合法 attribute。xxxModel.fromJson
的 parsing - onResponse
時做請求的 parsing,判斷後端服務客製化的 code 合法後,對請求得到的資料做的 parsing。下面我們用 LoginModel 當範例:
安裝依賴到 pubspec.yaml
定義 LoginModel
,相對位置於lib/models/login_model.dart
。
執行 pub run build_runner build
生成 login_model.g.dart
在專案中快樂使用 LoginModel.fromJson
將 JSON 資料轉成 Class
之後想要新增任意 model 都可以依樣畫葫蘆,讚讚。
以下為 Network Service 的 Class 實作:
浪費了不少時間在踩坑上,希望以後要接請求的朋友們不會這麼痛苦。
如果有更好的做法也希望能交流一下。
題外話,用手機測 SMS 登入失敗了很多次,不小心名正言順地當了一回薪水小偷,
好險 PM 說沒事。
Flutter