bottomNavigationBar의 index를 컨트롤 하는 변수bottomNavigationBar의 items를 설정하는 배열 (사용자가 누르는 버튼)bottomNavigationBar에서 이동하는 페이지 배열위의 currentIndex를 이용해서 컨트롤 하므로,
안드로이드 targetSdkVersion을 수정할 일이 생겼다project > android > app > bulid.gradle 파일로 들어가면android > defaultConfig 단에서 위와 같은 코드를 볼 수 있다.여기서 targetSdkVersion을 수정
기존 프로젝트의 상태관리를 setState > Riverpod으로 마이그레이션 중에 생긴 버그ListView 스크롤 방향에 따라 FloatingActionButton을 보이고 숨기는 기능에 Riverpod을 도입했다문제는 initState에서 구독한 listener에서
Riverpod을 이용한 상태관리 중에, 화면을 이동하고 돌아와도 데이터가 초기값으로 돌아오지 않는 경우 발생!autoDispose를 하여 사용하지 않을 때에는 메모리에서 해제시킨다= 다시 돌아오면 재할당= 다시 초기값에서 시작
Flutter 프로젝트에 포함된 Firebase api key를 github에 그대로 올리면 보안에 취약하기 때문에 숨기는 방법을 탐색해보았다.프로젝트 폴더 (최상위 폴더) 밑에 바로 .env파일을 생성한다.파일이름.env 형식이 아니라, 그냥 .env로 만들면 된다.
API Key와 같이 보안이 중요한 값들은 난독화를 진행하여 디컴파일과 리버스 엔지니어링으로부터 보호해야 한다
입력하는 데이터는 괄호나 따옴표로 묶는 것이 아니라위 사진처럼 그냥 입력해야 한다※ 프로젝트 폴더 경로에서 실행flutter build appbundle --obfuscate --split-debug-info=./
Dart는 싱글스레드이다. 한 번에 하나의 작업을 실행하고, 실행 중 다른 작업의 개입이 없다. 스레드가 뭐지? >프로세스 내에서 실행되는 흐름의 단위 실질적인 앱의 동작을 담당한다. -> 10만 사이클의 반복문이 있어도 끝날 때까지 기다린다는 의미 -> 비효율적
MVVM이란? UI와 비즈니스 로직을 명확하게 분리하여, 개발자가 각 부분에 집중할 수 있도록 한 앱 아키텍처 패턴이다. 개발코드의 가독성과 유지보수성, 재사용성을 향상할 수 있으며, 특정 단위로 테스트를 쉽게 작성할 수 있다는 장점이 있다.
Flutter 개발자들이 사용하는 상태관리 라이브러리는 대표적으로 Provider, GetX, Riverpod, Bloc이 있다. 이 중 많이 사용되는 아래 2가지의 라이브러리의 동작 방식 및 차이점을 정리해보자. Provider Getx MVVM 패턴에서의 사용을
MVVM 패턴과 상태관리 라이브러리의 사용을 이해하는 데 초점을 맞춰 model과 repository는 생략하고, service도 역할만 가상으로 지정하여 간단하게 설계해보았다. 먼저 Provider 상태관리 라이브러리를 사용하였다. auth_service.dart
MVVM 패턴과 상태 관리 3 : MVVM 구현 (Provider) 이전 게시물에 이어서 이번에는 GetX 상태관리 라이브러리를 사용하여 구현해보았다. auth_service.dart 코드 설명 Provider와 동일하다 loginviewmodel.dart 코드 설명 GetxController를 상속받아 구현된다. 변수 초기화 시 GetX 고유의...
Q. 위 두 함수는 UI와 관련이 있지만 왜 build과정의 영향을 받고 안 받고의 차이가 있을까? MVVM패턴으로 앱을 구현해보는 중에 든 궁금증이다. 도대체 Buildcontext가 뭐길래 에러가 발생하는걸까? 이전 게시글에서 MVVM 패턴과 상태관리에 대해
파일 경로 파일 경로를 이용하는 작업에서 모두 사용할 수 있으며, 파일 이름과 확장자까지 반환하기 때문에 뽑아서 활용할 수 있다. pickFiles parameters name|type|description| ---|---|---| allowMultiple|bool
도입 proj4dart라이브러리는 지도 투영법 간의 좌표 변환을 하기 위한 라이브러리인 proj4를 dart에서 사용할 수 있도록 가져온 라이브러리이다. 좌표계 변환 Projection.parse() 좌표 투영법을 정의할 수 있는 함수이다. 내가 정의하고 싶은 좌표
Provider를 이용한 MVVM구조로 개발하면서, ViewModel의 상태변수 중 하나로 StreamSubscription을 관리할 상황이 왔다.처음에는 dispose를 위와 같이 View의 dispose에서 구현했지만, 아래와 같은 예외가 발생했다.FlutterEr
Provider를 사용한 MVVM구조로 개발 중에, 화면이 처음 로드될 때 초기 데이터를 불러오는 작업이 필요했다.enum으로 로딩과 같은 작업 상태가 관리되고, 데이터를 불러오는 fetchData함수가 구현된 ViewModel이 아래와 같이 있다고 가정하겠다.이 상태
일반적인 라디오 버튼이 아닌 아래와 같이 텍스트로 이루어진 라디오 버튼을 커스텀하고 싶었다.비슷하게 성별을 선택할 수 있고, 비공개로 처리할 수도 있는 위젯을 만들어보겠다.Provider를 이용하여 View와 ViewModel로 나누어 구현하였다.Viewmodel은 선
Flutter에서 .svg 파일을 사용하기 위해서는 flutter_svg 패키지가 필요하다.https://pub.dev/packages/flutter_svg설치 후 아래와 같이 사용할 수 있다.asset으로 불러와서 사용했는데, 다음과 같이 기존 그림과 달리
Flutter에서는 DateTime.now()를 사용하여 현재 시간을 불러올 수 있는데, 이는 디바이스에 설정된 시간이다. → 불러오는 값을 사용자가 얼마든지 조작할 수 있다는 의미디바이스에 설정된 시간에 상관없이, 접속 네트워크 서버 시간을 불러올 수 있도록 하기 위
우리가 보통 소요시간이 있거나, 서버를 통해 수행하는 작업은 동기적(synchronous)으로 처리하기 어렵기 때문에 비동기적(asynchronous)으로 처리하여 그 사이에 미리 UI를 그리거나 다른 작업을 할 수 있도록 한다.하지만 큰 작업을 실행할 경우, 화면이
첫 회사에 입사한지도 이제 10개월이다. 졸업을 위해 공들여 진행했던 프로젝트를 출시한지가 엇그제같은데 벌써 1년이 넘었다. 한창 프로젝트 할 때보다 스스로 배운 것도 많고, 출시한 이후로 거의 만져본 적이 없어서, 이 참에 배운 것들을 활용하여 여러가지 개선과 리팩토링을 진행하려 한다. 우선 돌아가는 지 테스트 역시 오랫동안 건드리지 않은 코드에는 거미...
개발 중 코드가 길어지면 들여쓰기가 많아져서 코드를 분리한다. 여기서 필자는 Widget Class로 분리하는 경우는 별로 없고, Helper Method를 주로 사용했다. 당연히 한 파일 안에서 관리하면 알아보기도 쉽고 편하다고 생각했는데, 위젯 규모가 커졌을 때에는 경우가 다르겠더라. 간단한 개념인데 놓치고 있었던 것 같아서 Widget vs Helpe...