A checkbox is a type of input widget which holds the Boolean value. In flutter, we have a Material Checkbox. But it has some limitations like we can not edit border color.
So to solve this we can create a CustomCheckbox.
The CustomCheckbox have the following parameters.
- isChecked – This is used to set the initial value of the checkbox. The default value is false
- size – To set the size of our custom checkbox
- iconSize – Size of the check icon
- selectedColor – Selected color of the Checkbox background
- selectedIconColor – Selected Icon Color
- borderColor– Set the color of the border
- checkIcon – Change the check Icon
Code
import 'package:flutter/material.dart';
class CustomCheckbox extends StatefulWidget {
final Function onChange;
final bool isChecked;
final double size;
final double iconSize;
final Color selectedColor;
final Color selectedIconColor;
final Color borderColor;
final Icon checkIcon;
CustomCheckbox(
{this.isChecked,
this.onChange,
this.size,
this.iconSize,
this.selectedColor,
this.selectedIconColor,
this.borderColor,
this.checkIcon});
@override
_CustomCheckboxState createState() => _CustomCheckboxState();
}
class _CustomCheckboxState extends State<CustomCheckbox> {
bool _isSelected = false;
@override
void initState() {
_isSelected = widget.isChecked ?? false;
super.initState();
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
setState(() {
_isSelected = !_isSelected;
widget.onChange(_isSelected);
});
},
child: AnimatedContainer(
margin: EdgeInsets.all(4),
duration: Duration(milliseconds: 500),
curve: Curves.fastLinearToSlowEaseIn,
decoration: BoxDecoration(
color: _isSelected
? widget.selectedColor ?? Colors.blue
: Colors.transparent,
borderRadius: BorderRadius.circular(3.0),
border: Border.all(
color: widget.borderColor ?? Colors.black,
width: 1.5,
)),
width: widget.size ?? 18,
height: widget.size ?? 18,
child: _isSelected
? Icon(
Icons.check,
color: widget.selectedIconColor ?? Colors.white,
size: widget.iconSize ?? 14,
)
: null,
),
);
}
}
Thanks for Reading