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

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

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

common_data_table 是一个用于Flutter平台的插件,它提供了一个通用的数据表格组件,类似于传统的数据表格,具备搜索过滤、设置分页限制、导出Excel/PDF以及编辑和删除行等功能。以下是关于如何使用该插件的详细说明和完整示例代码。

功能特性

  • 编辑/删除行:可以对表格中的行进行编辑或删除操作。
  • 搜索和分页:支持类似Bootstrap或Ajax DataTable的搜索功能和分页下拉选择。
  • 导出文件:可以将表格数据导出为PDF或Excel文件。
  • 自定义操作:可以添加更多的自定义操作按钮。

安装

首先,在 pubspec.yaml 文件中添加 common_data_table 依赖:

dependencies:
  common_data_table: {latest_version}

然后在Dart代码中导入该包:

import 'package:common_data_table/common_data_table.dart';

示例代码

以下是一个完整的示例代码,展示了如何使用 common_data_table 插件创建一个带有搜索、排序、导出和自定义操作的数据表格。

import 'package:common_data_table/common_data_table.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:url_launcher/url_launcher.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Common Data Table Example',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        useMaterial3: true,
      ),
      home: MyHomePage(),
    );
  }
}

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

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

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Common Data Table Example'),
      ),
      body: CommonDataTable(
        // 是否启用搜索功能
        isSearchAble: true,
        
        // 排序列索引
        sortColumn: [1],
        
        // 表格标题
        title: "测试表格",
        
        // 标题背景颜色
        titleBgColor: Colors.black,
        
        // 标题样式
        titleStyle: TextStyle(
          fontSize: 16,
          color: Colors.white,
          fontWeight: FontWeight.bold,
        ),
        
        // 表头列名
        heading: [
          '编号',
          '标题',
          '副标题',
        ],
        
        // 行操作按钮
        rowActionButtons: [
          RowActionButton(
            tooltip: "查看图片",  // 悬停提示
            icon: Icons.remove_red_eye,  // 图标
            isDisabled: (index) {
              if (index == 3) {
                return true;  // 禁用第4行的操作按钮
              }
              return null;
            },
            onTap: (index) {
              // 点击操作
              print("点击了第 $index 行的查看图片按钮");
            },
            color: Colors.blue,  // 按钮颜色
          )
        ],
        
        // 表格操作按钮
        tableActionButtons: [
          TableActionButton(
            child: Text("添加高亮"),  // 按钮文本
            onTap: () {
              print("添加高亮");
            },
            shortcuts: SingleActivator(
              LogicalKeyboardKey.keyA,  // 快捷键组合 (Ctrl + A)
              control: true,
            ),
            icon: Icon(
              FontAwesomeIcons.addressBook,  // 图标
              size: 20,
            ),
          )
        ],
        
        // 行背景颜色
        rowBGColor: (index) {
          if (index.isOdd) {
            return Colors.red;  // 奇数行背景为红色
          }
          return null;
        },
        
        // 表格数据
        data: [
          for (int i = 1; i <= 100; i++) ...[
            [
              '$i.',  // 编号
              '标题 $i',  // 标题
              '副标题 $i',  // 副标题
            ],
          ]
        ],
        
        // 表头对齐方式
        headingAlign: {
          0: TblAlign.center,  // 编号列居中
          1: TblAlign.center,  // 标题列居中
        },
        
        // 数据对齐方式
        dataAlign: {
          0: TblAlign.center,  // 编号列居中
        },
        
        // 编辑行回调
        onEdit: (index) {
          print("编辑了第 $index 行");
        },
        
        // 删除行回调
        onDelete: (index) {
          print("删除了第 $index 行");
        },
        
        // 禁用的删除按钮行
        disabledDeleteButtons: [1, 3, 5],
        
        // 禁用的编辑按钮行
        disabledEditButtons: [0, 2, 4],
        
        // 自定义行样式
        dataTextStyle: (row) {
          if (row[0] == '4.') {
            return {
              1: TextStyle(
                color: Colors.red,  // 标题列文字颜色为红色
                fontSize: 20,  // 字体大小为20
              )
            };
          }
          return null;
        },
        
        // 导出Excel回调
        onExportExcel: (file) async {
          await launchUrl(Uri.file(file.path));  // 打开导出的Excel文件
        },
        
        // 导出PDF回调
        onExportPDF: (file) async {
          await launchUrl(Uri.file(file.path));  // 打开导出的PDF文件
        },
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用common_data_table插件来展示数据表格的一个简单示例。这个插件可以方便地展示数据表格,并且支持一些基本的表格功能。

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

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

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

接下来,我们编写一个Flutter应用来展示数据表格。以下是一个完整的示例代码:

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

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

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

class DataTableScreen extends StatelessWidget {
  // 示例数据
  final List<Map<String, dynamic>> data = [
    {"name": "Alice", "age": 28, "city": "New York"},
    {"name": "Bob", "age": 24, "city": "San Francisco"},
    {"name": "Charlie", "age": 30, "city": "Los Angeles"},
  ];

  // 列配置
  final List<DataTableColumn> columns = [
    DataTableColumn(label: "Name", property: "name"),
    DataTableColumn(label: "Age", property: "age"),
    DataTableColumn(label: "City", property: "city"),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Data Table Example"),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: CommonDataTable(
          columns: columns,
          data: data,
          header: true,
          showBottomBorder: true,
          loading: false,
          onError: (error) {
            // 处理加载错误
            print("Error loading data: $error");
          },
        ),
      ),
    );
  }
}

在这个示例中,我们定义了一个DataTableScreen,它包含一些示例数据和一个列配置。CommonDataTable组件用于展示这些数据。

  • columns是一个DataTableColumn对象的列表,每个对象定义了表格的一列,包括列的标签(label)和对应数据字段(property)。
  • data是一个包含数据的列表,每个数据项是一个Map<String, dynamic>,键对应columns中的property

CommonDataTable的其他参数包括:

  • header:是否显示表头。
  • showBottomBorder:是否显示表格底部的边框。
  • loading:是否显示加载指示器。
  • onError:加载数据时发生错误时的回调函数。

这个示例展示了如何使用common_data_table插件来创建一个简单的数据表格。你可以根据需求自定义列的配置和数据的样式。

回到顶部