📌 BuildContext, mounted, setState 완전정복 — 언제, 왜, 어떻게 안전하게 쓸까? Flutter 앱 개발을 하다 보면 이런 에러, 한 번쯤 본 적 있지 않나요?Unhandled Exception: setState() called after dispose(): ...또는RenderBox was not laid out: context.size called before layout.이런 오류는 대부분 context, setState, mounted의 사용 타이밍 문제 때문에 발생합니다. 이번 글에서는 아래 내용을 확실하게 정리해 드릴게요:BuildContext는 언제 안전하게 사용할 수 있는가?mounted는 왜 필요한가?setState()는 언제, 어디서 써야 안전한가?async..
📌 initState()에서 Future(() {}) vs addPostFrameCallback — 언제, 왜, 어떻게 써야 할까? Flutter 앱을 개발하다 보면 initState()에서 비동기 작업을 예약하고 싶을 때가 있습니다. 예를 들어 API로 데이터를 불러오거나, 렌더링이 완료된 후 위젯의 크기를 계산하는 등의 작업이죠. 이때 자주 사용되는 방법이 바로 아래 두 가지입니다:Future(() {})WidgetsBinding.instance.addPostFrameCallback이 둘은 비슷해 보이지만 실행 타이밍이 다르며, 잘못 사용하면 오류를 유발할 수 있습니다. initState()에서 비동기 작업을 하는 이유?initState()는 위젯이 생성되자마자 딱 한 번 호출되는 메서드입니다. 하..
signInWithEmailAndPassword • wrong-password: 주어진 이메일에 대해 비밀번호가 잘못되었거나, 해당 계정에 비밀번호가 설정되지 않았을 경우 발생합니다. • invalid-email: 이메일 주소가 유효하지 않은 경우 발생합니다. • user-disabled: 해당 이메일에 해당하는 사용자가 비활성화된 경우 발생합니다. • user-not-found: 해당 이메일에 해당하는 사용자가 존재하지 않는 경우 발생합니다. createUserWithEmailAndPassword • email-already-in-use: 해당 이메일 주소를 사용하는 계정이 이미 존재할 경우 발생합니다. • invalid-email: 이메일 주소가 유효하지 않은 경우 발생합니다. • operation-..
Flutter의 유효성 검사 프로세스 (Validation Process)Flutter에서 TextFormField의 유효성 검사는 Form 위젯과 validator를 사용하여 이루어지며 아래 순서로 동작한다 🔹 유효성 검사 동작 흐름1️⃣ TextFormField에 validator를 설정하면, 사용자가 입력한 값에 대한 검사를 수행.2️⃣ Form 위젯의 FormState에서 validate()를 호출하면 모든 TextFormField의 validator 함수가 실행됨.3️⃣ validator 함수가 null을 반환하면 유효한 값, 그렇지 않으면 오류 메시지를 반환하여 오류 표시.4️⃣ 만약 모든 필드가 유효하면 save()를 호출하여 onSaved에서 값을 저장할 수 있음. 🔹 코드 예제 (유..
이번 포스팅은 Flutter에서 MVVM (Model-View-ViewModel) 디자인 패턴을 간결하고 효율적으로 적용할 수 있는 기본 코드를 작성해본다.이 구조는 Riverpod을 사용하여 상태를 관리하고, View-ViewModel-Model 간의 역할을 명확히 분리하여 재사용성을 높이는 형태야.🔹 구조 설명lib/│── main.dart // 앱 진입점│── core/ // 공통 유틸리티 및 서비스│── views/ // UI (View)│── viewmodels/ // ViewModel (비즈니스 로직)│── repositories/ // repository│── datasou..