화면 생성 흐름 main() 함수에서 프로그램 시작. runApp() 함수를 통해 루트 위젯이 설정 됨 MaterialApp 위젯을 통해 Material Design 스타일 적용 가능 Scaffold 위젯을 사용하여 기본적인 레이아웃 구성 각각 위젯은 자신의 buil
buildContext는 위젯 트리 내에서 state와 UI의 일관성을 유지하는 핵심 요소이다. 그리고 state는 buildContext를 통해 부모 위젯에 접근하고 데이터를 주고받는다.
플러터로 앱을 개발하다 보면, 안드로이드 스튜디오에서 위젯 앞에 const를 붙이라는 제안을 종종 받을 수 있다. 자꾸 뜨는 노란 밑줄이 왜 강조되는지, 그 이유와 함께 const와 static const의 활용법을 알아보자. dart 공식문서 참조 https://d
개발 중 Firebase를 초기화했음에도 불구하고, 초기화에 실패했다는 에러가 났다. Firebase.initializeApp();
스케줄 앱을 만들면서 datePicker 와 timePicker 를 사용하고 있었다. 그런데 사용자가 날짜나 시간을 빠르게 조정할 경우 onDateTimeChanged 콜백이 지나치게 자주 호출되어 앱이 다운되는 문제가 발견되었다.
앱과 서버가 데이터를 주고받기 위해서는 서로 어떻게 대화할지 정해둔 규칙과 방법이 있어야 하고, 그를 기반으로 네트워크 통신을 해야한다. 이런 규칙이 HTTP 와 API 다. 간단하게 요약하자면 다음과 같다.
이전 포스팅의 방식대로 recyclerView 를 구현할 때, 데이터가 변경될 때 notify~ 메서드를 호출해 데이터 변경을 알려주어야 했다. 매번 갱신 코드를 쓰지 않아도 되는 ListAdpater 를 써보자
프로젝트를 진행하면서 원하는대로 UI가 업데이트 되지 않는 상황을 몇번 겪었다. 내가 상태관리를 제대로 이해하지 못한 것 같다는 생각이 들었고, ‘상태관리’의 개념부터 정확하게 알고 넘어가야겠다는 생각을 했다. 다행히 플러터 공식 문서에 친절한 설명이 있었다.
bloc 의 장단점, 위젯 등 정리
이전 글에서 블록 개념 정리를 했으니 이제 실제로 구현해보자. Bloc 공식 홈 튜토리얼을 참고했다.
지난 프로젝트에서 상태관리 라이브러리로 getX 를 사용했었다. 그땐 규모가 그리 크지 않으니 겟엑스로 충분할 줄 알았으나, 기능이 늘어나면서 컨트롤러의 역할이 점점 비대해지는 것을 경험했다. Getx Controller 파일 내의 코드가 너무 길어지고, 파일 하나에
공식 사이트 참고 bloc 을 통해 timer 를 구현해보자. timer 는 시간이 계속 흐르고 있다. 그리고 남은 시간이 보여져야 한다. 그래서 Stream 을 사용해 흐르는 시간을 방출한다.

Bloc 상태를 업데이트 할 때, copyWith 메서드를 직접 작성하고 있었는데 freezed 라는 code generator 를 쓰면 그런 번거로움을 해소할 수 있다고 하여 사용해보기로 했다.결론적으로는 너무 좋아서 프로젝트에 적용하기로 함. 엔티티 작성할 때 코드
SOLID 원칙을 정처기 공부하면서 처음 접해서였는지, 그저 외우기 바빴다. “무슨 무슨 원칙이 있었지?” 정도로만 기억할 뿐, 각 원칙이 실제로 어떤 의미를 가지는지, 그리고 어떤 맥락에서 적용되어야 하는지는 제대로 이해하지 못했다. 말 그대로 ‘이해’가 아니라 ‘암

왜 어떤거는 di.registerFactory 이고 어떤거는 di.registerLazySingleton 인가요?
firestore 공식문서에 iOS 빌드 시간 단축 방법이 있어서 적용 해보았다. 그 과정에서 몇 가지 에러가 났고, 이를 해결했던 과정을 기록했다. 빌드 시간 74% 단축.