[Flutter] 23. 모두의 블로그 앱 만들기 (1) - 회원가입 페이지 (1)

김주희's avatar
Jun 08, 2025
[Flutter] 23. 모두의 블로그 앱 만들기 (1) - 회원가입 페이지 (1)
flutter_secure_storage : 휴대폰 디스크에 저장
 
애뮬레이터에서 localhost는 flutter 개발 서버가 아닌 애뮬레이터 내부를 가리켜서 인식X
notion image
dio는 내부적으로 예외 터트려서 내가 msg를 가져오기 위해 파싱 불가
notion image
 
 
_core/utils/my_http
notion image
 
SplashPage : 그림이 보여지는 동안 통신, 데이터 받아오기 등의 과정을 진행
 
 

서버 실행

서버 실행하기

  1. jar 파일이 있는 폴더 열기
  1. Open Git Bash Here로 터미널 열기
  1. java -jar 파일명 으로 실행
    1. jar 파일이 하나 뿐이므로 tab키를 누르면 바로 파일이 뜬다.
    2. notion image
notion image
 

api 문서 열기

  1. localhost:8080/docs/api.html 열기
notion image
 
 

회원가입 페이지

join_body

map으로 만들면 dio가 알아서 json으로 바꿔준다.

?

notion image
notion image
 
그림은 body만 보면 되도록 그냥 다 빼두기! (ex - JoinBody처럼 / 컨벤션임)
 

Form - Column으로 감싸기

Form 위젯의 기능을 안쓰더라도 그냥 form으로 감싸는게 좋다
notion image
notion image
 
 

Form : 위젯(JoinForm)으로 추출

notion image
notion image
notion image
 

창고 만들기

join_fm

notion image
 
TextEditingController 사용X!!!
vm은 화면에 뿌릴 데이터, fm은 전송할 데이터를 의미한다. → 컨벤션!

창고 데이터 타입 만들기

생성자, copyWith를 무조건 만들어야 된다!
근데 화면 변경이 아니라 모아서 전송하려고 하는거라서 리로드 될 필요 없어서 copyWith Form에서는 안만들어도 된다.
notion image
 

창고 만들기

데이터를 null로 초기화할 일이 없음 → ?안써도 됨
notion image
 
notion image
1.글자를 적을때마다 채워넣기 or 2.버튼을 눌릴때 채워넣기
 
  1. 적을때마다 넣으면 바로 validation 체크 가능 → UX 좋음
  1. 나중에 한방에 validation 체크 가능
 
 
상태를 변경할 때 그림만 다시 안그릴거면 기존의 상태 변경해도 됨
깊은 복사 하는 이유 = 그림 다시 그릴려고
글자 적을때 그림 다시 그릴 필요 없음 → 리로드 필요 X → validation체크할때만 그림 다시 그리면 됨
→ 깊은 복사 해야됨
⇒ 결국 나중에는 CopyWith 만들어야 됨
notion image
 

창고 관리자

notion image
 
화면 들어갈때 창고 관리자 만들어지면서 창고 만들어지고 joiModel 공백으로 만들어짐 그리고 그림 나중에 다시 안그려짐
 

copyWith

유효성 검사 하기 전이라서 오버스펙이긴한데
notion image
notion image
 
화면에 대한 창고 만들었고 ~1 : 30: 00
 

유효성 검사

validator_util.dart

기존의 validator_util은 textEditingController에 적용되는 거라 수정
 

join_fm 유효성 검사 추가

notion image
notion image
 

CustomAuthTextFormField

notion image
notion image
notion image
 

?

notion image
 
notion image
 
값이 들어가고 rebuild 될때 ? ~ 1:36:00
그 전에는 onchanged에 print문을 넣었는데 한타이밍 늦는 문제 → 해결
notion image
 
notion image
 

유효성 검사 에러 메세지

notion image
errorText 꾸미고 싶으면 gpt에게 물어보면 됨
위치 변경하고 싶으면 stack으로 해서 내가 커스텀 함수 만들어서 사용하면 됨
 
onChanded를 안쓰면 값이 갱신이 안된느데 없으면 버튼을 클릭할 때 되도록 onclick에 넣으면 됨
상태 갱신이 안되어있어서 여기서 불가능 value가 없어서 → fm.validate()가 true일때 통신하는걸로 만들면 됨
 
(여기가 아니라 CustomElevatedButton 회원가입 버튼의 click으로 if문 옮기기)
notion image
 
 
 
notion image
 
 
notion image
 
 
코드 수정
다른 항목 통과해도 유효성 검사 에러 메세지 보이도록
통과했을때 없어지도록 다시 수정
필드 1 username = 's' usernameError = "메시지" -> null 필드 2 password = "k" passwordError = "메세지"
 
유효성 검사 메세지 유지를 위한 코드 수정
notion image
errorText 가 공백을 받으면 공간을 잡지만 null을 받으면 공간을 안잡는다.
 

회원가입 페이지에서 상태 관리 목적 : form의 데이터를 관리하려고(통신하면 버리면 됨)
통신은 global view model을 만들거임 → 화면에 연결된 vm 아님
→ 거기에 로그인,로그아웃 등 함수 만들거임 ⇒ 유저의 세션 전역적으로 관리할거임
 
로그인 화면 = 사용자 입력O -
게시글 목록 화면 = 사용자 입력X - select해서 뿌리는 데이터 - vm 창고 필요 (view에 필요한 모델 가져와야됨)
게시글 쓰기 화면 = 사용자 입력O -
유저 정보 화면 = 사용자 입력X - select해서 뿌리는 데이터 - vm 창고 필요 (view에 필요한 모델 가져와야됨)
 
fm = 사용자 입력값 모아서 유효성 검사
vm = select해서 db에서 api 요청해서 가져와서 값 뿌리는거
유효성 검사 그냥 화면에 stack 더 쌓아서 alert 띄울거면 그림 다시 안그려도 됨
지금 코드는 화면에 유효성 검사 메세지를 바로 뿌려서 copyWith 필요한 것
 
state를 기반으로 화면 그림 - 게시글 목록/ 유저 정보
state를 기반으로 에러 메세지 그림 - 로그인/게시글 쓰기
 
MVVM 패턴
화면마다 (view마다) viewmodel이 있다. 1:1 매칭 - ui랑 비지니스 로직, 데이터 분리됨
 
global view model = 어느화면에도 붙어있지 않는 모든 화면에서 다 쓰는
상태가 유저 정보 관리 - 유저 정보에는 로그인된 유저인지 아닌지/유저네임/유저 토큰 저장
얘가 바뀐다고 화면 그림이 바뀌지X - watch할 필요 없고 read하면 됨 (그림 다시 그리지X)
notifierProvider = 상태가 바뀌면 알림을 주는 provider
데이터를 그냥 모으려고 쓰는 영역 = session 영역처럼 저장만 하려고 하는 = stateProvider
stateProvider를 따로 만들어야 됨 → watch 불가 = 알림을 안주는 provider라서 = read만 가능
→ 근데 우리는 stateProvider 안쓸거고 notifierProvider만 쓸거임 그냥 read만 하면 됨
(잘하게 되면 stateProvider로 read만 되도록 하게 됨!)
 
global view model에 상태가 변수로 isLogin이 있음 false이면 게시글 목록 들어갈때 init에서 로그인 상태인지 확인하고 ~? ~ 3 : 03 : 00
session global view model = (spring) session
 
fm에서 로그인 함수 만들지 X → sesison global view model에서 만들기
 
notion image
Share article

jay0628