在RiverPod StreamProvider触发重建后,Flutter PlutoGrid未重新绘制

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

我有一个Flutter应用程序,它在页面显示中包含PlutoGrid组件。该网格旨在显示从RiverPod StreamProvider检索的对象列表,其中该提供程序从FireStore集合中提取数据。
在应用程序中,当我添加一个新条目时,我希望网格作为"构建"过程的一部分重新绘制自己-但事实并非如此!

@override
  Widget build(BuildContext context) {
    final aGoalStream = ref.watch(goalsListStreamProvider);
    print('rebuild');
    return aGoalStream.when(
      error: (error, stack) => Center(
        child: Text('Error [${error.toString()}]'),
      ),
      loading: () => Center(
        child: CircularProgressIndicator(),
      ),
      data: (data) {
        return Container(
            child: PlutoGrid(
          columns: _columns,
          rows: data.map((e) {
            print('cell');
            return PlutoRow(cells: _toCells(e));
          }).toList(),
        ));
      },
    );
  }

通过日志'print'调用,我可以看到在发布新记录后,调用了'aGoalStream ='代码行,并且单元格被刷新,但是网格没有刷新以显示预期的新行。
有什么建议吗?

eeq64g8w

eeq64g8w1#

用...

@override
  Widget build(BuildContext context) {
    final aGoalStream = ref.watch(goalsListStreamProvider);
    return aGoalStream.when(
      error: (error, stack) => Center(
        child: Text('Error [${error.toString()}]'),
      ),
      loading: () => const Center(child: CircularProgressIndicator(),
      ),
      data: (data) {
        if (firstTimeThru == true) {
          _rows = data.map((e) => PlutoRow(cells: _toCells(e))).toList();
          firstTimeThru = false;
        } else {
          List<PlutoRow> aRows = data.map((e) => PlutoRow(cells: _toCells(e))).toList();
          _gridStateManager.removeAllRows(notify: false);
          _gridStateManager.appendRows(aRows);
        }
        return Container(
            child: PlutoGrid(
          onLoaded: (event) {
            _gridStateManager = event.stateManager;
          },
          columns: _columns,
          rows: _rows,
        ));
      },
    );
  }

相关问题