Flutter数据表格展示插件easy_data_table的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter数据表格展示插件easy_data_table的使用

easy_data_table 是一个简单且高效的在 Flutter 中使用数据表格的方式。

特性

  • 简化数据表格:使用少量代码即可创建数据表格。
  • 选择功能:通过复选框列启用行选择。
  • 自定义外观:通过各种选项自定义外观。
  • 分页功能:为大数据集实现分页。
  • 排序功能:通过预定义的列进行排序。

开始使用

1. 添加依赖

将以下内容添加到你的 pubspec.yaml 文件中:

dependencies:
  flutter:
    sdk: flutter
  easy_data_table: ^最新版本号

然后运行 flutter pub get 来获取依赖包。

2. 导入库

在你的 Dart 代码中添加以下导入语句:

import 'package:easy_data_table/easy_data_table.dart';

使用方法

使用 easy_data_table 非常简单。只需创建一个包含数据的 EasyDataTable 小部件:

EasyDataTable<Person>(
  rowsPerPage: rowsPerPage,
  currentPage: page,
  selectedRows: selected,
  onSelectChanged: (value, item) {
    setState(() {
      if (value == true) {
        selected.add(item);
      } else {
        selected.remove(item);
      }
    });
  },
  columns: [
    EasyColumn(
      headerText: 'Name',
      cellText: (person, i) => person.name,
      sortable: true,
    ),
    EasyColumn(
      headerText: 'Age',
      cellText: (person, i) => person.age.toString(),
      sortable: true,
      sort: (a, b, ascending) {
        if (ascending) {
          return a.age.compareTo(b.age);
        } else {
          return b.age.compareTo(a.age);
        }
      },
    ),
    EasyColumn(
      headerText: 'Married',
      cellText: (person, i) => person.isMarried ? 'Yes' : 'No',
    ),
    EasyColumn(
      headerText: 'Height',
      cellText: (person, i) => person.height.toStringAsFixed(2),
    ),
    EasyColumn(headerText: 'City', cellText: (person, i) => person.city, textAlign: TextAlign.left),
  ],
  rows: persons,
  paginatorBuilder: (context) {
    return Container(
      alignment: Alignment.centerRight,
      child: EasyTablePagination(
        count: persons.length,
        rowsPerPage: rowsPerPage,
        page: page,
        onPageChange: (int value) => setState(() => (page = value)),
        onRowsPerPageChange: (value) => setState(() => (rowsPerPage = value)),
        rowsPerPageOptions: const [3, 10, 15, 30],
      ),
    );
  },
)

常见问题

Q: 如何自定义单元格的外观?

A: 可以使用 EasyColumn 的选项如 cellWidgetBuilder, textAlign, 和 width 来自定义单元格的外观。

支持与联系

贡献

欢迎提出任何改进或添加的建议。如果你想要提交 PR,你随时可以这样做 :)

完整示例代码

以下是完整的示例代码:

import 'package:easy_data_table/easy_data_table.dart';
import 'package:example/person.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: 'Easy DataTable Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Easy DataTable'),
    );
  }
}

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> {
  List<Person> selected = [];
  int rowsPerPage = 3;
  int page = 1;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: ConstrainedBox(
          constraints: const BoxConstraints(maxWidth: 700),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.end,
            children: [
              Expanded(
                child: EasyDataTable<Person>(
                  rowsPerPage: rowsPerPage,
                  currentPage: page,
                  selectedRows: selected,
                  onSelectChanged: (value, item) {
                    setState(() {
                      if (value == true) {
                        selected.add(item);
                      } else {
                        selected.remove(item);
                      }
                    });
                  },
                  columns: [
                    EasyColumn(
                      headerText: 'Name',
                      cellText: (person, i) => person.name,
                      sortable: true,
                    ),
                    EasyColumn(
                      headerText: 'Age',
                      cellText: (person, i) => person.age.toString(),
                      sortable: true,
                      sort: (a, b, ascending) {
                        if (ascending) {
                          return a.age.compareTo(b.age);
                        } else {
                          return b.age.compareTo(a.age);
                        }
                      },
                    ),
                    EasyColumn(
                      headerText: 'Married',
                      cellText: (person, i) => person.isMarried ? 'Yes' : 'No',
                    ),
                    EasyColumn(
                      headerText: 'Height',
                      cellText: (person, i) => person.height.toStringAsFixed(2),
                    ),
                    EasyColumn(headerText: 'City', cellText: (person, i) => person.city, textAlign: TextAlign.left),
                  ],
                  rows: persons,
                  paginatorBuilder: (context) {
                    return Container(
                      alignment: Alignment.centerRight,
                      child: EasyTablePagination(
                        count: persons.length,
                        rowsPerPage: rowsPerPage,
                        page: page,
                        onPageChange: (int value) => setState(() => (page = value)),
                        onRowsPerPageChange: (value) => setState(() => (rowsPerPage = value)),
                        rowsPerPageOptions: const [3, 10, 15, 30],
                      ),
                    );
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter中使用easy_data_table插件来展示数据表格的示例代码。easy_data_table是一个用于在Flutter应用中轻松展示数据表格的插件。

首先,你需要在你的pubspec.yaml文件中添加easy_data_table依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_data_table: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来获取依赖。

接下来,你可以在你的Flutter应用中使用EasyDataTable组件来展示数据表格。以下是一个完整的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Data Table Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: DataTableScreen(),
    );
  }
}

class DataTableScreen extends StatelessWidget {
  // 示例数据
  final List<Map<String, dynamic>> data = [
    {'name': 'Alice', 'age': 24, 'email': 'alice@example.com'},
    {'name': 'Bob', 'age': 30, 'email': 'bob@example.com'},
    {'name': 'Charlie', 'age': 22, 'email': 'charlie@example.com'},
  ];

  // 列配置
  final List<DataTableColumn> columns = [
    DataTableColumn(
      label: 'Name',
      value: (dataRow) => dataRow['name'],
    ),
    DataTableColumn(
      label: 'Age',
      value: (dataRow) => dataRow['age'],
    ),
    DataTableColumn(
      label: 'Email',
      value: (dataRow) => dataRow['email'],
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Data Table Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: EasyDataTable(
          columns: columns,
          rows: data,
        ),
      ),
    );
  }
}

在这个示例中:

  1. data是一个包含示例数据的列表,每个数据项是一个包含nameageemail字段的Map。
  2. columns定义了表格的列,每列有一个标签(label)和一个值获取函数(value),该函数从数据行中提取相应的值。
  3. EasyDataTable组件用于渲染数据表格,它接受columnsrows作为参数。

运行这个示例代码,你将看到一个包含三列(Name, Age, Email)和三行数据的表格。

请确保你已经安装了最新版本的easy_data_table插件,并根据实际需要进行适当的调整。

回到顶部