Flutter 如何在Flatter中使用ValueNotifier内部的ValueListenableBuilder?

Flutter 如何在Flatter中使用ValueNotifier内部的ValueListenableBuilder?,flutter,Flutter,我正在使用CustomScrollView,我需要在3个SliverList和2个SliverGrid中搜索数据。他们都用ValueListenableBuilder监听数据,我还有一个信息框,显示是否找到任何数据。有5个ValueNotifier变量可帮助我显示/隐藏信息框,但问题是当构建器再次调用时,我需要在此构建器中调用ValueNotifier.value,但它给出了一个错误: setState() or markNeedsBuild() called during build. 我知

我正在使用CustomScrollView,我需要在3个SliverList和2个SliverGrid中搜索数据。他们都用ValueListenableBuilder监听数据,我还有一个信息框,显示是否找到任何数据。有5个
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;

});