Flutter表格展示与管理插件pluto_grid_plus的使用
Flutter表格展示与管理插件pluto_grid_plus的使用
PlutoGrid Plus for flutter - v8.4.3
PlutoGrid Plus 是对 PlutoGrid 的维护版本。它是一个功能强大的数据网格组件,支持键盘操作,适用于多种场景,如移动单元格。PlutoGrid 主要针对 Web 和桌面环境进行开发,但也考虑了移动设备上的改进。如果您在使用过程中有任何问题或建议,可以通过 GitHub 提交 Issue。
Demo Web
Demo Web
您可以在这里尝试各种功能和用法,并查看示例代码。
Pub.Dev
Pub.Dev
请访问官方分发站点,了解如何安装和使用 PlutoGrid。
文档
Documentation
文档中提供了更多详细信息。
ChangeLog
ChangeLog
请注意版本变更时的改动。
Issue
Issue
报告任何问题或错误。
相关包
捐赠
JetBrains 提供免费许可
示例代码
以下是一个完整的示例代码,展示了如何使用 pluto_grid_plus
插件创建一个简单的表格。
import 'package:flutter/material.dart';
import 'package:pluto_grid_plus/pluto_grid_plus.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'PlutoGrid Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const PlutoGridExamplePage(),
);
}
}
/// PlutoGrid 示例
///
/// 更多示例请访问 GitHub 上的 Demo Web 链接。
class PlutoGridExamplePage extends StatefulWidget {
const PlutoGridExamplePage({super.key});
@override
State<PlutoGridExamplePage> createState() => _PlutoGridExamplePageState();
}
class _PlutoGridExamplePageState extends State<PlutoGridExamplePage> {
final List<PlutoColumn> columns = <PlutoColumn>[
PlutoColumn(
title: 'Id',
field: 'id',
type: PlutoColumnType.text(),
),
PlutoColumn(
title: 'Name',
field: 'name',
type: PlutoColumnType.text(),
),
PlutoColumn(
title: 'Age',
field: 'age',
type: PlutoColumnType.number(),
),
PlutoColumn(
title: 'Role',
field: 'role',
type: PlutoColumnType.select(<String>[
'Programmer',
'Designer',
'Owner',
]),
),
PlutoColumn(
title: 'Role 2',
field: 'role2',
type: PlutoColumnType.select(
<String>[
'Programmer',
'Designer',
'Owner',
],
builder: (item) {
return Row(children: [
Icon(item == 'Programmer' ? Icons.code : Icons.design_services),
const SizedBox(width: 8),
Text(item),
]);
},
),
),
PlutoColumn(
title: 'Joined',
field: 'joined',
type: PlutoColumnType.date(),
),
PlutoColumn(
title: 'Working time',
field: 'working_time',
type: PlutoColumnType.time(),
),
PlutoColumn(
title: 'Salary',
field: 'salary',
type: PlutoColumnType.currency(),
footerRenderer: (rendererContext) {
return PlutoAggregateColumnFooter(
rendererContext: rendererContext,
formatAsCurrency: true,
type: PlutoAggregateColumnType.sum,
format: '#,###',
alignment: Alignment.center,
titleSpanBuilder: (text) {
return [
const TextSpan(
text: 'Sum',
style: TextStyle(color: Colors.red),
),
const TextSpan(text: ' : '),
TextSpan(text: text),
];
},
);
},
),
];
final List<PlutoRow> rows = [
PlutoRow(
cells: {
'id': PlutoCell(value: 'user1'),
'name': PlutoCell(value: 'Mike'),
'age': PlutoCell(value: 20),
'role': PlutoCell(value: 'Programmer'),
'role2': PlutoCell(value: 'Programmer'),
'joined': PlutoCell(value: '2021-01-01'),
'working_time': PlutoCell(value: '09:00'),
'salary': PlutoCell(value: 300),
},
),
PlutoRow(
cells: {
'id': PlutoCell(value: 'user2'),
'name': PlutoCell(value: 'Jack'),
'age': PlutoCell(value: 25),
'role': PlutoCell(value: 'Designer'),
'role2': PlutoCell(value: 'Designer'),
'joined': PlutoCell(value: '2021-02-01'),
'working_time': PlutoCell(value: '10:00'),
'salary': PlutoCell(value: 400),
},
),
PlutoRow(
cells: {
'id': PlutoCell(value: 'user3'),
'name': PlutoCell(value: 'Suzi'),
'age': PlutoCell(value: 40),
'role': PlutoCell(value: 'Owner'),
'role2': PlutoCell(value: 'Owner'),
'joined': PlutoCell(value: '2021-03-01'),
'working_time': PlutoCell(value: '11:00'),
'salary': PlutoCell(value: 700),
},
),
];
/// 可以省略 columnGroups,用于分组列
final List<PlutoColumnGroup> columnGroups = [
PlutoColumnGroup(title: 'Id', fields: ['id'], expandedColumn: true),
PlutoColumnGroup(title: 'User information', fields: ['name', 'age']),
PlutoColumnGroup(title: 'Status', children: [
PlutoColumnGroup(title: 'A', fields: ['role'], expandedColumn: true),
PlutoColumnGroup(
title: 'Etc.', fields: ['joined', 'working_time', 'role2']),
]),
];
/// [PlutoGridStateManager] 提供了许多方法和属性,可以在运行时动态操作表格。
/// 通过传递 [onLoaded] 回调,可以在运行时动态操作表格。
late final PlutoGridStateManager stateManager;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('PlutoGrid Example'),
),
body: Container(
padding: const EdgeInsets.all(15),
child: PlutoGrid(
columns: columns,
rows: rows,
columnGroups: columnGroups,
onLoaded: (PlutoGridOnLoadedEvent event) {
stateManager = event.stateManager;
stateManager.setShowColumnFilter(true);
},
onChanged: (PlutoGridOnChangedEvent event) {
print(event);
},
configuration: const PlutoGridConfiguration(),
selectDateCallback: (PlutoCell cell, PlutoColumn column) async {
return showDatePicker(
context: context,
initialDate: PlutoDateTimeHelper.parseOrNullWithFormat(
cell.value,
column.type.date.format,
) ?? DateTime.now(),
firstDate: column.type.date.startDate ?? DateTime(0),
lastDate: column.type.date.endDate ?? DateTime(9999)
);
},
),
),
);
}
}
兼容的 Flutter 版本
Flutter 版本 | PlutoGrid 版本 |
---|---|
3.10.0 或更高 | 7.0.0 或更高 |
3.7.0 或更高 | 6.0.0 或更高 |
3.3.0 或更高 | 5.0.6 或更高 |
3.0.0 或更高 | 3.0.0-0.pre 或更高 |
2.5.0 或更高 | 2.5.0 或更高 |
对于其他版本,请联系 Issue。
希望这个示例能帮助您快速上手 pluto_grid_plus
插件。如果有任何问题,欢迎随时提问!
更多关于Flutter表格展示与管理插件pluto_grid_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表格展示与管理插件pluto_grid_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter表格展示与管理插件pluto_grid_plus
的代码案例。这个案例展示了如何初始化一个基本的PlutoGrid,并对其进行一些基本的配置和管理。
首先,确保你已经在pubspec.yaml
文件中添加了pluto_grid
和pluto_grid_plus
的依赖:
dependencies:
flutter:
sdk: flutter
pluto_grid: ^x.y.z # 请替换为最新版本号
pluto_grid_plus: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中创建一个基本的PlutoGrid。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:pluto_grid/pluto_grid.dart';
import 'package:pluto_grid_plus/pluto_grid_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PlutoGridDemo(),
);
}
}
class PlutoGridDemo extends StatefulWidget {
@override
_PlutoGridDemoState createState() => _PlutoGridDemoState();
}
class _PlutoGridDemoState extends State<PlutoGridDemo> {
late PlutoGridStateController gridStateController;
@override
void initState() {
super.initState();
// 初始化PlutoGridStateController
gridStateController = PlutoGridStateController(
columns: _createColumns(),
rows: _createRows(),
configuration: PlutoGridConfiguration(
// 配置PlutoGrid的一些行为
enableColumnResize: true,
enableColumnReorder: true,
enableRowDragAndDrop: true,
),
);
}
List<PlutoColumn> _createColumns() {
return [
PlutoColumn(
title: 'Name',
field: 'name',
type: PlutoColumnType.text(),
width: 150,
),
PlutoColumn(
title: 'Age',
field: 'age',
type: PlutoColumnType.number(),
width: 100,
),
PlutoColumn(
title: 'Email',
field: 'email',
type: PlutoColumnType.text(),
width: 200,
),
];
}
List<PlutoRow> _createRows() {
return [
PlutoRow(
cells: {
'name': PlutoCell(value: 'John Doe'),
'age': PlutoCell(value: 30),
'email': PlutoCell(value: 'john.doe@example.com'),
},
),
PlutoRow(
cells: {
'name': PlutoCell(value: 'Jane Smith'),
'age': PlutoCell(value: 25),
'email': PlutoCell(value: 'jane.smith@example.com'),
},
),
];
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('PlutoGrid Demo'),
),
body: PlutoGrid(
stateController: gridStateController,
),
);
}
}
代码解释:
-
依赖导入:
- 导入
flutter
、pluto_grid
和pluto_grid_plus
包。
- 导入
-
主函数:
- 使用
MaterialApp
来构建应用,并设置首页为PlutoGridDemo
。
- 使用
-
PlutoGridDemo:
- 创建一个有状态的Widget来管理PlutoGrid的状态。
-
_PlutoGridDemoState:
- 初始化
PlutoGridStateController
,并配置列和行数据。 _createColumns
方法定义了表格的列,包括标题、字段、类型和宽度。_createRows
方法定义了表格的行数据,每个单元格包含相应的值。
- 初始化
-
构建UI:
- 使用
Scaffold
和AppBar
来构建应用的基本布局。 - 使用
PlutoGrid
组件来展示表格,并传入gridStateController
。
- 使用
这个示例展示了如何使用pluto_grid_plus
来创建一个基本的表格,并对其进行一些基本的配置。你可以根据需要进一步扩展和自定义这个表格,比如添加更多列、处理用户交互事件等。