Obsidian/Recognition/Programing/Flutter/TextField 커스텀.md

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
),
),
);
}
}
```