160 lines
4.6 KiB
Markdown
160 lines
4.6 KiB
Markdown
```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<CustomTextField> {
|
|
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> 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
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
``` |