希望复选标记和复选框之间有更多空间
代码
Transform.scale(
scale: 1.3,
child: Checkbox(
checkColor: AppColors.buttonColor,
activeColor: AppColors.textWhiteColor,
side: MaterialStateBorderSide.resolveWith(
(states) => BorderSide(
width: 1.0, color: AppColors.unSelectedColor),
),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
value: isCheck,
onChanged: (value) {
setState(() {
isCheck = value!;
});
}),
),
当复选框活动边框颜色为蓝色并且复选标记和复选框边框之间有填充时
请检查以下来源的自定义复选框。这将满足您的要求。
来源:
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class CustomCheckBox 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;
final double? borderWidth;
final double? checkBoxSize;
final bool shouldShowBorder;
final Color? borderColor;
final double? borderRadius;
final double? splashRadius;
final Color? splashColor;
final String? tooltip;
final MouseCursor? mouseCursors;
const CustomCheckBox({
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.white,
this.uncheckedIcon = Icons.close,
this.borderWidth,
this.checkBoxSize,
this.shouldShowBorder = false,
this.borderColor,
this.borderRadius,
this.splashRadius,
this.splashColor,
this.tooltip,
this.mouseCursors,
}) : super(key: key);
@override
_CustomCheckBoxState createState() => _CustomCheckBoxState();
}
class _CustomCheckBoxState extends State<CustomCheckBox> {
late bool _checked;
late CheckStatus _status;
@override
void initState() {
super.initState();
_init();
}
@override
void didUpdateWidget(CustomCheckBox oldWidget) {
super.didUpdateWidget(oldWidget);
_init();
}
void _init() {
_checked = widget.value;
if (_checked) {
_status = CheckStatus.checked;
} else {
_status = CheckStatus.unchecked;
}
}
Widget _buildIcon() {
late Color fillColor;
late Color iconColor;
late IconData iconData;
switch (_status) {
case CheckStatus.checked:
fillColor = widget.checkedFillColor;
iconColor = widget.checkedIconColor;
iconData = widget.checkedIcon;
break;
case CheckStatus.unchecked:
fillColor = widget.uncheckedFillColor;
iconColor = widget.uncheckedIconColor;
iconData = widget.uncheckedIcon;
break;
}
return Container(
padding: EdgeInsets.zero,
decoration: BoxDecoration(
color: fillColor,
borderRadius: BorderRadius.all(Radius.circular(widget.borderRadius ?? 6)),
border: Border.all(
color: widget.shouldShowBorder ? (widget.borderColor ?? Colors.teal.withOpacity(0.6)) : (!widget.value ? (widget.borderColor ?? Colors.teal.withOpacity(0.6)) : Colors.transparent),
width: widget.shouldShowBorder ? widget.borderWidth ?? 2.0 : 1.0,
),
),
child: Icon(
iconData,
color: iconColor,
size: widget.checkBoxSize ?? 18,
),
);
}
@override
Widget build(BuildContext context) {
return IconButton(
icon: _buildIcon(),
onPressed: () => widget.onChanged(!_checked),
splashRadius: widget.splashRadius,
splashColor: widget.splashColor,
tooltip: widget.tooltip,
mouseCursor: widget.mouseCursors ?? SystemMouseCursors.click,
);
}
}
enum CheckStatus {
checked,
unchecked,
}
链接: https://github.com/DipakShrestha-ADS/custom_check_box/blob/master/lib/custom_check_box.dart
您可以通过增加
strokeAlign
上 Checkbox.side
属性的值来添加“填充”:
Checkbox(
visualDensity: VisualDensity.comfortable,
checkColor: checked
? Theme.of(context).colorScheme.onSurface
: Colors.transparent,
side: MaterialStateBorderSide.resolveWith(
(states) => BorderSide(
color: checked
? Theme.of(context).colorScheme.primary
: Theme.of(context).colorScheme.onSurfaceVariant,
strokeAlign: 5,
width: .8,
),
),
fillColor: MaterialStateColor.resolveWith((states) {
return Colors.transparent;
}),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
value: checked,
onChanged: onChanged,
)[![enter image description here][1]][1]