【问题标题】: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 中没有任何数据:| :|

有什么问题?

【问题讨论】:

    标签: flutter dart flutter-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;
    
      ...
    

    【讨论】:

    • 感谢您的回答,但不幸的是它不起作用