dart - Flutter:PageController 不保留页面,尽管 keepPage:true
问题描述
重现步骤:向左滑动,切换到红色Tab
,然后Tab
再次切换到紫色。
什么是:在执行了重现的步骤后,PageView
第一个Tab
的 又回到了蓝页。
应该是什么:执行步骤重现后,PageView
第一个Tab
的仍然在绿页。
我在这里想念什么?
import "package:flutter/material.dart";
import "package:flutter/services.dart";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
return MaterialApp(
home: MyHome()
);
}
}
class MyHomeState extends State<MyHome> with TickerProviderStateMixin {
TabController tabController;
@override
void initState() {
tabController = tabController?? TabController(
vsync: this,
length: 2
);
super.initState();
}
@override
void dispose() {
tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
TabBar(
controller: tabController,
tabs: [
Container(
color: Colors.purple,
width: 100.0,
height: 50.0
),
Container(
color: Colors.pink,
width: 100.0,
height: 50.0
)
]
),
Expanded(
child: TabBarView(
controller: tabController,
children: [
MyPageView(),
MyPageView(),
],
)
)
]
)
);
}
}
class MyHome extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return MyHomeState();
}
}
class MyPageViewState extends State<MyPageView> {
PageController pageController;
@override
void initState() {
pageController = pageController?? PageController();
super.initState();
}
@override
void dispose() {
pageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return PageView(
controller: pageController,
children: [
Container(
color: Colors.blue
),
Container(
color: Colors.green
)
]
);
}
}
class MyPageView extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return MyPageViewState();
}
}
解决方案
这是问题解决了AutomaticKeepAliveMixin
。我以前用过这个,但由于对错误状态的混淆。它显然必须与包含您想要的状态的类混合在一起keep alive
。
推荐阅读
- ruby - 如何在 Ruby 中制作以下模式?
- javascript - 无法将 req.body 中的值添加到 mongoose Schema
- xml - fo:inline 内的多行文本
- dialogflow-es - 如何修复 Dialogflow 代理无法从 zip 文件中恢复
- python-3.x - 如何将两个数据帧与日期索引结合起来,第一个数据帧的当前日期索引应该获取第二个数据帧的下一个索引的值
- javascript - 通过用户输入应用样式
- reactjs - 如何在 Reactjs 中映射以使用 setState 更新对象
- ios - 更新到 Xcode 10.2.1 后出现数百条警告。发布到 App Store 还可以吗?
- javascript - 如何在角度 7 中获得偏移顶部
- ruby-on-rails - 获取每个集合项的所有 has_many 实例