checkbox_formfield/lib/checkbox_icon_formfield.dart
2021-08-17 13:48:08 +02:00

51 lines
1.6 KiB
Dart

import 'package:flutter/material.dart';
/// Use Icon as checkbox
class CheckboxIconFormField extends FormField<bool> {
CheckboxIconFormField({
Key? key,
BuildContext? context,
FormFieldSetter<bool>? onSaved,
bool initialValue = false,
bool autovalidate = false,
bool enabled = true,
IconData trueIcon = Icons.check,
IconData falseIcon = Icons.check_box_outline_blank,
Color? trueIconColor,
Color? falseIconColor,
Color? disabledColor,
double padding = 24.0,
double? iconSize,
}) : super(
key: key,
onSaved: onSaved,
initialValue: initialValue,
autovalidate: autovalidate,
builder: (FormFieldState<bool> state) {
trueIconColor ??= (context == null
? null
: Theme.of(context).accentIconTheme.color);
return Padding(
padding: EdgeInsets.all(padding),
child: state.value!
? _createTappableIcon(state, enabled, trueIcon,
trueIconColor, disabledColor, iconSize)
: _createTappableIcon(state, enabled, falseIcon,
falseIconColor, disabledColor, iconSize));
},
);
static Widget _createTappableIcon(FormFieldState<bool> state, bool enabled,
IconData icon, Color? iconColor, Color? disabledColor, double? iconSize) {
return IconButton(
onPressed: enabled
? () {
state.didChange(!state.value!);
}
: null,
icon: Icon(icon,
color: enabled ? iconColor : disabledColor, size: iconSize),
);
}
}