Flutter 简仿Excel表格组件介绍

前言

哈喽,各位 Flutter 开发者们!今天我要给大家介绍一个非常实用的 Flutter 表格组件库 - excel_table_plus!✨

作为一个天天和数据打交道的开发者,你是否也曾经为 Flutter 原生组件无法满足复杂表格需求而苦恼?是否也希望能有一个像 Excel 一样强大的表格组件?那么今天介绍的这个库,绝对能让你眼前一亮!😍

什么?你说你不需要处理复杂表格?那你也应该看看,说不定哪天就用上了呢~

🌟 为什么选择 excel_table_plus?

在 Flutter 生态中,虽然有一些表格组件,但功能都比较基础或者很复杂,满足不了或者定制不了我们特殊的需求。而 excel_table_plus 则是一个功能增强的 Excel 风格表格组件,它提供了更多基础的交互以及可自定义的单元格样式,可以满足各种复杂的业务需求,该库是在flutter_excel_table的参考基础下,经过了大量改动和完善,毕竟取自于开源,当然也要回馈于开源。其实大部分也都是AI辅助完成的,我只是起到一个需求引导作用。不得不说现在AI确实强大,其实连这篇文章主体都是让AI写完,我再做补充的,哈哈哈哈哈哈。

让我来给你展示一下它的核心功能:

  • ✅ 创建自定义行列的表格
  • ✅ 支持单元格合并
  • ✅ 自定义单元格样式(颜色、字体、对齐方式等)
  • ✅ 只读单元格支持
  • ✅ 可配置的单元格尺寸(宽度和高度)
  • ✅ 可调整行列大小
  • ✅ 单元格选择管理
  • ✅ 可滚动的表格视图
  • ✅ 自定义单元格构建器,完全控制
  • ✅ 行列标题(序号)
  • ✅ 可自定义边框和圆角
  • ✅ 支持自定义单元格模型类和 JSON 序列化
  • ✅ 支持导出和导入表格数据为 JSON 格式

是不是感觉功能很全面?别急,还有更高级的功能等着你去发掘呢!

🎯 高级功能一览

基于这些核心功能,开发者可以轻松实现以下高级功能:

  • 🎯 多单元格选择(支持拖拽)
  • 🎯 插入/删除行列
  • 🎯 单元格格式化(文本、数字、日期、下拉框)
  • 🎯 缩放功能
  • 🎯 撤销/重做操作
  • 🎯 复杂单元格类型(下拉框、日期选择器等)

看到这些功能,是不是已经心动了?这不就是你梦寐以求的表格组件吗?

🚀 快速上手

使用 excel_table_plus 非常简单,只需几个步骤即可集成到你的项目中:

1. 添加依赖

在你的 pubspec.yaml 文件中添加以下依赖:

yaml 复制代码
dependencies:
  flutter:
    sdk: flutter
  excel_table_plus: ^0.0.1

2. 安装依赖

bash 复制代码
flutter pub get

3. 导入库

dart 复制代码
import 'package:excel_table_plus/excel_table_plus.dart';

4. 基本使用

dart 复制代码
// 创建控制器
ExcelController controller = ExcelController(
  excel: ExcelModel(
    x: 10, // 10列
    y: 20, // 20行
    showSn: true, // 显示序号
    backgroundColor: Colors.white,
    rowColor: Colors.blue.withOpacity(.25),
    resizable: true, // 可调整大小
    borderRadius: 8.0, // 圆角
  ),
  items: [
    // 标题行
    ExcelItemModel(
      position: ExcelPosition(0, 0),
      value: '姓名',
      color: Colors.grey.shade200,
      isReadOnly: true,
    ),
    ExcelItemModel(
      position: ExcelPosition(1, 0),
      value: '年龄',
      color: Colors.grey.shade200,
      isReadOnly: true,
    ),
    // 数据单元格
    ExcelItemModel(
      position: ExcelPosition(0, 1),
      value: '张三',
    ),
    ExcelItemModel(
      position: ExcelPosition(1, 1),
      value: '30',
    ),
    // 合并单元格示例
    ExcelItemModel(
      position: ExcelPosition(0, 5),
      value: '合并单元格示例',
      color: Colors.green,
      isReadOnly: true,
      isMergeCell: true,
      positions: [
        ExcelPosition(0, 5),
        ExcelPosition(1, 5),
        ExcelPosition(2, 5),
        ExcelPosition(0, 6),
        ExcelPosition(1, 6),
        ExcelPosition(2, 6),
      ],
    ),
  ],
);

// 使用组件
FlutterExcelWidget(
  controller: controller,
  itemBuilder: (x, y, item) {
    // 自定义单元格部件构建器
    if (item != null) {
      return TextField(
        controller: TextEditingController()..text = item.value?.toString() ?? '',
        readOnly: item.isReadOnly,
        decoration: const InputDecoration(
          border: InputBorder.none,
          contentPadding: EdgeInsets.all(8),
        ),
        onChanged: (value) {
          item.value = value;
        },
      );
    }
    return const SizedBox();
  },
)

