flutter 插件 Pluto表格使用所遇问题

  1. List data filtering and refresh Problem #438
    https://github.com/bosskmk/pluto_grid/issues/438

After filtering the list data, refresh and load the data again. How to make the previous filtering conditions effective?

import 'package:flutter/material.dart';
import 'package:pluto_grid/pluto_grid.dart';

class EmptyScreen extends StatefulWidget {
  static const routeName = 'empty';

  const EmptyScreen({Key? key}) : super(key: key);

  @override
  _EmptyScreenState createState() => _EmptyScreenState();
}

class _EmptyScreenState extends State<EmptyScreen> {
  late List<PlutoColumn> columns;

  late List<PlutoRow> rows;

  late PlutoGridStateManager stateManager;

  final List<PlutoRow> filterRows = [];

  @override
  void initState() {
    super.initState();

    columns = [
      PlutoColumn(
        title: 'column1',
        field: 'column1',
        type: PlutoColumnType.text(),
      ),
      PlutoColumn(
        title: 'column2',
        field: 'column2',
        type: PlutoColumnType.text(),
      ),
      PlutoColumn(
        title: 'column3',
        field: 'column3',
        type: PlutoColumnType.text(),
      ),
    ];
    _initData();
  }

  _initData() {
    rows = [];
    rows.addAll([
      PlutoRow(
        cells: {
          'column1': PlutoCell(value: 'a1'),
          'column2': PlutoCell(value: 'b1'),
          'column3': PlutoCell(value: 'c1'),
        },
      ),
      PlutoRow(
        cells: {
          'column1': PlutoCell(value: 'a2'),
          'column2': PlutoCell(value: 'b2'),
          'column3': PlutoCell(value: 'c2'),
        },
      ),
      PlutoRow(
        cells: {
          'column1': PlutoCell(value: 'a3'),
          'column2': PlutoCell(value: 'b3'),
          'column3': PlutoCell(value: 'c3'),
        },
      ),
    ]);
  }

  void handleSaveFilter() {
    filterRows.clear();

    final List<PlutoRow> filters = stateManager.filterRows
        .map(
          (e) => PlutoRow(cells: {
            FilterHelper.filterFieldColumn: PlutoCell(
              value: e.cells[FilterHelper.filterFieldColumn]!.value,
            ),
            FilterHelper.filterFieldType: PlutoCell(
              value: e.cells[FilterHelper.filterFieldType]!.value,
            ),
            FilterHelper.filterFieldValue: PlutoCell(
              value: e.cells[FilterHelper.filterFieldValue]!.value,
            ),
          }),
        )
        .toList();

    filterRows.addAll(filters);
  }

  void handleLoadFilter() {
    stateManager.gridFocusNode?.unfocus();
    WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
      stateManager.setFilterWithFilterRows(filterRows);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        padding: const EdgeInsets.all(15),
        child: PlutoGrid(
          columns: columns,
          rows: rows,
          onChanged: (PlutoGridOnChangedEvent event) {
            print(event);
          },
          onLoaded: (PlutoGridOnLoadedEvent event) {
            stateManager = event.stateManager;
            stateManager.setShowColumnFilter(true);
          },
          configuration: const PlutoGridConfiguration(),
          createHeader: (_) {
            return Row(
              children: [
                TextButton(
                  onPressed: handleSaveFilter,
                  child: const Text('save filter'),
                ),
                TextButton(
                  onPressed: handleLoadFilter,
                  child: const Text('load filter'),
                ),
              ],
            );
          },
        ),
      ),
    );
  }
}

核心是上面的保存和加载过滤条件的方法。功能可以实现,就是会中间先加载出全部数据,再显示过滤后的数据列表。
2. update the single rowData #439

solution:
	Would you like to use the below method of stateManager ?
	void insertRows(int rowIdx, List<PlutoRow> rows);
	void removeRows(List<PlutoRow> rows);

another solution:

    PlutoRow newRow = PlutoRow(
      cells: {
        'column_1': PlutoCell(value: value.toString()),
        'column_2': PlutoCell(value: value.toString()),
        'column_3': PlutoCell(value: value.toString()),
        'column_4': PlutoCell(value: value.toString()),
        'column_5': PlutoCell(value: value.toString()),
      },
    );

    stateManager.prependRows([newRow]);
    stateManager.moveScrollByRow(PlutoMoveDirection.up, 1);
    stateManager.setCurrentCell(newRow.cells.entries.first.value, 0);
	
	
	stateManager.changeCellValue(
      stateManager.currentRow!.cells['column_1']!,
      value,
      force: true,
    );
	
	var newValue = {};
	newValue['tag'] = cell.value['tag'];
	newValue['ctime'] = cell.value['ctime'];
	newValue['confirmstate'] = cell.value['confirmstate'];
	List<String> list = [];
	list.add(_inputDispose);
	newValue['dispose'] = list;
	stateManager!.changeCellValue(cell, newValue, force: true);

https://weblaze.dev/pluto_grid/build/web/#feature/listing-mode – 该例子可以参考下

3. 清空之前的刷新条件

stateManager!.refRows!.setFilter((element) => true);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值