Flutter表格展示插件table_desk的使用

Flutter表格展示插件table_desk的使用

table_desk 是一个用于创建合并单元格表格的简单方法。

Pub版本

该插件仍在开发中(work-in-progress)。🚧
建议不要在您的产品中使用此插件。

特性

  • ✅ 自动调整表格大小以适应内容变化

使用方法

TableDesk(
    child: TableDeskColumn(
        children: [
            TableDeskRow(
                gaps: [
                    TableGap.width(100),
                    TableGap.weight(),
                ],
                children: [
                    WidgetA(),
                    WidgetB(),
                ]
            ),
            TableDeskRow(
                gaps: [
                    TableGap.width(100),
                    TableGap.weight(),
                ],
                children: [
                    WidgetA(),
                    WidgetB(),
                ]
            ),
        ]
    ),
)

开发中功能

  • ❌ 部分测试尚未完成。
  • ❌ 尚未实现 TableDesk 中的装饰设置。

示例代码

以下是一个完整的示例代码,展示了如何使用 table_desk 插件来创建一个简单的表格。

import 'package:flutter/material.dart';
import 'package:table_desk/table_desk.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(
        // 这是您的应用程序的主题。
        primarySwatch: Colors.blue,
      ),
      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> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        // 这里我们从 MyHomePage 对象中获取值,并将其用于设置我们的应用栏标题。
        // title: Text(widget.title),
      ),
      body: ListView(
        padding: const EdgeInsets.all(12),
        children: [
          TableDesk(
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(4),
              side: const BorderSide(color: Colors.black26, width: 1),
            ),
            child: TableDeskRow(
              border: const BorderSide(width: 1, color: Colors.black26),
              gaps: [
                TableGap.width(100),
                TableGap.weight(),
              ],
              children: [
                const Center(
                  child: Padding(
                    padding: EdgeInsets.all(8),
                    child: Text(
                      'MALE \n Jake\n age 20',
                      textAlign: TextAlign.center,
                    ),
                  ),
                ),
                TableDeskColumn(
                  border: const BorderSide(width: 0.5, color: Colors.black26),
                  children: [
                    TableDeskRow(
                      border:
                          const BorderSide(width: 0.5, color: Colors.black26),
                      gaps: [
                        TableGap.width(80),
                        TableGap.weight(),
                      ],
                      children: const [
                        Center(
                          child: Text('morning'),
                        ),
                        Center(
                          child: Padding(
                            padding: EdgeInsets.all(8),
                            child: Text('phone, laptop, eggs, pen, sandwich'),
                          ),
                        ),
                      ],
                    ),
                    TableDeskRow(
                      border:
                          const BorderSide(width: 0.5, color: Colors.black26),
                      gaps: [
                        TableGap.width(80),
                        TableGap.weight(),
                      ],
                      children: [
                        const Center(
                          child: Text('dinner'),
                        ),
                        Center(
                          child: Padding(
                            padding: const EdgeInsets.all(8),
                            child:
                                Text('phone, laptop, eggs, pen, sandwich' * 3),
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


table_desk 是一个 Flutter 插件,用于创建和展示表格数据。它提供了灵活的配置选项,可以轻松地创建各种类型的表格,并且支持自定义样式和交互。以下是使用 table_desk 的基本步骤和示例代码。

1. 添加依赖

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

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

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

2. 基本使用

以下是一个简单的示例,展示如何使用 table_desk 创建一个表格:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Table Desk Example'),
        ),
        body: TableDesk(
          columnCount: 3,
          rowCount: 4,
          cellBuilder: (context, columnIndex, rowIndex) {
            return Container(
              padding: EdgeInsets.all(8.0),
              alignment: Alignment.center,
              child: Text('C$columnIndex R$rowIndex'),
              decoration: BoxDecoration(
                border: Border.all(color: Colors.grey),
              ),
            );
          },
        ),
      ),
    );
  }
}

3. 自定义表格样式

table_desk 提供了多种选项来自定义表格的样式。例如,你可以设置表格的边框、背景颜色、行高、列宽等。

TableDesk(
  columnCount: 3,
  rowCount: 4,
  cellBuilder: (context, columnIndex, rowIndex) {
    return Container(
      padding: EdgeInsets.all(8.0),
      alignment: Alignment.center,
      child: Text('C$columnIndex R$rowIndex'),
      decoration: BoxDecoration(
        border: Border.all(color: Colors.grey),
        color: rowIndex % 2 == 0 ? Colors.white : Colors.grey[200],
      ),
    );
  },
  columnWidth: (columnIndex) {
    return columnIndex == 0 ? 100.0 : 200.0; // 自定义列宽
  },
  rowHeight: (rowIndex) {
    return 50.0; // 自定义行高
  },
)

4. 处理交互

你可以通过 onCellTap 回调来处理单元格的点击事件:

TableDesk(
  columnCount: 3,
  rowCount: 4,
  cellBuilder: (context, columnIndex, rowIndex) {
    return Container(
      padding: EdgeInsets.all(8.0),
      alignment: Alignment.center,
      child: Text('C$columnIndex R$rowIndex'),
      decoration: BoxDecoration(
        border: Border.all(color: Colors.grey),
      ),
    );
  },
  onCellTap: (columnIndex, rowIndex) {
    print('Cell tapped: C$columnIndex R$rowIndex');
  },
)
回到顶部