```dart class CustomTextField extends StatefulWidget { final String hint; final TextEditingController controller; final Color baseColor; final Color borderColor; final Color errorColor; final TextInputType inputType; final bool obscureText; final Function validator; final Function onChanged; CustomTextField( {this.hint, this.controller, this.onChanged, this.baseColor, this.borderColor, this.errorColor, this.inputType = TextInputType.text, this.obscureText = false, this.validator}); _CustomTextFieldState createState() => _CustomTextFieldState(); } class _CustomTextFieldState extends State { Color currentColor; @override void initState() { super.initState(); currentColor = widget.borderColor; } @override Widget build(BuildContext context) { return Card( elevation: 0.0, color: Colors.white, shape: RoundedRectangleBorder( side: BorderSide(color: currentColor, width: 2.0), borderRadius: BorderRadius.circular(20.0), ), child: Padding( padding: EdgeInsets.symmetric(horizontal: 10.0), child: TextField( obscureText: widget.obscureText, onChanged: (text) { if (widget.onChanged != null) { widget.onChanged(text); } setState(() { if (!widget.validator(text) || text.length == 0) { currentColor = widget.errorColor; } else { currentColor = widget.baseColor; } }); }, //keyboardType: widget.inputType, controller: widget.controller, decoration: InputDecoration( hintStyle: TextStyle( color: widget.baseColor, fontFamily: "OpenSans", fontWeight: FontWeight.w300, ), border: InputBorder.none, hintText: widget.hint, ), ), ), ); } } ``` ```dart _emailField = new CustomTextField( baseColor: Colors.grey, borderColor: Colors.grey[400], errorColor: Colors.red, controller: _email, hint: "E-mail Adress", inputType: TextInputType.emailAddress, validator: Validator.validateEmail, ); _passwordField = CustomTextField( baseColor: Colors.grey, borderColor: Colors.grey[400], errorColor: Colors.red, controller: _password, obscureText: true, hint: "Password", validator: Validator.validatePassword, ); ``` --- ```Dart import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class TextFieldCus extends StatelessWidget { final String hintText,text; final bool obscureText, enabled; final Function onChanged; final TextInputType textInputType; final int maxLength; final int maxlines; final TextInputAction textInputAction; final Color textColor; final String error; final Function onEditComplete; final List textInputFormatter; TextFieldCus({this.textInputFormatter,this.maxLength,this.onEditComplete,this.error,this.textColor,this.textInputAction,this.maxlines,this.text,@required this.hintText, this.obscureText, this.onChanged, this.enabled,this.textInputType}); @override Widget build(BuildContext context) { TextEditingController _controller=text!=null?TextEditingController(text: text):null; if(_controller!=null) { _controller.selection = TextSelection.fromPosition( TextPosition(offset: _controller.text.length)); } OutlineInputBorder outlineInputBorder = const OutlineInputBorder( borderSide: const BorderSide(color: Colors.white, width: 0.0), ); return Padding( padding: const EdgeInsets.fromLTRB(0, 6, 0, 6), child: TextField( onSubmitted:onEditComplete, maxLines: maxlines, style: TextStyle(color: textColor), keyboardType: textInputType, obscureText: obscureText == null ? false : obscureText, maxLength:maxLength!=null?maxLength:null , onChanged: onChanged, enabled: enabled != null ? enabled : true, inputFormatters: textInputFormatter, controller: _controller!=null?_controller:null, textInputAction: textInputAction!=null?textInputAction:TextInputAction.done, decoration: InputDecoration( counterText: '', errorText: error, labelStyle: TextStyle(color: Colors.grey), enabledBorder: outlineInputBorder, labelText: hintText, hintStyle: TextStyle(color: Colors.white), border: outlineInputBorder ), ), ); } } ```