1. CheckboxListTile
const CheckboxListTile({
Key? key,
required this.value,
required this.onChanged,
this.activeColor,
this.checkColor,
this.tileColor,
this.title,
this.subtitle,
this.isThreeLine = false,
this.dense,
this.secondary,
this.selected = false,
this.controlAffinity = ListTileControlAffinity.platform,
this.autofocus = false,
this.contentPadding,
this.tristate = false,
this.shape,
this.selectedTileColor,
this.side,
this.visualDensity,
this.focusNode,
this.enableFeedback,
})
CheckboxListTile 属性 | 介绍 |
---|---|
value | 是否选中此复选框 |
activeColor | 选中时颜色 |
checkColor | 选中时中间✔️颜色 |
tileColor | Tile 未选中时 颜色 |
title | Title 组件 |
subtitle | Subtitle 组件 |
isThreeLine | 是否准备显示3行,默认false |
dense | 是否使用缩小布局 |
secondary | 辅助组件 |
selected | Tile是否选中 |
autofocus | 自动聚焦,默认为 false |
controlAffinity | checkBox组件 布局位置platform、leading、trailing |
contentPadding | 内边距 |
tristate | 三态复选框,默认 false |
shape | 形状 |
selectedTileColor | Tile选中颜色 |
visualDensity | 紧凑程度,VisualDensity -4~4 |
focusNode | 焦点控制 Flutter 之 FocusNode (七十三) |
enableFeedback | 是否给予按压反馈 |
side | CheckBox 边框 |
onChanged | 点击事件回调 |
示例
_buildCheckBoxListTile(BuildContext context) {
return CheckboxListTile(
value: _checkBoxValue1, // 是否选中此复选框
activeColor: Colors.red, // 选中时颜色
checkColor: Colors.amber, // 选中时中间✔️颜色
tileColor: Colors.cyan[50], // Tile 未选中时 颜色
title: Text("CheckboxListTile - Title",
style: TextStyle(color: Colors.black87, fontSize: 16)), // Title 组件
subtitle: Text("CheckboxListTile - Subtitle",
style: TextStyle(color: Colors.black38, fontSize: 14)), // Subtitle 组件
isThreeLine: false, // 是否准备显示3行,默认false
dense: true, // 是否使用缩小布局
secondary: Icon(Icons.pets), // 辅助组件
selected: _checkBoxValue1 == true, // Tile是否选中
autofocus: false, // 自动聚焦,默认为 false
controlAffinity: ListTileControlAffinity.platform, // checkBox组件 布局位置,platform 根据平台来决定布局位置,leading在左侧布局,trailing在右侧布局
contentPadding: EdgeInsets.all(8), // 内边距
tristate: false, // 三态复选框,默认 false
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), // 形状
selectedTileColor: Colors.cyan[200], // Tile选中颜色
visualDensity: VisualDensity(vertical: -4), // 紧凑程度,VisualDensity -4~4
focusNode: FocusNode(skipTraversal: true), // 焦点控制
enableFeedback: true, // 是否给予按压反馈
side: BorderSide(color: Colors.teal, width: 2.0), // CheckBox 边框
// 点击事件回调
onChanged: (value) {
_checkBoxValue1 = value;
// 重新Build
(context as Element).markNeedsBuild();
},
);
}
2. SwitchListTile
const SwitchListTile({
Key? key,
required this.value,
required this.onChanged,
this.tileColor,
this.activeColor,
this.activeTrackColor,
this.inactiveThumbColor,
this.inactiveTrackColor,
this.activeThumbImage,
this.inactiveThumbImage,
this.title,
this.subtitle,
this.isThreeLine = false,
this.dense,
this.contentPadding,
this.secondary,
this.selected = false,
this.autofocus = false,
this.controlAffinity = ListTileControlAffinity.platform,
this.shape,
this.selectedTileColor,
this.visualDensity,
this.focusNode,
this.enableFeedback,
this.hoverColor,
})
SwitchListTile 属性 | 介绍 |
---|---|
value | value = true 时为打开状态,false 关闭 |
tileColor | Tile未选中颜色 |
activeColor | 打开状态下颜色 |
activeTrackColor | 打开状态下轨道颜色 |
activeThumbImage | 打开状态下滑块图片 |
inactiveThumbColor | 关闭状态下滑块颜色 |
inactiveTrackColor | 关闭状态下轨道颜色 |
inactiveThumbImage | 关闭状态下滑块图片 |
title | Title 组件 |
subtitle | Subtitle 组件 |
isThreeLine | 是否准备显示3行,默认false |
dense | 是否使用缩小布局 |
contentPadding | 内边距 |
secondary | 辅助组件 |
selected | Tile是否选中 |
autofocus | 自动聚焦,默认为 false |
controlAffinity | switch组件 布局位置 |
shape | 形状 |
selectedTileColor | Tile选中颜色 |
visualDensity | 紧凑程度,VisualDensity -4~4 |
focusNode | 焦点控制 Flutter 之 FocusNode (七十三) |
enableFeedback | 是否给予按压反馈 |
hoverColor | 悬停颜色 暂未使用 |
onChanged | 点击事件 回调 |
示例
_buildSwitchListTile(BuildContext context) {
return SwitchListTile(
value: _switchValue1, // value = true 时为打开状态,false 关闭
tileColor: Colors.cyan[50], // Tile未选中颜色
activeColor: Colors.red, // 打开状态下颜色
activeTrackColor: Colors.amber, // 打开状态下轨道颜色
activeThumbImage: AssetImage("assets/images/tx1.jpeg"), // 打开状态下滑块图片
inactiveThumbColor: Colors.grey, // 关闭状态下滑块颜色
inactiveTrackColor: Colors.red[200], // 关闭状态下轨道颜色
inactiveThumbImage: AssetImage("assets/images/tx2.jpeg"), // 关闭状态下滑块图片
title: Text("SwitchListTile - Title",
style: TextStyle(color: Colors.black87, fontSize: 16)), // Title 组件
subtitle: Text("SwitchListTile - Subtitle",
style: TextStyle(color: Colors.black38, fontSize: 14)), // Subtitle 组件
isThreeLine: false, // 是否准备显示3行,默认false
dense: true, // 是否使用缩小布局
contentPadding: EdgeInsets.all(8), // 内边距
secondary: Icon(Icons.pets), // 辅助组件
selected: _switchValue1, // Tile是否选中
autofocus: false, // 自动聚焦,默认为 false
controlAffinity: ListTileControlAffinity.platform, // switch组件 布局位置
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), // 形状
selectedTileColor: Colors.cyan[200], // Tile选中颜色
visualDensity: VisualDensity(vertical: -4), // 紧凑程度,VisualDensity -4~4
focusNode: FocusNode(skipTraversal: true), // 焦点控制
enableFeedback: true, // 是否给予按压反馈
hoverColor: Colors.red, // 悬停颜色 暂未使用
// 点击事件 回调
onChanged: (value) {
_switchValue1 = value;
// 重新Build
(context as Element).markNeedsBuild();
},
);
}
3. RadioListTile
const RadioListTile({
Key? key,
required this.value,
required this.groupValue,
required this.onChanged,
this.toggleable = false,
this.activeColor,
this.title,
this.subtitle,
this.isThreeLine = false,
this.dense,
this.secondary,
this.selected = false,
this.controlAffinity = ListTileControlAffinity.platform,
this.autofocus = false,
this.contentPadding,
this.shape,
this.tileColor,
this.selectedTileColor,
this.visualDensity,
this.focusNode,
this.enableFeedback,
})
RadioListTile 属性 | 介绍 |
---|---|
value | 单选的值 |
groupValue | 选择组的值 |
toggleable | 是否可返回不确定状态,默认false,为true时,再次选中时onChanged返回null |
activeColor | 选中时填充颜色 |
title | Title 组件 |
subtitle | Subtitle 组件 |
dense | 是否使用缩小布局 |
isThreeLine | 是否准备显示3行,默认false |
secondary | 辅助组件 |
selected | Tile 是否选中 |
controlAffinity | radio组件布局位置 |
contentPadding | 内边距 |
shape | 形状 |
tileColor | Tile未选中颜色 |
selectedTileColor | Tile选中颜色 |
visualDensity | 紧凑程度,VisualDensity -4~4 |
focusNode | 焦点控制 Flutter 之 FocusNode (七十三) |
enableFeedback | 是否给予按压反馈 |
onChanged | 点击事件回调 |
示例
_buildRadioListTile(int initValue, BuildContext context) {
return RadioListTile(
value: initValue, // 单选的值
groupValue: _radioGroupValue, // 选择组的值
toggleable: true, // 是否可返回不确定状态,默认false,为true时,再次选中时onChanged返回null
activeColor: Colors.red[500], // 选中时填充颜色
title: Text("RadioListTile - Title",
style: TextStyle(color: Colors.black87, fontSize: 16)), // Title 组件
subtitle: Text("RadioListTile - Subtitle",
style: TextStyle(color: Colors.black38, fontSize: 14)), // Subtitle 组件
dense: true, // 是否使用缩小布局
isThreeLine: false, // 是否准备显示3行,默认false
secondary: Icon(Icons.pets), // 辅助组件
selected: _radioGroupValue == initValue, // Tile 是否选中
controlAffinity: ListTileControlAffinity.platform, // radio组件布局位置
contentPadding: EdgeInsets.all(8), // 内边距
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), // 形状
tileColor: Colors.cyan[50], // Tile未选中颜色
selectedTileColor: Colors.cyan[200], // Tile选中颜色
visualDensity: VisualDensity(
horizontal: -4, vertical: -4), // 紧凑程度,VisualDensity -4~4
focusNode: FocusNode(skipTraversal: true), // 焦点控制
enableFeedback: true, // 是否给予按压反馈
// 点击事件回调
onChanged: (int? value) {
_radioGroupValue = value;
// 重新Build
(context as Element).markNeedsBuild();
},
);
}
4. Demo
class MSListTileRoute extends StatelessWidget {
MSListTileRoute({Key? key}) : super(key: key);
bool? _checkBoxValue1 = false;
bool _switchValue1 = false;
int? _radioGroupValue = 1;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("MSListTileRoute")),
body: ListView(
children: [
Builder(builder: (context) {
return _buildCheckBoxListTile(context);
}),
Builder(builder: (context) {
return _buildSwitchListTile(context);
}),
Builder(builder: (context) {
return Column(
children: [
_buildRadioListTile(1, context),
_buildRadioListTile(2, context),
_buildRadioListTile(3, context),
],
);
}),
],
),
);
}
_buildRadioListTile(int initValue, BuildContext context) {
return RadioListTile(
value: initValue, // 单选的值
groupValue: _radioGroupValue, // 选择组的值
toggleable: true, // 是否可返回不确定状态,默认false,为true时,再次选中时onChanged返回null
activeColor: Colors.red[500], // 选中时填充颜色
title: Text("RadioListTile - Title",
style: TextStyle(color: Colors.black87, fontSize: 16)), // Title 组件
subtitle: Text("RadioListTile - Subtitle",
style: TextStyle(color: Colors.black38, fontSize: 14)), // Subtitle 组件
dense: true, // 是否使用缩小布局
isThreeLine: false, // 是否准备显示3行,默认false
secondary: Icon(Icons.pets), // 辅助组件
selected: _radioGroupValue == initValue, // Tile 是否选中
controlAffinity: ListTileControlAffinity.platform, // radio组件布局位置
contentPadding: EdgeInsets.all(8), // 内边距
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), // 形状
tileColor: Colors.cyan[50], // Tile未选中颜色
selectedTileColor: Colors.cyan[200], // Tile选中颜色
visualDensity: VisualDensity(
horizontal: -4, vertical: -4), // 紧凑程度,VisualDensity -4~4
focusNode: FocusNode(skipTraversal: true), // 焦点控制
enableFeedback: true, // 是否给予按压反馈
// 点击事件回调
onChanged: (int? value) {
_radioGroupValue = value;
// 重新Build
(context as Element).markNeedsBuild();
},
);
}
_buildSwitchListTile(BuildContext context) {
return SwitchListTile(
value: _switchValue1, // value = true 时为打开状态,false 关闭
tileColor: Colors.cyan[50], // Tile未选中颜色
activeColor: Colors.red, // 打开状态下颜色
activeTrackColor: Colors.amber, // 打开状态下轨道颜色
activeThumbImage: AssetImage("assets/images/tx1.jpeg"), // 打开状态下滑块图片
inactiveThumbColor: Colors.grey, // 关闭状态下滑块颜色
inactiveTrackColor: Colors.red[200], // 关闭状态下轨道颜色
inactiveThumbImage: AssetImage("assets/images/tx2.jpeg"), // 关闭状态下滑块图片
title: Text("SwitchListTile - Title",
style: TextStyle(color: Colors.black87, fontSize: 16)), // Title 组件
subtitle: Text("SwitchListTile - Subtitle",
style: TextStyle(color: Colors.black38, fontSize: 14)), // Subtitle 组件
isThreeLine: false, // 是否准备显示3行,默认false
dense: true, // 是否使用缩小布局
contentPadding: EdgeInsets.all(8), // 内边距
secondary: Icon(Icons.pets), // 辅助组件
selected: _switchValue1, // Tile是否选中
autofocus: false, // 自动聚焦,默认为 false
controlAffinity: ListTileControlAffinity.platform, // switch组件 布局位置
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), // 形状
selectedTileColor: Colors.cyan[200], // Tile选中颜色
visualDensity: VisualDensity(vertical: -4), // 紧凑程度,VisualDensity -4~4
focusNode: FocusNode(skipTraversal: true), // 焦点控制
enableFeedback: true, // 是否给予按压反馈
hoverColor: Colors.red, // 悬停颜色 暂未使用
// 点击事件 回调
onChanged: (value) {
_switchValue1 = value;
// 重新Build
(context as Element).markNeedsBuild();
},
);
}
_buildCheckBoxListTile(BuildContext context) {
return CheckboxListTile(
value: _checkBoxValue1, // 是否选中此复选框
activeColor: Colors.red, // 选中时颜色
checkColor: Colors.amber, // 选中时中间✔️颜色
tileColor: Colors.cyan[50], // Tile 未选中时 颜色
title: Text("CheckboxListTile - Title",
style: TextStyle(color: Colors.black87, fontSize: 16)), // Title 组件
subtitle: Text("CheckboxListTile - Subtitle",
style: TextStyle(color: Colors.black38, fontSize: 14)), // Subtitle 组件
isThreeLine: false, // 是否准备显示3行,默认false
dense: true, // 是否使用缩小布局
secondary: Icon(Icons.pets), // 辅助组件
selected: _checkBoxValue1 == true, // Tile是否选中
autofocus: false, // 自动聚焦,默认为 false
controlAffinity: ListTileControlAffinity.platform, // checkBox组件 布局位置
contentPadding: EdgeInsets.all(8), // 内边距
tristate: false, // 三态复选框,默认 false
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), // 形状
selectedTileColor: Colors.cyan[200], // Tile选中颜色
visualDensity: VisualDensity(vertical: -4), // 紧凑程度,VisualDensity -4~4
focusNode: FocusNode(skipTraversal: true), // 焦点控制
enableFeedback: true, // 是否给予按压反馈
side: BorderSide(color: Colors.teal, width: 2.0), // CheckBox 边框
// 点击事件回调
onChanged: (value) {
_checkBoxValue1 = value;
// 重新Build
(context as Element).markNeedsBuild();
},
);
}
}
133.gif
Flutter 之 单选开关和复选框 (五十七)
Flutter 之 Radio (六十)
Flutter 之 ListTite (九十)
Flutter 之 FocusNode (七十三)
网友评论