Flutter分组网格布局插件grouped_grid的使用
Flutter分组网格布局插件grouped_grid的使用
一个用于显示分组网格项目的包。
预览
应用程序在示例文件夹中的应用截图:
特性
提供带有以下特性的分组GridView变体:
- 支持主标题和尾部。
- 支持组标题和尾部(两者都是可选的)。
- 可以选择是否使用粘性组标题(默认为粘性组标题)。
SDK要求
此包需要 Dart 3,因为它在 itemBuilder
签名中使用了 <strong>Records语法</strong>
。
environment:
sdk: '>=3.0.0 <4.0.0'
flutter: ">=3.10.0"
使用
示例使用以下代码创建按 TimeControlType
分组的时间控制项网格,并带有粘性组标题。
检查示例文件夹以获取完整实现。
import 'package:flutter/material.dart';
import 'package:grouped_grid/grouped_grid.dart';
import '../../../domain/entity/time_control.dart';
class TimeControlGroupedGridView extends StatelessWidget {
const TimeControlGroupedGridView({super.key, required this.data, required this.columnCount});
final int columnCount;
final Map<TimeControlType, List<TimeControl>> data;
@override
Widget build(BuildContext context) {
return GroupedGridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: columnCount,
crossAxisSpacing: 2,
mainAxisSpacing: 2,
),
groupKeys: data.keys,
groupHeaderBuilder: _groupHeaderBuilder,
itemCountForGroup: _itemCountForGroup,
itemBuilder: _itemBuilder,
);
}
Widget _groupHeaderBuilder(BuildContext context, TimeControlType group) {
// 实现组头构建器
}
int _itemCountForGroup(TimeControlType key) {
// 返回给定组中的项目数量
}
Widget _itemBuilder(BuildContext context, ({TimeControlType key, int itemIndex}) group) {
// 返回给定组和索引的项目
}
}
感谢
该项目合并了两个dart包的想法,我想感谢两位作者:
更多关于Flutter分组网格布局插件grouped_grid的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter分组网格布局插件grouped_grid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用grouped_grid
插件来实现分组网格布局的示例代码。grouped_grid
插件允许你以分组的方式展示网格项,非常适合用于展示具有分类标签的数据集合。
首先,确保你已经在pubspec.yaml
文件中添加了grouped_grid
依赖:
dependencies:
flutter:
sdk: flutter
grouped_grid: ^最新版本号 # 替换为最新的版本号
然后运行flutter pub get
来安装依赖。
接下来是一个完整的示例代码,展示了如何使用grouped_grid
插件:
import 'package:flutter/material.dart';
import 'package:grouped_grid/grouped_grid.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Grouped Grid Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
final List<GroupedItem> items = [
GroupedItem(
group: 'Group 1',
title: 'Item 1.1',
child: Container(
color: Colors.red,
child: Center(child: Text('Item 1.1')),
),
),
GroupedItem(
group: 'Group 1',
title: 'Item 1.2',
child: Container(
color: Colors.green,
child: Center(child: Text('Item 1.2')),
),
),
GroupedItem(
group: 'Group 2',
title: 'Item 2.1',
child: Container(
color: Colors.blue,
child: Center(child: Text('Item 2.1')),
),
),
GroupedItem(
group: 'Group 2',
title: 'Item 2.2',
child: Container(
color: Colors.yellow,
child: Center(child: Text('Item 2.2')),
),
),
GroupedItem(
group: 'Group 3',
title: 'Item 3.1',
child: Container(
color: Colors.purple,
child: Center(child: Text('Item 3.1')),
),
),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Grouped Grid Example'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: GroupedGridView<GroupedItem>(
items: items,
groupHeaderBuilder: (context, group) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Text(
group,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
);
},
itemBuilder: (context, item) {
return item.child;
},
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 8.0,
mainAxisSpacing: 8.0,
),
),
),
);
}
}
class GroupedItem {
final String group;
final String title;
final Widget child;
GroupedItem({required this.group, required this.title, required this.child});
}
代码解释
-
依赖添加:在
pubspec.yaml
中添加grouped_grid
依赖。 -
数据模型:创建了一个
GroupedItem
类来存储每个网格项的信息,包括所属的组、标题和子组件。 -
主应用:
MyApp
类作为应用的主入口,定义了应用的主题和首页。 -
首页:
MyHomePage
类负责构建分组网格布局。- 使用
GroupedGridView
来展示分组网格项。 groupHeaderBuilder
用于构建每个组的头部,这里简单地显示组的名称。itemBuilder
用于构建每个网格项的内容。gridDelegate
定义了网格的布局,这里使用了SliverGridDelegateWithFixedCrossAxisCount
,指定了每行2个网格项,以及网格项之间的间距。
- 使用
通过这种方式,你可以很方便地在Flutter应用中实现分组网格布局。如果有更多自定义需求,你可以进一步调整GroupedGridView
的参数和方法。