Skip to content

Commit e745f19

Browse files
author
罗国雄
committed
Tab状态管理
1 parent d558967 commit e745f19

File tree

3 files changed

+82
-6
lines changed

3 files changed

+82
-6
lines changed

README.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,38 @@
1919
| ![](./imges/mine.png) | ![](./imges/login.png) | ![](./imges/catalog.png) | ![](./imges/brand.png) |
2020
| | | | |
2121

22+
## 已实现
23+
24+
* Provider+shared_preferences实现数据状态管理、缓存。
25+
* Rem适配方案。
26+
* Dio的二次封装,API模块化。
27+
* 封装侧边栏Tab切换组件。
28+
* 封装Appbar与Tab的AppTab切换。
29+
* 下拉刷新与上拉加载更多。
30+
* 路由模块管理。
31+
32+
## 还需要做的事
33+
34+
1. 此项目还在开发中,后续会把业务补充完整。(商品、专题、制造商、购物车、用户信息管理)页面的完善。
35+
2. 项目优化,从UI到性能分析,我也是Flutter的初学者,后续如果有学到好的方案,需迭代。
36+
3. 尝试将部分模块以WebView+H5进行混合开发。
37+
4. 后续会补充我在开发中遇到的问题,进行补充、和记录。
38+
39+
## 需注意的东西
40+
41+
* 目前只提供了android的下载体验,IOS请自行下载代码体验。
42+
* 在开发环境的debug可能会稍微卡顿,属正常现象,良好的体验请进行打release包。
43+
44+
## 最后
45+
46+
* 如果EasyMarketFlutter对你有帮助,留下你的Star或者fork,你的支持是我不断更新的动力!!
47+
* 欢迎你们的Issues,希望Flutter越来越好,大家一起学习!Love Coding!
48+
* Thanks!
49+
50+
## 关于我
51+
52+
Name: pero 罗
53+
54+
QQ: 1025558554
55+
56+
Email:[1025558554@qq.com](mailto:1025558554@qq.com)

lib/page/app.dart

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:easy_market/page/topic/index.dart';
44
import 'package:easy_market/page/sort/index.dart';
55
import 'package:easy_market/page/mine/index.dart';
66
import 'package:easy_market/page/cart/index.dart';
7+
import 'package:easy_market/page/wrapper.dart';
78

89
class App extends StatefulWidget {
910
@override
@@ -22,11 +23,11 @@ class _ApplicationPageState extends State<App> {
2223
int _currentPageIndex = 0;
2324

2425
final pageList = [
25-
Home(),
26-
Topic(),
27-
Sort(),
28-
Cart(),
29-
Mine(),
26+
WrapKeepState(Home()),
27+
WrapKeepState(Topic()),
28+
WrapKeepState(Sort()),
29+
WrapKeepState(Cart()),
30+
WrapKeepState(Mine()),
3031
];
3132

3233
Widget getPage(_index) {
@@ -67,6 +68,18 @@ class _ApplicationPageState extends State<App> {
6768
}
6869
}
6970

71+
final pageController = PageController();
72+
73+
void onTap(int index) {
74+
pageController.jumpToPage(index);
75+
}
76+
77+
void onPageChanged(int index) {
78+
setState(() {
79+
_currentPageIndex = index;
80+
});
81+
}
82+
7083
@override
7184
Widget build(BuildContext context) {
7285
return new Scaffold(
@@ -80,12 +93,19 @@ class _ApplicationPageState extends State<App> {
8093
),
8194
preferredSize: new Size(MediaQuery.of(context).size.width, 0),
8295
),
83-
body: pageList[_currentPageIndex],
96+
// PageView+wrapper封装保存页面状态
97+
body: PageView(
98+
children: pageList,
99+
controller: pageController,
100+
onPageChanged: onPageChanged,
101+
physics: NeverScrollableScrollPhysics(), // 禁止滑动
102+
),
84103
bottomNavigationBar: BottomNavigationBar(
85104
items: itemList,
86105
onTap: (int index) {
87106
setState(() {
88107
_currentPageIndex = index;
108+
pageController.jumpToPage(index);
89109
});
90110
},
91111
iconSize: 24,

lib/page/wrapper.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import 'package:flutter/material.dart';
2+
3+
class WrapKeepState extends StatefulWidget {
4+
WrapKeepState(this.hocWidget);
5+
final Widget hocWidget;
6+
@override
7+
State<StatefulWidget> createState() {
8+
return _WrapKeepState();
9+
}
10+
}
11+
12+
class _WrapKeepState extends State<WrapKeepState>
13+
with AutomaticKeepAliveClientMixin {
14+
@override
15+
bool get wantKeepAlive => true;
16+
@override
17+
Widget build(BuildContext context) {
18+
super.build(context);
19+
return widget.hocWidget;
20+
}
21+
}

0 commit comments

Comments
 (0)