先上图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. 后续关注点: