【问题标题】:Flutter PlutoGrid not redrawing after RiverPod StreamProvider triggers rebuildRiverPod StreamProvider 触发重建后 Flutter PlutoGrid 不重绘
【发布时间】:2022-11-28 18:58:14
【问题描述】:

我有一个 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(),
        ));
      },
    );
  }

通过记录“打印”调用,我可以看到在发布新记录后,正在调用“aGoalStream =”代码行,并且正在刷新单元格,但网格不会刷新以显示预期的新行。

有什么建议么?

【问题讨论】:

  • 我记得,PlutoGrid 在第一次构建时复制了它的数据。有具体的方法更新数据,因此它可能正确地重建了小部件,但使用的是旧数据。

标签: flutter


【解决方案1】:

用...解决了它

@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,
        ));
      },
    );
  }

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2021-10-20
    • 1970-01-01
    • 2021-08-02
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    相关资源
    最近更新 更多