TextFormField
는 TextField
를 기반으로 하지만, Form
위젯과 함께 사용되도록 설계된 특별한 TextField
입니다.Form
위젯과 함께 사용될 때 유용합니다. 폼 검증(validation), 폼 저장(save) 등의 기능을 쉽게 통합할 수 있습니다.validator
함수를 통해 입력값 검증이 가능하며, onSaved
콜백을 통해 폼이 저장될 때 입력값을 저장할 수 있습니다.TextField
의 모든 기능을 포함하며, 추가적으로 폼 관련 기능을 제공합니다.final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
void _onSubmitTap() {
_formKey.currentState?.validate();
}
child: Form(
key: _formKey,
child: Column(
children: [
Gaps.v28,
TextFormField(
validator: (value) {
return 'i dont like your email';
},
decoration: const InputDecoration(
hintText: 'Email',
),
),
Gaps.v16,
TextFormField(
validator: (value) {
return 'wrong password';
},
decoration: const InputDecoration(
hintText: 'Password',
),
),
Gaps.v28,
FormButton(
disabled: false,
onPressed: _onSubmitTap,
text: 'Log In',
)
],
),
),
다음과 같이 Form
안에 TextFormField
을 넣는 식으로 구현해야한다.
TextFormField
를 사용하면 더이상 state를 추적하지 않아도 된다.
GlobalKey<FormState>
를 선언해야 한다.
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
_formKey.currentState!.validate();
_formKey.currentState!.save();
validate()
는 TextFormField
안에 validator
가 하나라도 false 면 false
를 리턴한다.
false
가 없으면 true
save()
는 onSaved 에 설정된 대로 수행한다.