플러터 14

[Flutter] Flutter 3.7.x에서 발생하는 flutter_staggered_grid_view LateInitializationError 수정하기

최초작성일: 2023년 4월 5일 이번에 플러터 버전을 업데이트하면서 새로운 에러들을 확인하고 있다. 그 중 LateInitializationError는 에러가 발생하는 위젯/하위 위젯 모두 late나 nullable로 선언된 변수가 없어서 왜 발생하는지 알 수가 없었다. LateInitializationError: Field '_children@25042623' has not been initialized. 플러터와 패키지 버전을 올린 이후에 발생한 문제라서 패키지에서 발생한 문제인지 의심했고, 에러 로그에서 문제가 되는 패키지의 경로를 확인할 수 있었다!! 그래서 구글링 결과, 해당 패키지 깃헙에서 이슈를 확인할 수 있었다. 해결 방법은 다음과 같다! (출처) @override Widg..

앱/Flutter 2023.08.28

[Flutter] Sliver에서 Expanded처럼 나머지 공간 차지하게 하기 : SliverFillRemaining

최초작성일: 2023년 1월 16일 0. Slivers 안에서 Expanded가 사용하고 싶었다. 앱에서 현재 사용하고 있는 공통 Layout widget을 사용해야 했고, 또CustomScrollView를 사용하고 있기 때문에 반드시 Sliver를 사용해서 ui를 그려야 했다. 내가 그리고 싶었던 것은 데이터가 없는 경우에 화면 중앙에 다른 위젯을 그려주는 것이었다. 정리를 해보면, 데이터가 있는 경우 : 스크롤 위젯 => SliverList 데이터가 없는 경우 : 스크롤X 위젯 => ?? 이런 상황이었다. 1. SliverToBoxAdapter를 사용하기 플러터에서 ui를 그릴 때 남은 공간을 모두 차지하게 하기위해 Expanded를 자주 사용하게 된다. (구체적인 예제는 공식문서 : Expanded..

앱/Flutter 2023.08.08

[2022년 8-11월] Spring에서 플러터 개발자로

최초작성일: 2022년 12월 3일 0. 시작하며 8월에 이직을 하고 플러터 개발을 시작하면서 여러가지 재미있는 경험을 많이 하게 되었고, 최근에는 앞으로의 방향성에 대해 고민도 많았다. 최근에 회고를 거의 못하기도 했고, 새로운 블로그로 이사하면서 한 번 정리를 하고 가면 좋을 것 같아서 회고글을 작성하게 되었다. 1. 이직 올해 1월, 개발을 해보고 싶어서 부트캠프를 시작하게 되었고, Spring으로 서버 개발을 공부하고 5월에 취업을 하게 되었다. 이미 어느정도 자리를 잡은 안정적인 회사였고, 인터뷰도 굉장히 인상적이었다. 그렇지만 3개월만에 이직을 하게 되었다. 인터뷰에 들어온 개발자들은 클린코드를 추구하고 있었고, 에자일 등 개발 프로세스나 개발 환경에도 관심이 많았다. 그렇지만 입사를 하고 나..

회고 2023.07.16

20220920-21 TIL #비즈니스 로직은 분리 #레이어를 나누자 #Repository pattern

이번주 초까지 급하게 끝내야 하는 일정이 있어서 코드리뷰를 못하다가, 약간 시간이 생긴 오늘 코드리뷰를 했다. 평소에도 궁금한건 물어보면서 진행했지만, 오늘 리뷰하면서 전체적으로 우리 앱의 아키텍처에 대해서도 다시 설명을 해주셨다. 마침 오늘 아침에 서버 연동 부분을 보면서 어떤 레이어 구조로 나눠져 있는지, 각각 어떤 역할을 하는지 다시 살펴보았고, 계속 업무를 하면서 처음보다는 이해가 된 부분도 있고 궁금해진 점도 있어서, 2시간 가까이 얘기하면서 많은 부분이 정리되었다. 최근에 가장 큰 고민은 비즈니스 로직을 어디에 구현해야하는지, 였다. 우리 패키지 구조에서 이미 ui와 feature는 구분을 하고 있고, 위젯을 만들면서도 계속 위젯에는 로직이 들어가지 않게 분리하려고 했다. ui와 비즈니스 로..

회고 2022.09.21

20220907-08 TIL #ui작업하기 #위젯 #비즈니스로직분리하기

처음 업무를 받은 날, 재택을 하다보니 여러가지 궁금한 점이 많았다. 슬렉으로 계속 질문하면서 업무를 했지만, 아직 업무 코드 파악이 덜 된 부분도 많았고 플러터는 처음 하다보니 어떤 방식으로 업무를 해야하는지도 아직 감이 오지 않았다. 우선 비교적 간단한 페이지 UI를 작업하기로 했는데, 위젯(컴포넌트)만 하더라도 새로 만드는게 좋은지, 기존에 만들어진 위젯을 사용하는게 좋은지 판단이 잘 되지 않았다. 출근해서 업무를 하면서 사수와 이런 고민들을 같이 얘기하면서 알고보니 컴포넌트화 되있는 위젯 버튼이 있는 경우도 있었고, 기존에 만들어져있는 컴포넌트에서 required parameter 하나를 그냥 empty string을 넣고 사용하는게 낫겠다고 판단이 되는 경우도 있었다. 또, 기존 컴포넌트를 사용..

회고 2022.09.13

[Exercism] Gigasecond #Duration #Named parameter

https://exercism.org/tracks/dart/exercises/gigasecond/iterations?idx=2 Exercism Learn, practice and get world-class mentoring in over 50 languages. 100% free. exercism.org 문제 자체는 정말 단순하게 gigasecond를 더하면 되는데, Duration을 처음 써볼 수 있었다. Duration은 말 그대로 기간을 나타내는 클래스인데, DateTime 클래스와 같이 많이 쓰는 것 같다. Dart에서 마음에 드는 것 중 하나는 named parameter인데, 이렇게 arguments가 어떤 값인지 바로 알 수 있어서 좋다. (자바는 named parameter가 없고, 코틀..

Language/Dart 2022.09.08

[Exercism] Hamming

https://exercism.org/tracks/dart/exercises/hamming Hamming in Dart on Exercism Can you solve Hamming in Dart? Improve your Dart skills with support from our world-class team of mentors. exercism.org 두 개의 주어진 문자열을 자리마다 비교해서 값이 다른 개수를 리턴하는 문제이다. 문제 조건에서 둘 중 하나가 empty이거나 길이가 다르면 에러를 던지도록 되어 있어서 먼저 에러 처리를 해주고, for문으로 각 자리를 비교해 다른 경우를 count하였다. if문에서 조건은 메서드로 분리를 해주는게 가독성이 더 좋다고 생각해서, 간단한 로직이지만 별도로 분..

Language/Dart 2022.09.08

[Excercism] Space Age #enum

https://exercism.org/tracks/dart/exercises/space-age Space Age in Dart on Exercism Can you solve Space Age in Dart? Improve your Dart skills with support from our world-class team of mentors. exercism.org  행성과 초seconds가 주어지면 조건에 따라서 나이를 계산하는 문제이다. 각 행성들의 공전 주기가 Earth Year로 주어졌기 때문에 1) 행성별로 One Earth Year을 구하고, 2) 주어진 초를 지구 나이로 환산한 뒤에 2) / 1)로 답을 구했다. 비슷비슷한 개념이 많아서 메서드명이나 변수명을 어떻게 만들어야 하는지 고민이 되..

Language/Dart 2022.09.08

20220906 TIL #있는 위젯을 써야할까, 새로운 위젯을 만들어야 할까?

업무로 두 개의 페이지를 받았다. 일단 ui부터 그리기로! 한 페이지는 간단한 형태라서 처음에 딱 피그마에서 봤을 때는 금방 할 수 있을 줄 알았다. 그렇지만 역시나, ui는 내가 생각하는데로 모양이 나오지 않았다. 그리고 더 큰 고민은 기존에 만들어져 있는 위젯을 사용해야 하는지, 아니면 새로운 위젯을 만들어야 하는지였다. 두 페이지 작업하면서 모두 이런 고민이 생겼다. 1. 전체적인 디자인에서의 통일성, 코드 중복, 이후 수정이 필요한 경우 등을 고려할 때 이미 만들어진 위젯을 쓰는게 낫다고 1차적으로 판단했는데, 문제는 내가 원하는 모양과 완전히 일치하지 않다는 것! 이런 경우에 기존에 만들어진 Widget A의 변형인 A'를 새로 만들어서 쓰는게 나을지 고민이다. (아니 padding이나 marg..

회고 2022.09.06

[2022]0829-0904 WIL #Flutter 기초 강의 마무리 #riverpod

지난 주부터 듣던 Flutter 기초 강의를 모두 들었다. 후반에 미세먼지 앱을 만드는 부분이 있었는데 모델링 부분에서 '이렇게 해도 되나?'라는 고민이 많았고, 이전 강의들보다 다루는 데이터도 많고 리팩토링도 계속 하다보니 조금 헷갈리는 부분이 많았다. 특히 상태관리를 StatelessWidget과 StatefulWidget만 사용하다보니 데이터를 전달하고 관리하는게 중요했다. 강의를 다 듣고 나서, 우리 앱에서도 사용하고 있는 상태관리 패키지인 riverpod을 공부하기 시작했는데 정리하면서 생각해보니, 왜 상태관리 패키지를 사용하는지 알 것 같다. 상태관리 패키지를 사용하면 훨씬 더 편하게 데이터들을 관리할 수 있고, 각 위젯에서 필요한 데이터들을 쉽게 접근하고 watch할 수 있을 것 같다. 그리..

회고 2022.09.06