在用户界面中,复选框(Checkbox
)通常用于让用户选择多个选项或启用/禁用某些功能。与 Switch
不同,Checkbox
允许多个选项同时处于选中状态,这使得它在表单、设置选项和多项选择场景中得到了广泛应用。
Checkbox
的外观为一个方形框,当被选中时显示对勾标记。它的设计简单,但非常有效。通过灵活的配置,Checkbox
可以自定义其颜色、大小以及启用/禁用状态,提供多种视觉效果和交互方式。
Checkbox
的基本使用方式非常简单,只需提供两个主要属性——value
和 onChanged
。value
控制复选框的选中状态,onChanged
用于监听复选框状态的变化。
Checkbox(
value: isChecked,
onChanged: (bool? value) {
setState(() {
isChecked = value!;
});
},
)
在此示例中,isChecked
是一个 bool
变量,表示复选框是否被选中。onChanged
回调会在用户点击复选框时触发,并更新 isChecked
的值。
属性 | 类型 | 说明 | 默认值 |
---|---|---|---|
value |
bool? |
控制复选框是否被选中,true 为选中,false 为未选中,null 表示不确定状态。 |
必须指定 |
onChanged |
ValueChanged |
当复选框状态变化时调用的回调函数。 | 必须指定 |
activeColor |
Color? |
复选框选中时的颜色。 | null |
checkColor |
Color? |
复选框内部对勾的颜色。 | null |
fillColor |
MaterialStateProperty |
控制复选框背景颜色,通常用于自定义各种状态下的颜色。 | null |
hoverColor |
Color? |
当鼠标悬停在复选框上时显示的颜色(主要用于桌面应用)。 | null |
focusColor |
Color? |
复选框获得焦点时显示的颜色。 | null |
materialTapTargetSize |
MaterialTapTargetSize? |
控制复选框点击目标的大小。可以设置为 padded 或 shrinkWrap ,来控制点击区域的扩展。 |
null |
visualDensity |
VisualDensity? |
控制复选框的密度,影响复选框的大小和内部内容的间距。 | null |
tristate |
bool |
如果设置为 true ,复选框可以有第三种状态(不确定状态,null ),常用于多选情况中不确定的值。 |
false |
可以通过 activeColor
和 checkColor
来定制复选框的颜色。activeColor
决定了复选框被选中时的背景颜色,而 checkColor
则决定了内部对勾的颜色。
示例:自定义复选框颜色
Checkbox(
value: isChecked,
onChanged: (bool? value) {
setState(() {
isChecked = value!;
});
},
activeColor: Colors.green, // 选中时的背景颜色
checkColor: Colors.white, // 选中时对勾的颜色
)
在此示例中,当复选框被选中时,它的背景颜色将变为绿色,对勾的颜色将变为白色。
fillColor
允许你为复选框的不同状态(如悬停、选中、未选中)指定不同的颜色。你可以使用 MaterialStateProperty
来实现这种动态的颜色变化。
示例:动态填充颜色的复选框
Checkbox(
value: isChecked,
onChanged: (bool? value) {
setState(() {
isChecked = value!;
});
},
fillColor: MaterialStateProperty.resolveWith((states) {
if (states.contains(MaterialState.selected)) {
return Colors.green; // 选中时的背景颜色
}
return Colors.red; // 未选中时的背景颜色
}),
)
在这个示例中,当复选框被选中时,背景将变为绿色,未选中时背景将变为红色。
默认情况下,Checkbox
只有两种状态:选中和未选中。然而,在某些场景下(如多项选择时部分选中),我们需要第三种状态,即“不确定”。tristate
属性允许复选框进入这种不确定状态(其 value
为 null
)。
示例:三态复选框
Checkbox(
value: isChecked, // 可能为 true, false, 或 null
onChanged: (bool? value) {
setState(() {
isChecked = value;
});
},
tristate: true, // 启用三态模式
)
当 tristate
设置为 true
时,复选框可以显示不确定状态。开发者可以根据需求,在表单中利用这种第三状态来表示部分选择或不完整的数据。
CheckboxListTile
是 Checkbox
的一个封装组件,它将 Checkbox
与 ListTile
相结合,常用于表单或设置选项中。与 SwitchListTile
类似,它包含标题、复选框以及其他装饰性内容。
属性 | 类型 | 说明 | 默认值 |
---|---|---|---|
title |
Widget? |
显示在复选框旁边的标题。 | null |
subtitle |
Widget? |
显示在标题下方的副标题。 | null |
value |
bool? |
当前复选框的状态。 | 必须指定 |
onChanged |
ValueChanged |
当复选框状态变化时调用的回调函数。 | 必须指定 |
activeColor |
Color? |
复选框选中时的颜色。 | null |
checkColor |
Color? |
复选框内部对勾的颜色。 | null |
secondary |
Widget? |
复选框左侧显示的图标或组件,通常用于增强视觉效果。 | null |
CheckboxListTile(
title: Text('Enable Dark Mode'),
subtitle: Text('Switch between dark and light themes'),
value: isChecked,
onChanged: (bool? value) {
setState(() {
isChecked = value!;
});
},
activeColor: Colors.blue,
secondary: Icon(Icons.dark_mode),
)
这个示例展示了如何使用 CheckboxListTile
来创建带有文字和图标的复选框选项,它通常用于设置页面中。
与 Switch
类似,Checkbox
组件的状态可以通过 setState
更新,也可以使用状态管理工具来更好地管理状态变化,尤其是在应用变得复杂时。
class CheckboxNotifier extends ChangeNotifier {
bool _isChecked = false;
bool get isChecked => _isChecked;
void toggleCheckbox() {
_isChecked = !_isChecked;
notifyListeners();
}
}
// 在 UI 中使用
Consumer<CheckboxNotifier>(
builder: (context, checkboxNotifier, child) {
return Checkbox(
value: checkboxNotifier.isChecked,
onChanged: (bool? value) {
checkboxNotifier.toggleCheckbox();
},
);
},
)
在这个示例中,CheckboxNotifier
类管理 Checkbox
的状态,通过 notifyListeners
来通知 UI 更新。
setState
调用。Provider
或 Bloc
等状态管理工具可以提高性能和代码可维护性。复选框是一个非常常见的 UI 控件,能够为用户提供多项选择的能力。通过灵活的属性配置和状态管理,开发者可以轻松实现复杂的多选功能。CheckboxListTile
提供了更高级的复选框布局选项,使得创建设置页面更加简单。在接下来的章节中,我们将继续探索更多的 Flutter 核心控件。