先上圖git
說下用到的技術:github
網絡請求:dio,數據狀態管理:fish_redux,基本UI架構TabView,TabBarViewweb
封裝比較簡單,用的github的api接口,並且只用到了get請求redux
class NetUtil {
static Future get(String url, {Map<String, dynamic> params}) async {
var response = await dio.get(url, queryParameters: params);
return response.data;
}
}
複製代碼
能夠看看原來關於Dio的介紹的文章:api
微信公衆號「Flutter入門」微信
原來有一篇關於fish_redux的入門介紹能夠先看下,基礎知識不作過多介紹網絡
微信公衆號「Flutter入門」架構
基本和redux的原理同樣,app
說說遇到的問題:async
1. 網絡請求時機
在effect中進行網絡請求;
由於這裏邊有對生命週期的處理,在不一樣的生命週期作不一樣的事情。
2. 使用Widget
由於在fish_redux中建立的是Page或Component,而TabBarView中的children接收Widget[]。
fish_redux的Page提供了buildPage(null)
方法,Component也有相同功能方法,這樣就能拿到對應的Widget了
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: new TabBar(
controller: _topController,
tabs: _topTabs,
),
),
body: TabBarView(
controller: _topController,
children: [
RepoListPage().buildPage(null),
Text('second'),
],
),
);
}
複製代碼
使用了兩層TabBr,TabBarView嵌套,使用上比較簡單,可是目前來看,只能放到Scaffold中使用(但不影響外觀設計),TabBr,TabBarView使用同一個controller,分別在tabs和children中加入子Widget。
TabBr,TabBarView使用同一個controller的目的是讓上下聯動,或者也能夠包裹在同一個DefaultTabController
或其子類中。根據實際使用場景使用。
以上;
P.S. 後續關注點: