flutter - Flutter中具有3个值的多个复选框
问题描述
Dart 中的 Abool
可以具有这些值中的任何一个
- 无效的
- 真的
- 错误的
我想要一个Checkbox
像这样工作的:
第一次,我有bool
value null
,所以给我看空框,之后我的 value 将是true
or false
,所以给我看相应的小部件。
解决方案
创建此小部件(可从外部自定义):
class MyCheckbox extends StatefulWidget {
final bool? value;
final ValueChanged<bool?> onChanged;
final Color? checkedIconColor;
final Color? checkedFillColor;
final IconData? checkedIcon;
final Color? uncheckedIconColor;
final Color? uncheckedFillColor;
final IconData? uncheckedIcon;
const MyCheckbox({
Key? key,
required this.value,
required this.onChanged,
this.checkedIconColor = Colors.white,
this.checkedFillColor = Colors.teal,
this.checkedIcon = Icons.check,
this.uncheckedIconColor = Colors.white,
this.uncheckedFillColor = Colors.red,
this.uncheckedIcon = Icons.close,
}) : super(key: key);
@override
_MyCheckboxState createState() => _MyCheckboxState();
}
class _MyCheckboxState extends State<MyCheckbox> {
bool? _checked;
@override
void initState() {
super.initState();
_checked = widget.value;
}
@override
void didUpdateWidget(MyCheckbox oldWidget) {
super.didUpdateWidget(oldWidget);
_checked = widget.value;
}
Widget _buildIcon() {
Color? fillColor;
Color? iconColor;
IconData? iconData;
var checked = _checked;
if (checked != null) {
if (checked) {
fillColor = widget.checkedFillColor;
iconColor = widget.checkedIconColor;
iconData = widget.checkedIcon;
} else {
fillColor = widget.uncheckedFillColor;
iconColor = widget.uncheckedIconColor;
iconData = widget.uncheckedIcon;
}
}
return Container(
decoration: BoxDecoration(
color: fillColor,
border: Border.all(color: Colors.grey),
),
child: Icon(
iconData,
color: iconColor,
),
);
}
@override
Widget build(BuildContext context) {
return IconButton(
icon: _buildIcon(),
onPressed: () {
bool? result = _checked;
widget.onChanged(result == null ? true : result ? false : null);
},
);
}
}
并像这样使用它:
bool? _value;
MyCheckbox(
value: _value,
onChanged: (value) => setState(() => _value = value),
)
推荐阅读
- json - JSON 关联数组到 Dart/Flutter 对象
- ruby - 从两个字符串中删除重复的子字符串
- r - 在 docker 中从 R 调用外部程序时出现问题
- ios - 如何允许用户从他们的苹果设备中选择图像?
- python - 无法将字符串转换为浮点数:Excel 数据集中的“financial_year”
- python - 是否有触发 Python 脚本来更新谷歌电子表格的机制?
- javascript - Jquery如何在用户过滤表时同步计算总数
- php - 安装后如何禁用正在执行和启用的php文件
- javascript - Javascript mousemove 事件侦听器未按预期工作
- laravel - Laravel - morphToMany 自定义键