在选项卡之间滑动期间颤动蜂巢清除框

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 的选项卡之间滑动的敏感性

关闭所有选项卡时删除/清除本地存储[重复]

从一个选项卡滑动到另一个选项卡时,TabView 不保留状态

在 Flutter 中使用具有不同选项卡的不同 FAB,并在它们之间滑动时更改按钮?