flutter - Flutter - 在选项卡之间移动导致丢失状态
问题描述
我遇到了一个奇怪的情况。我有以下代码显示选项卡及其内容:
Scaffold(
appBar: AppBar(
title: Text('Title'),
actions: [
IconButton(
icon: Icon(Icons.add),
onPressed: () => _onTabAdd(_tabController.index),
),
IconButton(
icon: Icon(Icons.delete),
onPressed: () => _onTabRemoved(_tabController.index),
),
IconButton(
icon: Icon(Icons.edit),
onPressed: () => _onTabEdit(context),
),
],
bottom: PreferredSize(
preferredSize: Size.fromHeight(40.0),
child: Container(
color: Colors.blue,
child: TabBar(
controller: _tabController,
tabs: tabTitles
.map(
(title) => Tab(text: title),
)
.toList(),
labelColor: Colors.yellow,
unselectedLabelColor: Colors.white,
indicatorSize: TabBarIndicatorSize.label,
indicatorPadding: EdgeInsets.all(5.0),
indicatorColor: Colors.red,
),
),
),
),
body: TabBarView(
controller: _tabController,
children: tabContents.map((e) => e).toList(),
),
您可以看到我可以选择使用按钮添加或删除选项卡,并且使用以下功能似乎可以正常工作:
void _onTabRemoved(int index) {
setState(() {
tabTitles.removeAt(index);
tabContents.removeAt(index);
_tabController = TabController(length: tabTitles.length, vsync: this);
});
}
void _onTabAdd(int index) {
setState(() {
tabTitles.add("Tab ${tabTitles.length}");
tabContents.add(GenesTable(this));
_tabController = TabController(length: tabTitles.length, vsync: this);
});
}
问题是,当我在选项卡之间移动时,我会丢失GenesTable
组件的状态(存储表格内容),这意味着当我在选项卡之间移动时,显示的表格是空的。
解决方案
你可以通过这里给出的答案 https://stackoverflow.com/a/51225319/13927133
如果您想将屏幕的状态保留在 中TabBarView
,可以使用State 类中mixin
调用的类。AutomaticKeepAliveClientMixin
然后覆盖该wantKeepAlive
方法并返回true。
@diegoveloper 还为此 https://medium.com/@diegoveloper/flutter-persistent-tab-bars-a26220d322bc发布了一篇中等文章
推荐阅读
- angular - Angular:当列表中没有数据时如何显示消息?
- javascript - vite 构建不会在 dist 文件夹中生成 javascript 文件
- javascript - 为什么我的 TextInput 字段在不同的屏幕上表现不同。在本机反应
- c++ - 找不到由“absl”提供的具有以下任何名称的包配置文件:abslConfig.cmake absl-config.cmake
- angular - NX.Dev - 如何离线运行 create-workspace?
- java - 那时,模拟类方法没有使用 Mockito 返回预期值
- node.js - 使用 axios 发布请求和未定义的错误得到错误 400
- c - 如何测量 Linux 内核模块中函数的执行时间?
- reactjs - React TSX - 在 React 元素道具中使用 Lambda 表达式
- reactjs - React:如何呈现按类别分组的项目列表(使用 .map)