如何在 plutogrid (FLUTTER) 中保存/删除一行?

问题描述 投票:0回答:0

我有这段代码

专栏

class _AdminShiftsState extends State<AdminShifts> {
  late final List<PlutoMenuItem> orangeHoverMenus;
  late DateTimeRange selectedDates;
  String dropdownvalue = '';

  /////// PLUTO TABLE
  final List<PlutoColumn> columns = <PlutoColumn>[
    PlutoColumn(
      title: 'User',
      field: 'usuario',
      type: PlutoColumnType.select(<String>[
        'usu1',
        'usu2',
        'usu3'
      ]),
      enableSorting: true,
      enableRowChecked: true,
      enableDropToResize: true,
      enableEditingMode: true,
      enableColumnDrag: true,
      suppressedAutoSize: false,
    ),
    PlutoColumn(
        title: 'Movement',
        field: 'movimiento',
        type: PlutoColumnType.select(<String>[
          'ENTRADA',
          'SALIDA',
          'COMM',
        ]),
        enableSorting: true,
        enableEditingMode: true,
        enableDropToResize: true,
        enableColumnDrag: true),
    PlutoColumn(
        title: 'Comment',
        field: 'comentario',
        type: PlutoColumnType.text(),
        enableSorting: true,
        enableDropToResize: true,
        enableEditingMode: true,
        enableColumnDrag: true),
    PlutoColumn(
        title: 'Registry Date',
        field: 'registro_d',
        type: PlutoColumnType.date(
            format: 'yyyy-MM-dd',
            applyFormatOnInit: true,
            defaultValue: DateTime.now()),
        enableEditingMode: true,
        enableDropToResize: true,
        enableSorting: true,
        enableColumnDrag: true),
    PlutoColumn(
        title: 'Registry Hour',
        field: 'registro_h',
        type: PlutoColumnType.time(
            defaultValue: DateFormat('HH:mm').format(DateTime.now())),
        enableSorting: true,
        enableEditingMode: true,
        enableDropToResize: true,
        enableColumnDrag: true),
    PlutoColumn(
        title: 'Location',
        field: 'posicion',
        type: PlutoColumnType.text(),
        enableSorting: true,
        enableEditingMode: true,
        enableColumnDrag: true,
        enableDropToResize: true,
        readOnly: true,
        renderer: (rendererContext) {
          if (rendererContext.cell.value != '') {
            return RichText(
                text: TextSpan(
                    text: rendererContext.cell.value,
                    style: TextStyle(color: Colors.blue),
                    recognizer: TapGestureRecognizer()
                      ..onTap = () {
                        launchUrlString(rendererContext.cell.value);
                      }));
          } else {
            return const Text('');
          }
        }),
    PlutoColumn(
      title: 'Picture',
      field: 'foto',
      type: PlutoColumnType.text(),
      enableEditingMode: false,
      renderer: (rendererContext) {
        if (rendererContext.cell.value != '') {
          Uint8List bytes =
              (base64Decode(rendererContext.cell.value.toString()));
          return Image.memory(bytes);
        } else {
          return const Text('');
        }
      },
    ),
    PlutoColumn(
      title: 'Status',
      field: 'status',
      type: PlutoColumnType.number(),
      // hide: true,
      width: 250,
      minWidth: 175,
    ),
    PlutoColumn(
      title: 'ID',
      field: 'id',
      type: PlutoColumnType.number(),
      // hide: true,
      width: 250,
      minWidth: 175,
    )
  ];

  List<PlutoRow> rows = [];

创建这个网格

Container(
              height: sizeHeight / 1.5,
              width: sizeWidth / 1.2,
              child: PlutoGrid(
                columns: columns,
                rows: rows,
                onLoaded: (PlutoGridOnLoadedEvent event) {
                  stateManager = event.stateManager;
                },
                onChanged: (PlutoGridOnChangedEvent event) {
                  stateManager.currentCell!.row.cells['status']!.value = '1';
                  stateManager.notifyListeners();
                },
                configuration: const PlutoGridConfiguration(
                    columnFilter: PlutoGridColumnFilterConfig(
                        filters: FilterHelper.defaultFilters),
                    columnSize: PlutoGridColumnSizeConfig(
                        autoSizeMode: PlutoAutoSizeMode.scale),
                    localeText: PlutoGridLocaleText.spanish()),
                createHeader: (stateManager) =>
                    _Header(stateManager2: stateManager),
              ),
            )

引用_header(如exampleweb中的示例)

class _Header extends StatefulWidget {
  const _Header({
    required this.stateManager2,
    Key? key,
  }) : super(key: key);

