Flutter 如何在Flatter中使用ValueNotifier内部的ValueListenableBuilder?
我正在使用CustomScrollView,我需要在3个SliverList和2个SliverGrid中搜索数据。他们都用ValueListenableBuilder监听数据,我还有一个信息框,显示是否找到任何数据。有5个Flutter 如何在Flatter中使用ValueNotifier内部的ValueListenableBuilder?,flutter,Flutter,我正在使用CustomScrollView,我需要在3个SliverList和2个SliverGrid中搜索数据。他们都用ValueListenableBuilder监听数据,我还有一个信息框,显示是否找到任何数据。有5个ValueNotifier变量可帮助我显示/隐藏信息框,但问题是当构建器再次调用时,我需要在此构建器中调用ValueNotifier.value,但它给出了一个错误: setState() or markNeedsBuild() called during build. 我知
ValueNotifier
变量可帮助我显示/隐藏信息框,但问题是当构建器再次调用时,我需要在此构建器中调用ValueNotifier.value
,但它给出了一个错误:
setState() or markNeedsBuild() called during build.
我知道发生此错误的原因,但我找不到任何其他解决方案,因为我需要跟踪列表和网格的状态(其中一些项目可以删除,同时我需要再次检查新列表或网格是否有数据)
SliverList中的一个:
Widget _taskWidgets() {
return SliverPadding(
padding: const EdgeInsets.fromLTRB(16, 22, 16, 16),
sliver: ValueListenableBuilder(
valueListenable: _taskService.listenable,
builder: (_, __, child) {
var tasks = _taskService.search(_keyword.value);
_tasksEmpty.value = tasks.isEmpty; // this line gives error
if (!_showCompleted.value) {
tasks = tasks.where((e) => !e.completed).toList();
}
final listIDS = tasks.map((e) => e.listID).toSet();
return SliverList(
delegate: SliverChildBuilderDelegate((_, index) {
if (index % 2 == 0) {
final widget = HierarchyCard(tasks, index ~/ 2, true);
if (index == 0) {
return Stack(
clipBehavior: Clip.none,
children: [
widget,
_text(_appLocalizations.searchTasks),
],
);
}
return widget;
}
return const SizedBox(height: 30);
}, childCount: 2 * listIDS.length - 1),
);
}
),
);
}这是因为您正在重建一个已经在构建的小部件 试一试
WidgetsBinding.instance.addPostFrameCallback((_){
_tasksEmpty.value = tasks.isEmpty;
});