148 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| 
								 | 
							
								import 'package:flutter/material.dart';
							 | 
						||
| 
								 | 
							
								import '../utils/color_constants.dart';
							 | 
						||
| 
								 | 
							
								import '../utils/size_utils.dart';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CustomCheckbox extends StatelessWidget {
							 | 
						||
| 
								 | 
							
								  CustomCheckbox(
							 | 
						||
| 
								 | 
							
								      {super.key, this.fontStyle,
							 | 
						||
| 
								 | 
							
								      this.alignment,
							 | 
						||
| 
								 | 
							
								      this.isRightCheck = false,
							 | 
						||
| 
								 | 
							
								      this.iconSize,
							 | 
						||
| 
								 | 
							
								      this.value,
							 | 
						||
| 
								 | 
							
								      this.onChange,
							 | 
						||
| 
								 | 
							
								      this.text,
							 | 
						||
| 
								 | 
							
								      this.width,
							 | 
						||
| 
								 | 
							
								      this.margin});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  CheckboxFontStyle? fontStyle;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Alignment? alignment;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  bool? isRightCheck;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  double? iconSize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  bool? value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Function(bool)? onChange;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  String? text;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  double? width;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  EdgeInsetsGeometry? margin;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  @override
							 | 
						||
| 
								 | 
							
								  Widget build(BuildContext context) {
							 | 
						||
| 
								 | 
							
								    return alignment != null
							 | 
						||
| 
								 | 
							
								        ? Align(
							 | 
						||
| 
								 | 
							
								            alignment: alignment ?? Alignment.center,
							 | 
						||
| 
								 | 
							
								            child: _buildCheckboxWidget(),
							 | 
						||
| 
								 | 
							
								          )
							 | 
						||
| 
								 | 
							
								        : _buildCheckboxWidget();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _buildCheckboxWidget() {
							 | 
						||
| 
								 | 
							
								    return InkWell(
							 | 
						||
| 
								 | 
							
								      onTap: () {
							 | 
						||
| 
								 | 
							
								        value = !(value!);
							 | 
						||
| 
								 | 
							
								        onChange!(value!);
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      child: Container(
							 | 
						||
| 
								 | 
							
								        width: width,
							 | 
						||
| 
								 | 
							
								        margin: margin ?? EdgeInsets.zero,
							 | 
						||
| 
								 | 
							
								        child: isRightCheck! ? getRightSideCheckbox() : getLeftSideCheckbox(),
							 | 
						||
| 
								 | 
							
								      ),
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Widget getRightSideCheckbox() {
							 | 
						||
| 
								 | 
							
								    return Row(
							 | 
						||
| 
								 | 
							
								      mainAxisAlignment: MainAxisAlignment.spaceBetween,
							 | 
						||
| 
								 | 
							
								      children: [
							 | 
						||
| 
								 | 
							
								        Padding(
							 | 
						||
| 
								 | 
							
								          padding: const EdgeInsets.only(
							 | 
						||
| 
								 | 
							
								            right: 8,
							 | 
						||
| 
								 | 
							
								          ),
							 | 
						||
| 
								 | 
							
								          child: getTextWidget(),
							 | 
						||
| 
								 | 
							
								        ),
							 | 
						||
| 
								 | 
							
								        getCheckboxWidget(),
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Widget getLeftSideCheckbox() {
							 | 
						||
| 
								 | 
							
								    return Row(
							 | 
						||
| 
								 | 
							
								      children: [
							 | 
						||
| 
								 | 
							
								        getCheckboxWidget(),
							 | 
						||
| 
								 | 
							
								        Padding(
							 | 
						||
| 
								 | 
							
								          padding: const EdgeInsets.only(
							 | 
						||
| 
								 | 
							
								            left: 8,
							 | 
						||
| 
								 | 
							
								          ),
							 | 
						||
| 
								 | 
							
								          child: getTextWidget(),
							 | 
						||
| 
								 | 
							
								        ),
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Widget getTextWidget() {
							 | 
						||
| 
								 | 
							
								    return Text(
							 | 
						||
| 
								 | 
							
								      text ?? "",
							 | 
						||
| 
								 | 
							
								      textAlign: TextAlign.center,
							 | 
						||
| 
								 | 
							
								      style: _setFontStyle(),
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Widget getCheckboxWidget() {
							 | 
						||
| 
								 | 
							
								    return SizedBox(
							 | 
						||
| 
								 | 
							
								      height: iconSize,
							 | 
						||
| 
								 | 
							
								      width: iconSize,
							 | 
						||
| 
								 | 
							
								      child: Checkbox(
							 | 
						||
| 
								 | 
							
								        value: value ?? false,
							 | 
						||
| 
								 | 
							
								        onChanged: (value) {
							 | 
						||
| 
								 | 
							
								          onChange!(value!);
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        checkColor: ColorConstant.whiteA700,
							 | 
						||
| 
								 | 
							
								        visualDensity: const VisualDensity(
							 | 
						||
| 
								 | 
							
								          vertical: -4,
							 | 
						||
| 
								 | 
							
								          horizontal: -4,
							 | 
						||
| 
								 | 
							
								        ),
							 | 
						||
| 
								 | 
							
								      ),
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _setFontStyle() {
							 | 
						||
| 
								 | 
							
								    switch (fontStyle) {
							 | 
						||
| 
								 | 
							
								      case CheckboxFontStyle.GilroyMedium16:
							 | 
						||
| 
								 | 
							
								        return TextStyle(
							 | 
						||
| 
								 | 
							
								          color: ColorConstant.blueGray900,
							 | 
						||
| 
								 | 
							
								          fontSize: getFontSize(
							 | 
						||
| 
								 | 
							
								            16,
							 | 
						||
| 
								 | 
							
								          ),
							 | 
						||
| 
								 | 
							
								          fontFamily: 'Gilroy',
							 | 
						||
| 
								 | 
							
								          fontWeight: FontWeight.w500,
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								      case CheckboxFontStyle.GilroyMedium14:
							 | 
						||
| 
								 | 
							
								        return TextStyle(
							 | 
						||
| 
								 | 
							
								          color: ColorConstant.blueGray300,
							 | 
						||
| 
								 | 
							
								          fontSize: getFontSize(
							 | 
						||
| 
								 | 
							
								            14,
							 | 
						||
| 
								 | 
							
								          ),
							 | 
						||
| 
								 | 
							
								          fontFamily: 'Gilroy',
							 | 
						||
| 
								 | 
							
								          fontWeight: FontWeight.w500,
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								      default:
							 | 
						||
| 
								 | 
							
								        return TextStyle(
							 | 
						||
| 
								 | 
							
								          color: ColorConstant.blueGray400,
							 | 
						||
| 
								 | 
							
								          fontSize: getFontSize(
							 | 
						||
| 
								 | 
							
								            14,
							 | 
						||
| 
								 | 
							
								          ),
							 | 
						||
| 
								 | 
							
								          fontFamily: 'Gilroy',
							 | 
						||
| 
								 | 
							
								          fontWeight: FontWeight.w400,
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								enum CheckboxFontStyle { GilroyRegular14, GilroyMedium16, GilroyMedium14 }
							 |