Form위젯 안에 TextFormField위젯을 만들고, validator 프로퍼티에 유효성을 체크할 메서드를 넣어줍니다. 이때, (value)는 사용자가 입력할 값입니다. 여기서는 '이름' 영역에 입력된게 없으면 '이름을 입력하세요' 라는 문구가 뜨는 규칙을 적용했습니다.
//중략//
TextFormField(
decoration:constInputDecoration(labelText:'이름'),
validator:(value) {
if(value!.isEmpty) {
return'이름을 입력하세요.';
}
returnnull;
})
2. Form의 State 관리를 위한 Key를 생성하고 Form의 key프로퍼티에 해당 Key 넣어주기
Form에 입력되는 값들도 다 State와 관련이 있으므로, Form 위젯의 상태를 관리하고 제어하기 위한 Key를 만들어줍니다.
formKey를 통해 수행할 수 있는 주요 역할은 다음과 같습니다.(by Chat GPT)
폼의 상태 관리: formKey를 사용하여 폼 위젯의 상태를 관리하고 유효성을 검사합니다. 폼의 상태를 가져오거나 변경하기 위해 currentState 속성을 사용할 수 있습니다.
유효성 검사: 폼의 유효성을 검사하기 위해 formKey.currentState.validate()를 호출하여 모든 하위 TextFormField의 validator를 실행합니다.
제출 처리: 폼이 제출되었을 때 처리를 수행하기 위해 formKey.currentState.save()를 호출하여 각 TextFormField의 onSaved 콜백을 실행합니다.
폼 리셋: 필요한 경우 폼을 리셋할 때 사용합니다. formKey.currentState.reset()을 호출하여 폼의 상태를 초기화할 수 있습니다.
//윗부분 생략//
final_formKey=GlobalKey<FormState>();
//중략//
@override
Widgetbuild(BuildContextcontext) {
returnForm(
key:_formKey,
child:Padding(
padding:constEdgeInsets.all(20.0),
child:Column(children:<Widget>[
TextFormField(
decoration:constInputDecoration(labelText:'이름'),
validator:(value) {
if(value!.isEmpty) {
return'이름을 입력하세요.';
}
returnnull;
},
),
]),
),
);
}
}
3. 입력된 값을 저장할 변수를 만들고, TextFormField에 onSaved 프로퍼티에 추가해주기
onSaved콜백은 사용자가 입력 필드에 값을 입력하고 폼이 제출될 때 실행됩니다. 이 때 입력된 값이 인자로 전달되고, 이때 위에서 선언한_name변수에 입력된 값이 저장됩니다.
//중략//
lateString_name;
lateString_email;
//중략//
TextFormField(
decoration:constInputDecoration(labelText:'이름'),
validator:(value) {
if(value!.isEmpty) {
return'이름을 입력하세요.';
}
returnnull;
},
onSaved:(value) {
_name=value!;
},
),
//중략//
4.Form Key의 currentState를 통해 유효성을 검증하는 역할을 하는 버튼 만들기
위에서 언급한formKey.currentState의 두 메서드 validate()와 save()를 통해 버튼 클릭시 모든 validator와 onSaved 콜백 함수를 실행하는 버튼을 만들어줍니다.
이를 통해, 모든 validator에 대한 검증을 진행하고, 통과했다면 각 필드의 값을 위에서 생성한 변수에 저장하게 됩니다.