// ignore_for_file: public_member_api_docs, sort_constructors_first import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:qadirneyriz/config/config.dart'; import 'package:qadirneyriz/widgets/custom_button.dart'; // ignore: must_be_immutable class CustomTextField extends StatefulWidget { final String label; final String hintText; final bool obscureText; final double contentPadding; final bool hasButton; final TextInputAction textInputAction; final TextEditingController textEditingController; final TextInputType textInputType; final int? maxLine; final Color? fillsColor; bool isReadOnly = false; final double paddingVertical; final double paddingHarizon; bool isPass = false; FocusNode? focus; IconData? firstIcon; final void Function(String s)? onChanged; final void Function()? buttonOnPressed; bool hasLable = true; CustomTextField({ Key? key, required this.label, required this.hintText, this.obscureText = false, this.contentPadding = 10, this.hasButton = false, this.textInputAction = TextInputAction.done, required this.textEditingController, required this.textInputType, this.maxLine, this.fillsColor = Colors.white, this.isReadOnly = false, this.isPass = false, this.focus, this.firstIcon, this.onChanged, this.buttonOnPressed, this.hasLable = true, this.paddingVertical = 10, this.paddingHarizon = 20, }) : super(key: key); @override _CustomTextFieldState createState() => _CustomTextFieldState(); } bool obscureText = true; class _CustomTextFieldState extends State { @override Widget build(BuildContext context) { return Padding( padding: EdgeInsets.symmetric( horizontal: widget.paddingHarizon, vertical: widget.paddingVertical), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ widget.hasLable ? Padding( padding: const EdgeInsets.only(right: 5), child: Text( widget.label, style: TextStyle( fontWeight: FontWeight.normal, fontSize: 13, color: Colors.black.withOpacity(.8), ), ), ) : Container(), SizedBox(height: widget.hasLable ? 6 : 0), Stack( children: [ TextFormField( inputFormatters: [ widget.textInputType == TextInputType.number ? FilteringTextInputFormatter.allow( RegExp('[a-z A-Z 0-9 ا-ی]')) : FilteringTextInputFormatter.singleLineFormatter ], readOnly: widget.isReadOnly, onFieldSubmitted: (v) { FocusScope.of(context).requestFocus(widget.focus); }, onChanged: widget.onChanged, minLines: 1, // تعیین ارتفاع بر اساس تعداد خطوط maxLines: 1, // تعداد خطوط نامحدود controller: widget.textEditingController, keyboardType: widget.textInputType, textInputAction: widget.textInputAction, obscureText: (widget.isPass) ? obscureText : false, style: TextStyle( fontSize: 12, color: Colors.black.withOpacity(.5), ), decoration: InputDecoration( hintText: widget.hintText, hintStyle: TextStyle( color: config.ui.mainGray.withOpacity(.6), fontSize: 12), // filled: true, // fillColor: widget.fillsColor, enabledBorder: UnderlineInputBorder( borderSide: BorderSide( color: config.ui.mainGreen, // رنگ بردر پایین در حالت فعال width: 2, // ضخامت بردر پایین ), ), focusedBorder: UnderlineInputBorder( borderSide: BorderSide( color: config.ui.mainGreen, // رنگ بردر پایین در حالت فوکوس width: 2, // ضخامت بردر پایین ), ), prefixIcon: widget.firstIcon != null ? Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( widget.firstIcon, color: config.ui.mainGreen, ), const SizedBox( width: 10, ), Container( color: config.ui.mainGreen, width: 1.5, height: 25, ), ], ) : null, suffixIcon: (widget.isPass == true) ? InkWell( onTap: () { setState(() { obscureText = !obscureText; }); }, child: Icon( obscureText ? Icons.visibility_off : Icons.visibility, color: Colors.grey, ), ) : null, contentPadding: EdgeInsets.all(widget.contentPadding)), ), widget.hasButton ? Positioned( left: 10, top: 10, child: Center( child: CustomButton( hieght: 35, width: 100, text: 'ثبت', onPressed: widget.buttonOnPressed, ), )) : Container() ], ), ], ), ); } }