- [Flutter] 33. Form 위젯2024년 11월 08일
- Song hyun
- 작성자
- 2024.11.08.:16
728x90반응형[Flutter] 33. Form 위젯
시나리오 코드
1. 기본 코드 - 이름, 이메일, 비밀번호 폼 작성하기
import 'package:flutter/material.dart'; void main(){ runApp(MyApp8()); } class MyApp8 extends StatefulWidget { const MyApp8({super.key}); @override State<MyApp8> createState() => _MyApp8State(); } class _MyApp8State extends State<MyApp8> { // Form 위젯 만들어보기 final _formkey = GlobalKey<FormState>(); String _name = ''; String _email = ''; String _password = ''; String _errorMessage = ''; // 멤버 함수 만들어보기 void _submitForm(){ // 유효성 검사 // UI 상태 변경 // ---> 통신 요청 } @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( appBar: AppBar( title: Text('Form Example'), ), body: Container( padding: const EdgeInsets.all(16.0), // form 위젯은 위젯들을 구분할 수 있는 키가 필요하다. child: Form( child: Column( children: [ TextFormField( decoration: InputDecoration( labelText: 'name', errorStyle: TextStyle(color: Colors.blue, fontSize: 10) ), validator: (value){ if(value == null || value.isEmpty){ return '이름을 입력하세요'; } return null; }, // value 매개 변수 값이 null이 될 수 있다. onSaved: (value){ // value! = 강제 null이 아니라고 명시 // 하지만 실제 null 값이 들어오면 터진다 _name = value!; }, ), TextFormField( decoration: InputDecoration( labelText: 'email', errorStyle: TextStyle(color: Colors.blue, fontSize: 10) ), validator: (value){ if(value == null || value.isEmpty){ return '이메일을 입력하세요'; } return null; }, // value 매개 변수 값이 null이 될 수 있다. onSaved: (value){ // value! = 강제 null이 아니라고 명시 // 하지만 실제 null 값이 들어오면 터진다 _email = value!; }, ), TextFormField( decoration: InputDecoration( labelText: 'password', errorStyle: TextStyle(color: Colors.blue, fontSize: 10) ), validator: (value){ if(value == null || value.isEmpty){ return '비밀번호를 입력하세요'; } return null; }, // value 매개 변수 값이 null이 될 수 있다. onSaved: (value){ // value! = 강제 null이 아니라고 명시 // 하지만 실제 null 값이 들어오면 터진다 _password = value!; }, ), const SizedBox(height: 20,), ElevatedButton( onPressed: (){}, child: Text('Submit') ), const SizedBox(height: 20,), Text(_errorMessage, style: TextStyle(color: Colors.red)) ], ) ), ), ) ); } }
2. 폼 제출 시 함수 실행하기
ElebatedButton을 클릭하면 아래와 같이 _submitForm() 함수가 작동하는 것을 알 수 있다.
ElevatedButton( onPressed: (){ // 메서드 호출 _submitForm(); }, child: Text('Submit') ),
// 멤버 함수 만들어보기 void _submitForm(){ print('11111111'); // 유효성 검사 // UI 상태 변경 // ---> 통신 요청 }
onPressed의 경우, 아래와 같이 파라미터와 실행부 없이 간단히 줄여 쓸 수도 있다.
ElevatedButton( onPressed: _submitForm, child: Text('Submit') ),
3. 유효성 검사 하기
// 멤버 함수 만들어보기 void _submitForm(){ print('_formKey.currentState!.validate()'); if(_formkey.currentState!.validate()){ // TextFormField -> validator 호출 -> 모두 통과하면 true를 반환한다 // 다음 단계 -> onSaved 메서드를 실행 시킨다. _formkey.currentState!.save(); // 각각의 formfield onSaved 메서드 호출 됨 setState(() { _errorMessage = ''; // 상태 변경 처리 // 변수 안에 값 확인 print('_name : $_name'); print('_email : $_email'); print('_password : $_password'); // 통신 요청 http.get(~); http.post(~); }); } else { setState(() { _errorMessage = '필수값들을 입력하시오'; }); } }
728x90반응형'Flutter' 카테고리의 다른 글
[Flutter] 36. BottomSheet 위젯이란? (0) 2024.11.12 [Flutter] 34. Form 따라 만들어보기 (0) 2024.11.08 [Flutter] 32. 플러터의 기본 위젯들 (1) 2024.11.07 [Flutter] 31. setState 메서드란? (0) 2024.11.07 [Flutter] 30. StatefulWidget과 StatelessWidget (0) 2024.11.07 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)