import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; class InputWidget extends StatefulWidget { final String labelText; final String hintText; final TextEditingController controller; final VoidCallback? suffixTap; final bool isEnable; final bool hasSelection; final int? lines; final bool isInputTypeNum; final bool isTextIsPassword; final bool isBackgroundEnable; final bool isEnableBorder; final double verticalPadding; final double horizontalPadding; final Function(String)? onChange; InputWidget( this.labelText, this.hintText, this.controller, { Key? key, this.isTextIsPassword = false, this.suffixTap, this.isEnable = true, this.hasSelection = false, this.isEnableBorder = true, this.lines = 1, this.onChange, this.isInputTypeNum = false, this.isBackgroundEnable = false, this.verticalPadding = 15, this.horizontalPadding = 16, }) : super(key: key); @override _InputWidgetState createState() { return _InputWidgetState(); } } class _InputWidgetState extends State { late bool isObscureText; @override void initState() { super.initState(); isObscureText = widget.isTextIsPassword; } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.only(left: widget.horizontalPadding, right: widget.horizontalPadding, bottom: widget.verticalPadding, top: widget.verticalPadding), alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), color: widget.isBackgroundEnable ? Color(0xffF7F7F7) : Colors.white, border: Border.all( color: widget.isEnableBorder ? Color(0xffefefef) : Colors.transparent, width: 1, ), ), child: InkWell( onTap: widget.hasSelection ? () {} : null, child: Row( children: [ Expanded( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( widget.labelText, style: const TextStyle( fontSize: 11, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.44, ), ), TextField( enabled: widget.isEnable, scrollPadding: EdgeInsets.zero, keyboardType: widget.isInputTypeNum ? TextInputType.number : TextInputType.text, controller: widget.controller, maxLines: widget.lines, obscuringCharacter: "*", obscureText: isObscureText, onChanged: widget.onChange, style: const TextStyle( fontSize: 14, height: 21 / 14, fontWeight: FontWeight.w400, color: Color(0xff2B353E), letterSpacing: -0.44, ), decoration: InputDecoration( isDense: true, hintText: widget.hintText, hintStyle: const TextStyle( fontSize: 14, height: 21 / 14, fontWeight: FontWeight.w400, color: Color(0xff575757), letterSpacing: -0.56, ), suffixIconConstraints: const BoxConstraints(minWidth: 50), suffixIcon: widget.suffixTap == null ? null : IconButton(icon: const Icon(Icons.mic, color: MyColors.darkTextColor), onPressed: widget.suffixTap), contentPadding: EdgeInsets.zero, border: InputBorder.none, focusedBorder: InputBorder.none, enabledBorder: InputBorder.none, ), ), ], ), ), if (widget.isTextIsPassword) ...[ 16.width, Icon(isObscureText ? Icons.visibility_rounded : Icons.visibility_off_rounded).onPress(() { setState(() { isObscureText = !isObscureText; }); }) ], if (widget.hasSelection) Icon(Icons.keyboard_arrow_down_outlined), ], ), ), ); } }