import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:mask_text_input_formatter/mask_text_input_formatter.dart'; import 'package:ui_kit/ui_kit.dart'; class InputWidget extends StatefulWidget { const InputWidget({ super.key, this.label, required this.controller, required this.hintText, this.isError = 'false', this.errorText, this.isPassword = 'false', this.isMask = 'false', }); final TextEditingController controller; final String? label; final String hintText; final String isError; final String? errorText; final String? isPassword; final String? isMask; @override State createState() => _InputWidgetState(); } class _InputWidgetState extends State { bool obscureText = false; @override void initState() { super.initState(); widget.isPassword == 'true' ? obscureText = true : obscureText = false; } var maskFormatter = MaskTextInputFormatter( mask: '+# (###) ###-##-##', filter: {"#": RegExp(r'[0-9]')}, type: MaskAutoCompletionType.lazy, ); @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ widget.label != null ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( widget.label ?? '', style: captionRegular.copyWith(color: descColor), ), SizedBox(height: 4), ], ) : SizedBox(), SizedBox( height: 48, child: TextFormField( controller: widget.controller, obscureText: obscureText, inputFormatters: widget.isMask == 'true' ? [maskFormatter] : [], decoration: InputDecoration( fillColor: widget.isError == 'true' ? errorBgColor : inputBgColor, filled: true, contentPadding: EdgeInsets.symmetric( horizontal: 14, vertical: 14, ), hintText: widget.hintText, suffixIcon: widget.isPassword == 'true' ? IconButton( onPressed: () { setState(() { obscureText = !obscureText; }); }, icon: SvgPicture.asset( fit: BoxFit.none, obscureText != true ? 'assets/eye.svg' : 'assets/closed-eye.svg', ), ) : null, hintStyle: textRegular.copyWith(color: captionColor), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide( color: widget.isError == 'true' ? errorColor : inputStrokeColor, width: 1, ), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: primaryHoverColor, width: 1), ), ), ), ), widget.isError == 'true' ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 8), Text( widget.errorText ?? "", style: captionRegular.copyWith(color: errorColor), ), ], ) : SizedBox(), ], ); } }