Stacked는 폼(Form)을 쉽게 다루기 위해 @FormView 애너테이션을 제공합니다.
이 기능을 통해 텍스트 필드 컨트롤, 검증(validation), 상태 관리 등을 자동화할 수 있어요.
TextField 값을 ViewModel에서 쉽게 접근하고@FormView 애너테이션 사용하기먼저 View 클래스 위에 @FormView를 선언합니다:
(fields: [
FormTextField(name: 'email'),
FormTextField(name: 'password', isPassword: true),
])
class LoginView extends StackedView<LoginViewModel> {
...
}
name: 텍스트 필드 이름 (ViewModel에서 사용할 변수명)isPassword: 비밀번호 입력 필드 여부build_runner로 코드 생성flutter pub run build_runner build --delete-conflicting-outputs
→ 이 명령어를 실행하면 _form_view.form.dart 파일이 생성됩니다.
class LoginView extends StackedView<LoginViewModel> with $LoginView {
void onViewModelReady(LoginViewModel viewModel) {
syncFormWithViewModel(viewModel);
}
Widget builder(BuildContext context, LoginViewModel viewModel, Widget? child) {
return Column(
children: [
TextField(controller: emailController),
TextField(controller: passwordController, obscureText: true),
],
);
}
}
emailController, passwordController 등은 자동 생성됨syncFormWithViewModel()을 호출하면 ViewModel과 양방향 바인딩이 연결됨class LoginViewModel extends FormViewModel {
void submit() {
print(emailValue); // 입력된 이메일
print(passwordValue); // 입력된 비밀번호
}
}
FormViewModel을 상속하면 자동으로 emailValue, passwordValue 등이 생성됩니다.| 기능 | 설명 |
|---|---|
setFormStatus() | 폼 상태 갱신 수동 트리거 |
isFormValid | 전체 폼 유효성 검사 결과 |
clearForm() | 폼 초기화 |
disposeForm() | 메모리 정리 (보통 dispose()에서 호출됨) |
| 요소 | 설명 |
|---|---|
@FormView | 필드 정의를 위한 애너테이션 |
build_runner | 자동 코드 생성 |
syncFormWithViewModel() | View ↔ ViewModel 바인딩 연결 |
FormViewModel | 값 접근 및 폼 제어 기능 제공 |