Flutter高级表格插件table_advanced的使用

Flutter高级表格插件table_advanced的使用

该软件包包含一个用于Flutter项目的表格。
该表格可以以普通模式或分页模式显示。此外,分页可以通过滚动管理或者通过导航控件来管理。在较小的屏幕上,表格具有响应式行为,可以实现垂直或水平滚动。行是使用ListView构建器构建的,这意味着即使有大量数据也不会出现性能问题。

使用

该表格需要一个控制器来设置项目并管理分页。小部件构建器用于构建列头和行。

要在普通模式下初始化表格,即不使用分页并且所有项目都已经显示出来,可以按如下方式初始化该小部件:

return TableAdvanced<String>(
    columnHeaders: [
        TableAdvancedColumnHeader(
        child: const Text("属性 1"),
        ),
        TableAdvancedColumnHeader(
        child: const Text("属性 2"),
        ),
    ],
    rowBuilder: (item) {
        return TableAdvancedRow(
            data: DataRow(cells: [
                DataCell(
                    Text(item),
                ),
                DataCell(
                    Container(color: Colors.red, child: const Text("测试值"))
                ),
            ],
            ),
        );
    },
    controller: TableAdvancedController(
        items: List.generate(99, (index) => index.toString()),
        mode: TableMode.plain,
    ),
);

对于有关列头和行的具体属性,请查看其类文档。

如果您想为表格行启用复选框,可以在TableAdvancedController中传递onCheckItems参数。您还可以使用控制器的onChangePage回调,在用户更改表格页面或滚动到底部时加载新数据。

如果您设置TableMode.paginationPage模式,分页将通过导航控件进行管理,并且每次页面更改时都会替换表格内容。您可以使用默认的分页样式,也可以使用paginationBuilder参数覆盖它。

相反,如果使用TableMode.paginationScroll,当用户滚动到表格底部时会显示新内容,并在列表末尾追加新项。

控制器可用于编程方式更改页面(goToPage)或更改表格项目(setItems),可以向表格添加项目或将项目完全替换。
记得在需要时释放控制器。

其他信息

此软件包由Mobilesoft Srl的Flutter能力中心维护。

完整示例

以下是完整的示例代码,展示了如何使用table_advanced插件创建一个具有分页功能的表格。

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: TableAdvanced<String>(
        columnHeaders: [
          TableAdvancedColumnHeader(
            child: const Text("列头 1"),
          ),
          TableAdvancedColumnHeader(
            child: const Text("列头 2"),
          ),
        ],
        rowBuilder: (item) {
          return TableAdvancedRow(
              data: DataRow(cells: [
            DataCell(
              Text(item),
            ),
            DataCell(
                Container(color: Colors.red, child: const Text("测试值")))
          ]));
        },
        controller: TableAdvancedController(
          items: List.generate(99, (index) => index.toString()),
          mode: TableMode.paginationPage,
          onCheckItems: (items) {},
        ),
      ),
    );
  }
}

更多关于Flutter高级表格插件table_advanced的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter高级表格插件table_advanced的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


table_advanced 是一个用于 Flutter 的高级表格插件,它提供了丰富的功能和灵活的配置选项,可以帮助开发者轻松地创建复杂的表格布局。以下是如何使用 table_advanced 插件的基本指南。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 table_advanced 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  table_advanced: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 基本用法

table_advanced 提供了 AdvancedTable 小部件来创建表格。以下是一个简单的示例:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Advanced Table Example'),
        ),
        body: AdvancedTable(
          columns: [
            TableColumn(title: 'ID', width: 100),
            TableColumn(title: 'Name', width: 200),
            TableColumn(title: 'Age', width: 100),
          ],
          rows: [
            TableRow(cells: ['1', 'John Doe', '28']),
            TableRow(cells: ['2', 'Jane Smith', '34']),
            TableRow(cells: ['3', 'Sam Green', '45']),
          ],
        ),
      ),
    );
  }
}

3. 自定义表格

AdvancedTable 提供了多种配置选项,允许你自定义表格的外观和行为。以下是一些常见的自定义选项:

3.1 自定义列宽

你可以通过 TableColumnwidth 属性来设置每一列的宽度:

TableColumn(title: 'ID', width: 100),
TableColumn(title: 'Name', width: 200),
TableColumn(title: 'Age', width: 100),

3.2 自定义行高

你可以通过 TableRowheight 属性来设置每一行的高度:

TableRow(cells: ['1', 'John Doe', '28'], height: 50),
TableRow(cells: ['2', 'Jane Smith', '34'], height: 60),

3.3 自定义单元格样式

你可以通过 TableRowcellStyles 属性来为每个单元格设置不同的样式:

TableRow(
  cells: ['1', 'John Doe', '28'],
  cellStyles: [
    TextStyle(fontWeight: FontWeight.bold),
    TextStyle(color: Colors.blue),
    TextStyle(color: Colors.red),
  ],
),

3.4 添加表头

你可以通过 AdvancedTableheader 属性来添加表头:

AdvancedTable(
  header: TableRow(
    cells: ['ID', 'Name', 'Age'],
    cellStyles: [
      TextStyle(fontWeight: FontWeight.bold),
      TextStyle(fontWeight: FontWeight.bold),
      TextStyle(fontWeight: FontWeight.bold),
    ],
  ),
  columns: [
    TableColumn(title: 'ID', width: 100),
    TableColumn(title: 'Name', width: 200),
    TableColumn(title: 'Age', width: 100),
  ],
  rows: [
    TableRow(cells: ['1', 'John Doe', '28']),
    TableRow(cells: ['2', 'Jane Smith', '34']),
    TableRow(cells: ['3', 'Sam Green', '45']),
  ],
),

4. 处理用户交互

AdvancedTable 还支持处理用户交互,如点击行或单元格。你可以通过 onRowTaponCellTap 回调来处理这些事件:

AdvancedTable(
  columns: [
    TableColumn(title: 'ID', width: 100),
    TableColumn(title: 'Name', width: 200),
    TableColumn(title: 'Age', width: 100),
  ],
  rows: [
    TableRow(cells: ['1', 'John Doe', '28']),
    TableRow(cells: ['2', 'Jane Smith', '34']),
    TableRow(cells: ['3', 'Sam Green', '45']),
  ],
  onRowTap: (index) {
    print('Row $index tapped');
  },
  onCellTap: (rowIndex, cellIndex) {
    print('Cell at row $rowIndex, column $cellIndex tapped');
  },
),
回到顶部