在选项卡之间滑动期间颤动蜂巢清除框
Posted
技术标签:
【中文标题】在选项卡之间滑动期间颤动蜂巢清除框【英文标题】:Flutter hive clearing box during swiping between tabs 【发布时间】:2022-01-01 18:25:55 【问题描述】:在我的情况下,我们在TabController
中有 3 个标签,在所有这些页面中,我们都有一些我们想要使用它们的数据,现在在每个标签上,当我们在它们之间滑动时,我们没有以前的数据和长度box
的值是 0
,你假设我们有三个标签:
screen_a
screen_b
screen_c
进入screen_a
,我们有:
class Home extends StatefulWidget
const Home(Key? key) : super(key: key);
@override
State<StatefulWidget> createState() =>MyHome();
class MyHome extends State<Home>
late Box<Level> _level;
late List<Level> levels ;
late VideoPlayerController _controller;
@override
void initState()
super.initState();
_level = Hive.box<Level>('level');
levels = _level.values.toList();
@override
Widget build(BuildContext context)
现在在启动应用程序时,我们在screen_a
上有很多数据,在screen_b
上滑动并返回screen_a
后,hive
中没有任何数据:| :|
有什么问题?
【问题讨论】:
【参考方案1】:您应该将选项卡的数据存储在一个块或控制器类中,这样在选项卡之间切换时不会丢失状态和数据。
【讨论】:
感谢您的回答,但不幸的是它不起作用【参考方案2】:这取决于您的整体用例以及您希望TabViews
的行为方式,但您可以使用AutomaticKeepAliveClientMixin
以确保您在切换选项卡时StatefulWidget
的状态保持不变。这也确保了StatefulWidget
的内容在切换选项卡时不必重新构建,但仍会使用资源(只是为了在处理更复杂的场景时牢记性能考虑):
class MyHome extends State<Home> with AutomaticKeepAliveClientMixin
/// Here you can either add custom logic to determine when
/// this tab should be kept "alive" - for now returning [true]
/// will work out.
@override
bool get wantKeepAlive => true;
...
【讨论】:
感谢您的回答,但不幸的是它不起作用以上是关于在选项卡之间滑动期间颤动蜂巢清除框的主要内容,如果未能解决你的问题,请参考以下文章
颤动的 TabBarView 不会被 TabController 改变
在使用 PagerAdapter 和 ViewPager 中的选项卡之间滑动时出现问题
Flutter:无法或更改 TabController 的选项卡之间滑动的敏感性