  final PlutoGridStateManager stateManager2;

  @override
  State<_Header> createState() => _HeaderState();
  }

  class _HeaderState extends State<_Header> {
    int addCount = 1;
  
    int addedCount = 0;
  
    PlutoGridSelectingMode gridSelectingMode = PlutoGridSelectingMode.row;
  
    @override
    void initState() {
      super.initState();

    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      widget.stateManager2.setSelectingMode(gridSelectingMode);
    });
  }

  void handleAddRows() {
    final newRows = widget.stateManager2.getNewRows(count: addCount);

    for (var e in newRows) {
      e.cells['id']!.value = 0;
    }

    widget.stateManager2.appendRows(newRows);

    widget.stateManager2.setCurrentCell(
      newRows.first.cells.entries.first.value,
      widget.stateManager2.refRows.length - 1,
    );

    widget.stateManager2.moveScrollByRow(
      PlutoMoveDirection.down,
      widget.stateManager2.refRows.length - 2,
    );

    widget.stateManager2.setKeepFocus(true);
  }

  void handleSaveAll() {
    widget.stateManager2.setShowLoading(true);

    for (var row in widget.stateManager2.refRows) {
      if (row.cells['id']!.value == '0') {
        /* AÑADIR LLAMADA DE ADD*/
        // FUNCION ADD
        postUserLog(
          row.cells['usuario']!.value,
          row.cells['movimiento']!.value,
          row.cells['comentario']!.value,
          row.cells['posicion']!.value,
          row.cells['posicion']!.value,
          row.cells['foto']!.value,
          row.cells['registro_d']!.value,
          row.cells['registro_h']!.value,
        );
      }
      // FIN FUNCION ADD
      else {
        if (row.cells['status']!.value == 1) {
          //row.cells['status']!.value = 'guest';
          /* AÑADIR LLAMADA DE UPDATE*/
          // FUNCION UPDATE
          updaterow(
              row.cells['id']!.value,
              row.cells['usuario']!.value,
              row.cells['movimiento']!.value,
              row.cells['comentario']!.value,
              row.cells['registro_d']!.value,
              row.cells['registro_h']!.value);

          // FIN FUNCION UPDATE
        }
      }
    }

    widget.stateManager2.setShowLoading(false);
  }

  void handleRemoveSelectedRowsButton() {
    /* AÑADIR LLAMADA DE REMOVE*/
    //FUNCION REMOVE
    for (var row in widget.stateManager2.currentSelectingRows) {
      if (row.cells['id']!.value != '0') {
        deleterow(row.cells['id']!.value);
      }
      // END FUNCION REMOVE
      widget.stateManager2
          .removeRows(widget.stateManager2.currentSelectingRows);
    }
  }

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Wrap(
          spacing: 10,
          crossAxisAlignment: WrapCrossAlignment.center,
          children: [
            ElevatedButton(
              onPressed: handleAddRows,
              child: const Text('Add rows'),
            ),
            ElevatedButton(
              onPressed: handleSaveAll,
              child: const Text('Save all'),
            ),
            ElevatedButton(
              onPressed: handleRemoveSelectedRowsButton,
              child: const Text('Remove Selected Rows'),
            ),
          ],
        ),
      ),
    );
  }
  }

但是当我在屏幕上选择(通过复选框或单击一行)时,widget.stateManager2.currentselectingRows 的列表中没有任何项目,就像没有选择任何行一样

你能帮帮我吗?

flutter grid pluto
© www.soinside.com 2019 - 2024. All rights reserved.