是不是很简单?几行代码就能创建一个功能强大的表格组件!

🎥 效果预览

说了这么多,不如直接看效果!下面是几个示例的运行效果:

简单示例

高级示例

JSON 导入/导出示例

看到这些效果,是不是已经开始跃跃欲试了?😎

🧠 自定义单元格模型

excel_table_plus 还支持带有 JSON 序列化的自定义单元格模型类。为了正确地将单元格数据导出和导入为 JSON,自定义单元格值类必须实现 toJson()fromJson() 方法:

dart 复制代码
// 带 JSON 支持的自定义单元格值类
class CustomCellValue {
  String? value;
  final String cellType = 'custom_text';
  final TextEditingController controller;
  final TextAlign textAlign;
  final TextStyle? style;
  
  CustomCellValue({
    this.value,
    TextEditingController? controller,
    this.textAlign = TextAlign.start,
    this.style,
  }) : controller = controller ?? TextEditingController();
  
  // JSON 序列化
  Map<String, dynamic> toJson() {
    final Map<String, dynamic> json = <String, dynamic>{};
    json['value'] = value;
    json['cellType'] = cellType;
    json['textAlign'] = textAlign.toString();
    // 如需要,序列化样式
    if (style != null) {
      json['style'] = {
        'fontSize': style!.fontSize,
        'color': style!.color?.value,
        // 根据需要添加其他样式属性
      };
    }
    return json;
  }
  
  // JSON 反序列化
  factory CustomCellValue.fromJson(Map<String, dynamic> json) {
    // 实现反序列化逻辑
    // ...
  }
}

📦 数据导入/导出

库支持将整个表格数据导出为 JSON 格式并重新导入:

dart 复制代码
// 将表格数据导出为 JSON
Map<String, dynamic> exportTableData() {
  return {
    'excel': controller.excel.toJson(),
    'items': controller.items.map((item) => item.toJson()).toList(),
  };
}

// 从 JSON 导入表格数据
void importTableData(Map<String, dynamic> json) {
  ExcelModel excel = ExcelModel.fromJson(json['excel'] as Map<String, dynamic>);
  List<ExcelItemModel> items = (json['items'] as List<dynamic>)
      .map((itemJson) => ExcelItemModel.fromJson(
            itemJson as Map<String, dynamic>,
            customValueFactory: (cellType, valueJson) {
              // 根据类型创建自定义单元格值
              switch (cellType) {
                case 'custom_text':
                  return CustomCellValue.fromJson(valueJson);
                // 为其他自定义单元格类型添加更多情况
                default:
                  return valueJson;
              }
            },
          ))
      .toList();
  
  controller = ExcelController(
    excel: excel,
    items: items,
  );
}

📚 总结

excel_table_plus 是一个功能强大且灵活的 Flutter 表格组件库,它提供了丰富的功能和良好的扩展性,能够满足各种复杂的表格需求。无论你是需要一个简单的数据展示表格,还是一个功能复杂的 Excel 风格编辑器,它都能胜任。

哎呀,这么好的库,你还在等什么?赶紧去试试吧!(这句也是AI写的,其实我想说的是,我能力有限,希望大佬们多多指导完善)✨

项目信息

安装方式

bash 复制代码
flutter pub add excel_table_plus

P.S. 如果你觉得这个库还不错,别忘了去 GitHub 上给个 Star 哦!你的支持是我继续创作的动力!💪(这句也是AI写的,star不star都无所谓的,主打一个分享的喜悦,或许能帮到跟我一样遇到相同需求并且为之所困的有缘人。)

相关推荐
奋斗的小青年!!1 天前
Flutter浮动按钮在OpenHarmony平台的实践经验
flutter·harmonyos·鸿蒙
程序员老刘1 天前
一杯奶茶钱,PicGo + 阿里云 OSS 搭建永久稳定的个人图床
flutter·markdown
奋斗的小青年!!1 天前
OpenHarmony Flutter 拖拽排序组件性能优化与跨平台适配指南
flutter·harmonyos·鸿蒙
小雨下雨的雨1 天前
Flutter 框架跨平台鸿蒙开发 —— Stack 控件之三维层叠艺术
flutter·华为·harmonyos
行者961 天前
OpenHarmony平台Flutter手风琴菜单组件的跨平台适配实践
flutter·harmonyos·鸿蒙
小雨下雨的雨1 天前
Flutter 框架跨平台鸿蒙开发 —— Flex 控件之响应式弹性布局
flutter·ui·华为·harmonyos·鸿蒙系统
cn_mengbei1 天前
Flutter for OpenHarmony 实战:CheckboxListTile 复选框列表项详解
flutter
cn_mengbei1 天前
Flutter for OpenHarmony 实战:Switch 开关按钮详解
flutter
奋斗的小青年!!1 天前
OpenHarmony Flutter实战:打造高性能订单确认流程步骤条
flutter·harmonyos·鸿蒙
Coder_Boy_1 天前
Flutter基础介绍-跨平台移动应用开发框架
spring boot·flutter