如何停止从ValueListenableBuilder重建Flutter?

oxf4rvwz  于 2022-11-30  发布在  Flutter
关注(0)|答案(1)|浏览(137)

我遇到了一个小部件子树不断从ValueListenableBuilder内部重建的问题。它应该在更改时运行重建,在本例中,它正在监听Flutter Hive数据库上的表。
我已经厌倦的事情:
1.我在main方法中打开了所有的Hive Box,这样我就可以从应用程序中的任何地方访问每个Box。我厌倦了只在发生更改时打开Hive Box,然后立即关闭这个Box。没有工作
我认为有可能,但不确定的事情:
1.将ChangeNotifierProvider与ValueListenableBuilder混合使用--因为有些子树也使用了changenotifier,但是ValueListenableBuilder不断地重建子树,所以我传递给提供程序的任何更改都会被清除。
有没有只在改变时重建的方法?

@override
  Widget build(BuildContext context) {
    return ValueListenableBuilder(
        valueListenable:
            Hive.box<Manifest>(HiveTables.manifestBox).listenable(),
        child: assignmentWidgets,
        builder: (context, Box<Manifest> manifestBox, child) {
          if (manifestBox.isNotEmpty)
            return child!;
        },
        );
  }
oprakyz7

oprakyz71#

Hive提供了对整个Box的监听,所以每次Box内部发生了什么,构建器就会被调用:

ValueListenableBuilder<Box>(
  valueListenable: Hive.box('settings').listenable(),
  builder: (context, box, widget) {
    // build widget
  },
),

但是您也可以使用keys属性指定List<String>的键,您希望ValueListenableBuilder只列出这些键,如下所示:

ValueListenableBuilder<Box>(
  valueListenable: Hive.box('settings').listenable(keys: ['firstKey', 'secondKey']),
  builder: (context, box, widget) {
    // build widget
  },
),

现在,对于除firstKeysecondKey之外的键,在它们上执行的每个操作都不会更新ValueListenableWidget,但是对firstKeysecondKey的操作将仅更新它。

相关问题