Flutter分组选择插件grouped_checkbox的使用
Flutter分组选择插件grouped_checkbox的使用
概述
GroupedCheckbox
是一个用于在Flutter应用中显示复选框列表的插件。它支持多种布局方式和自定义选项,适用于需要分组选择功能的场景。
功能特性
- 支持泛型数据类型:可以处理不同类型的数据。
- 多种布局方式:支持垂直、水平和Wrap(自动换行)三种布局。
- 禁用状态支持:可以设置某些项为不可选状态。
- 状态变化回调:提供回调函数以处理选择状态的变化。
安装
要使用 grouped_checkbox
插件,首先需要将其添加到 pubspec.yaml
文件的依赖项中:
dependencies:
grouped_checkbox: 2.0.0
使用示例
以下是一个完整的示例代码,展示了如何在Flutter应用中使用 GroupedCheckbox
插件。该示例包括垂直、水平和Wrap三种布局方式,并且展示了如何处理选择状态的变化。
import 'package:flutter/material.dart';
import 'package:grouped_checkbox/grouped_checkbox.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Grouped Checkbox Demo',
home: MyHomePage(title: 'Grouped Checkbox Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, this.title}) : super(key: key);
final String? title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 定义颜色项列表
final List<ColorItem> allItemList = [
ColorItem('Red', Colors.red),
ColorItem('Green', Colors.green),
ColorItem('Blue', Colors.blue),
ColorItem('Yellow', Colors.yellow),
ColorItem('Black', Colors.black),
ColorItem('Violet', Colors.purple),
];
// 初始化已选中的项
List<ColorItem> selectedVerticalItems = [];
List<ColorItem> selectedHorizontalItems = [];
List<ColorItem> selectedWrapItems = [];
[@override](/user/override)
void initState() {
super.initState();
// 初始化部分已选中的项
selectedVerticalItems = [allItemList[2], allItemList[3]];
selectedHorizontalItems = [allItemList[3], allItemList[4]];
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.blue,
title: Text(widget.title!, style: TextStyle(color: Colors.white)),
),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
// 垂直布局示例
buildCheckboxSection(
'VERTICAL ORIENTATION EXAMPLE',
CheckboxOrientation.vertical,
selectedVerticalItems,
updateVerticalItems,
[allItemList[0]]),
Divider(height: 2.0),
// 水平布局示例
buildCheckboxSection(
'HORIZONTAL ORIENTATION EXAMPLE',
CheckboxOrientation.horizontal,
selectedHorizontalItems,
updateHorizontalItems,
[allItemList[1]]),
Divider(height: 2.0),
// Wrap布局示例
Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
borderRadius: BorderRadius.all(Radius.circular(8.0))),
margin: EdgeInsets.only(left: 15.0, right: 15.0, top: 15.0),
height: MediaQuery.of(context).size.height / 4,
width: MediaQuery.of(context).size.width,
child: buildCheckboxSection(
'WRAP ORIENTATION EXAMPLE',
CheckboxOrientation.wrap,
selectedWrapItems,
updateWrapItems,
[allItemList[2]]),
),
SizedBox(height: 50.0),
],
),
),
);
}
// 更新垂直布局的选择项
void updateVerticalItems(List<ColorItem> newItems) {
setState(() {
selectedVerticalItems = newItems;
});
}
// 更新水平布局的选择项
void updateHorizontalItems(List<ColorItem> newItems) {
setState(() {
selectedHorizontalItems = newItems;
});
}
// 更新Wrap布局的选择项
void updateWrapItems(List<ColorItem> newItems) {
setState(() {
selectedWrapItems = newItems;
});
}
// 构建复选框部分
Widget buildCheckboxSection(
String title,
CheckboxOrientation orientation,
List<ColorItem> selectedItems,
Function(List<ColorItem>) updateFunction,
List<ColorItem> disabledItems) {
return Padding(
padding: const EdgeInsets.only(top: 15.0, bottom: 15.0),
child: Column(
children: <Widget>[
// 标题
Text(
title,
style: TextStyle(color: Colors.blue, fontSize: 15.0),
),
// 复选框组件
GroupedCheckbox<ColorItem>(
itemList: allItemList, // 所有项
checkedItemList: selectedItems, // 已选中的项
disabled: disabledItems, // 禁用的项
onChanged: (itemList) {
updateFunction(itemList!); // 回调函数
},
orientation: orientation, // 布局方式
checkColor: Colors.purpleAccent, // 选中时的勾选颜色
activeColor: Colors.lightBlue, // 选中时的背景颜色
itemWidgetBuilder: (item) => Text(
item.name,
style: TextStyle(color: item.color), // 自定义项的显示样式
),
),
SizedBox(height: 5.0),
// 显示已选中的项
Text(
'Selected Colors: ${selectedItems.map((item) => item.name).join(', ')}',
style: TextStyle(color: Colors.blue),
),
],
),
);
}
}
// 颜色项类
class ColorItem {
String name;
Color color;
ColorItem(this.name, this.color);
}
更多关于Flutter分组选择插件grouped_checkbox的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter分组选择插件grouped_checkbox的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用grouped_checkbox
插件来实现分组选择功能的代码示例。这个插件允许你在Flutter应用中创建带有分组功能的复选框。
首先,你需要在你的pubspec.yaml
文件中添加grouped_checkbox
依赖:
dependencies:
flutter:
sdk: flutter
grouped_checkbox: ^x.y.z # 请将x.y.z替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,是一个简单的示例代码,展示如何使用grouped_checkbox
:
import 'package:flutter/material.dart';
import 'package:grouped_checkbox/grouped_checkbox.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Grouped Checkbox Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 定义分组数据
final List<GroupedCheckboxData> groupedData = [
GroupedCheckboxData(
header: "Group 1",
items: [
GroupedCheckboxItem(title: "Item 1-1", value: "1-1"),
GroupedCheckboxItem(title: "Item 1-2", value: "1-2"),
],
),
GroupedCheckboxData(
header: "Group 2",
items: [
GroupedCheckboxItem(title: "Item 2-1", value: "2-1"),
GroupedCheckboxItem(title: "Item 2-2", value: "2-2"),
],
),
];
// 用于存储选中的值
List<String> selectedValues = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Grouped Checkbox Example"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: GroupedCheckbox(
data: groupedData,
selectedValues: selectedValues,
onValueChanged: (List<String> values) {
setState(() {
selectedValues = values;
});
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 打印选中的值
print("Selected Values: $selectedValues");
},
tooltip: 'Print Selected Values',
child: Icon(Icons.print),
),
);
}
}
代码解释
-
依赖导入:
- 导入
flutter/material.dart
和grouped_checkbox/grouped_checkbox.dart
。
- 导入
-
数据准备:
- 使用
GroupedCheckboxData
类定义分组数据,每个分组包含一个header
和多个GroupedCheckboxItem
。
- 使用
-
状态管理:
- 使用
StatefulWidget
和_MyHomePageState
来管理选中的值。 selectedValues
列表用于存储当前选中的值。
- 使用
-
构建UI:
- 使用
GroupedCheckbox
小部件来显示分组复选框。 onValueChanged
回调函数用于更新选中的值。
- 使用
-
浮动按钮:
- 添加一个浮动按钮,点击后打印选中的值。
运行这个示例代码,你将看到一个包含两个分组复选框的界面,每个分组有两个选项。你可以选中或取消选中这些选项,并通过点击浮动按钮来打印当前选中的值。
这个示例应该能帮助你理解如何在Flutter中使用grouped_checkbox
插件来实现分组选择功能。