bosskmk / pluto_grid

PlutoGrid is a dataGrid for flutter that can be controlled by the keyboard on desktop and web. Of course, it works well on Android and IOS.
https://pluto.weblaze.dev
MIT License
664 stars 305 forks source link

[Help] Grid is not updating #892

Closed kholyphoenix0 closed 1 year ago

kholyphoenix0 commented 1 year ago

Hello, My Grid is not updating...


     late PlutoGridStateManager stateManager;
     ...
      body: Center(
        child: productList.isEmpty
            ? const Text("...")
            : PlutoGrid(
                columns: _buildColumns(),
                rows: _buildRows(),
                configuration: const PlutoGridConfiguration(
                  columnSize: PlutoGridColumnSizeConfig(resizeMode: PlutoResizeMode.normal),
                  // shortcut:
                ),
                onLoaded: (PlutoGridOnLoadedEvent event) {
                  event.stateManager.setSelectingMode(PlutoGridSelectingMode.cell);
                  event.stateManager.setShowColumnFilter(true);
                  event.stateManager.setAutoEditing(true);
                  stateManager = event.stateManager;
                  stateManager.notifyListeners();
                },
                mode: PlutoGridMode.select,
                onSelected: (PlutoGridOnSelectedEvent event) async {
                  debugPrint("Selecionado: ${event.row}");
                },
              ),
      ),

// # GRID COLUMNS
  List<PlutoColumn> _buildColumns() {
    List<PlutoColumn> columns = [
      PlutoColumn(title: 'ID', field: 'id', type: PlutoColumnType.text(), enableRowChecked: true, hide: true),
      PlutoColumn(title: 'Código', field: 'code', type: PlutoColumnType.text(), enableRowChecked: true, enableEditingMode: false, enableColumnDrag: false, frozen: PlutoColumnFrozen.start),
      PlutoColumn(title: 'Descrição', field: 'description', type: PlutoColumnType.text(), enableEditingMode: false, enableColumnDrag: false, minWidth: 500, width: 500),
      PlutoColumn(title: 'Pacote', field: 'package', type: PlutoColumnType.text(), enableEditingMode: false, enableColumnDrag: false, minWidth: 150, width: 150),
      PlutoColumn(title: 'Tipo', field: 'type', type: PlutoColumnType.text(), enableEditingMode: false, enableColumnDrag: false, minWidth: 150, width: 150),
      PlutoColumn(title: 'IPI', field: 'ipi', type: PlutoColumnType.text(), enableEditingMode: false, enableColumnDrag: false, minWidth: 150, width: 150),
      PlutoColumn(title: 'Quantidade', field: 'quantity', type: PlutoColumnType.text(), enableEditingMode: true, enableColumnDrag: false, minWidth: 250, width: 250),
      PlutoColumn(title: 'Preço', field: 'price', type: PlutoColumnType.text(), enableEditingMode: false, enableColumnDrag: false, minWidth: 250, width: 250),
      PlutoColumn(
        title: 'Preço T.',
        field: 'total_price',
        type: PlutoColumnType.text(),
        enableEditingMode: true,
        enableColumnDrag: false,
        minWidth: 250,
        width: 250,
        footerRenderer: (rendererContext) {
          return PlutoAggregateColumnFooter(
            rendererContext: rendererContext,
            type: PlutoAggregateColumnType.count,
            format: 'Valor Final: #,###.###',
            filter: (cell) => cell.row.checked == true,
            alignment: Alignment.center,
          );
        },
      ),
      PlutoColumn(title: 'Criado Por', field: 'created_by', type: PlutoColumnType.text(), enableEditingMode: false, hide: true, enableColumnDrag: false, minWidth: 150, width: 150),
      PlutoColumn(title: 'Criado Em', field: 'created_date', type: PlutoColumnType.text(), enableEditingMode: false, hide: true, enableColumnDrag: false, minWidth: 150, width: 150),
      PlutoColumn(title: 'Atualizado Por', field: 'updated_by', type: PlutoColumnType.text(), enableEditingMode: false, hide: true, enableColumnDrag: false, minWidth: 150, width: 150),
      PlutoColumn(title: 'Atualizado Em', field: 'updated_date', type: PlutoColumnType.text(), enableEditingMode: false, hide: true, enableColumnDrag: false, minWidth: 150, width: 150),
      PlutoColumn(title: 'Deletado', field: 'deleted', type: PlutoColumnType.text(), enableEditingMode: false, hide: true, enableColumnDrag: false, minWidth: 150, width: 150),
      PlutoColumn(title: 'Operador', field: 'deleted', type: PlutoColumnType.text(), enableEditingMode: false, hide: true, enableColumnDrag: false, minWidth: 150, width: 150)
    ];
    return columns;
  }

  // # GRID ROWS
  List<PlutoRow> _buildRows() {
    List<PlutoRow> rows = [];

    for (List<String> row in productList) {
      PlutoRow plutoRow = PlutoRow(
        cells: {
          'id': PlutoCell(value: row[0]),
          'code': PlutoCell(value: row[1]),
          'description': PlutoCell(value: row[2]),
          'package': PlutoCell(value: row[3]),
          'type': PlutoCell(value: row[4]),
          'ipi': PlutoCell(value: row[5]),
          'quantity': PlutoCell(value: row[12]),
          'total_price': PlutoCell(value: row[13]),
          'price': PlutoCell(value: row[6]),
          'created_by': PlutoCell(value: row[7]),
          'created_date': PlutoCell(value: row[8]),
          'updated_by': PlutoCell(value: row[9]),
          'updated_date': PlutoCell(value: row[10]),
          'deleted': PlutoCell(value: row[11]),
        },
      );
      rows.add(plutoRow);
    }

    return rows;
  }
graemep-nz commented 1 year ago

PlutoGrid works for me but it took me ages to find out how to change the content of the grid after the constructor runs. The docs here help https://pluto.weblaze.dev/series/pluto-grid https://pluto.weblaze.dev/add-and-remove-columns-and-rows

so now what I do in the build method is this stateManager?.removeAllRows(notify:false); stateManager?.appendRows(plutoRows);

kholyphoenix0 commented 1 year ago

Solved, thanks!