我遇到了一个小部件子树不断从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!;
},
);
}
1条答案
按热度按时间oprakyz71#
Hive
提供了对整个Box
的监听,所以每次Box
内部发生了什么,构建器就会被调用:但是您也可以使用
keys
属性指定List<String>
的键,您希望ValueListenableBuilder
只列出这些键,如下所示:现在,对于除firstKey和
secondKey
之外的键,在它们上执行的每个操作都不会更新ValueListenableWidget
,但是对firstKey和secondKey的操作将仅更新它。