GetView를 통해 보다 간결하게 GetxController나 GetxService를 StatelessWidget에 추가할 수 있다. 이때, GetView는 Get.find()함수를 통해 컨트롤러를 호출하는데, 당연하게도 Get.put() 또는 Get.lazyPut(
원인 키보드가 올라오는 과정에서 플러터가 새롭게 UI를 렌더링함 위 과정에서 TextEditingController의 초기화가 의도된 흐름대로 진행되지 않아 텍스트 입력창에 초기 텍스트가 바인딩되지 않음 해결 StatefulWidget을 사용할 때 didUpdat
플러터를 사용해 리스트를 처음 구현했을 때 ListView.builder를 사용하라는 블로그 글을 통해 리스트를 구현했었다. 처음에는 "그냥 이렇게 구현하는건가 보다~"하고 넘어갔는데, 플러터 개발자로 취업을 하고, 정말 다양한 리스트 위젯을 구현하다보니 리스트를 구현하는 과정에서 다양한 방법이 있다는 것을 알게 됬다. 다양한 방법은 다음과 같았다. Col...
TextFormField나 TextField를 사용할 때 매 글자를 입력할 때마다 커서가 맨 앞으로 이동되는 현상이 나타나는 경우가 있음. 기존에는 그냥 커서를 맨 뒤로 보내야 겠다고 생각했고 이를 위해 아래와 같은 코드를 작성했음.
GetxController를 사용하다보면 일부 컨트롤러의 경우 싱글턴 객체처럼 앱이 실행되는 동안 인스턴스를 계속 유지하고 싶어지는 순간이 발생하는 경우가 많다. 나는 이런 경우 아래와 같은 방법을 사용했었다. 전형적인 싱글턴 패턴을 적용한 GetxControlle
모바일 앱의 다양한 입력필드를 보면 입력 필드에 포커스가 맞춰져 있는 동안 입력 필드 내 특정 아이콘이나 버튼, 텍스트가 활성화 되는 경우가 상당히 많다.나 역시 플러터의 TextFormField위젯을 통해 포커스를 가지고 있는 동안 suffix버튼을 보여주려는 방법을
플러터를 이용해 개발을 하면서 SelectableText를 많이 이용했었다. 그런데 언제부턴인가 SelectableText위젯에서 텍스트를 드래그하면 모바일 환경에서 텍스트 선택이 잘 되지 않는 문제를 겪게 되어 다른 방법을 찾아봤다.이렇게 작성된 코드를이렇게 바꿔주면
GoRouter와 GetX를 사용할 때 GetPage를 사용하지 못하다보니 원래 사용해오던 Getx의 바인딩을 사용하지 못하는 문제가 발생했다.해결방법 : GetBuilder를 통해 바인딩을 직접 지정해줘야한다.이런 방식으로 호출하면 된다. builder가 두 번
GetX만 사용하다보니 Flutter 개발자가 아니라 GetX 개발자가 된 느낌이 들어 Provider를 통해 Flutter 개발의 범위를 넓히려고 했다.아래의 코드는 구글링을 통해 찾은 Provider 패키지를 사용한 예제의 코드 패턴을 학습해서 만든 예시이다.pr
GoRouter에는 ShellRoute라는 클래스가 있는데 이걸 이용해서 모바일, 웹에서 NestedRoute를 구현할 수 있다.
블록? -> 상태관리를 위해 사용하는 디자인 패턴. Flutter에서는 bloc패키지와 flutter_bloc패키지를 이용해서 쉽게 사용할 수 있다.간단하게 GetX 대비 장 / 단점을 나열해보자면견고한 구조를 가지기 때문에 시스템이 복잡해져도 소스코드의 유지 관리에
flutter_bloc과 bloc 패키지에서는 Bloc패턴을 활용한 상태관리를 보다 편리하게 구현할 수 있도록 Bloc과 Cubit이라는 클래스가 존재한다.Bloc을 사용하면서 이 두가지 클래스 중 어떤 것을 사용하는 것이 더 좋을까라는 궁금증이 있었는데 이러한 궁금증
타이머 위젯을 만들면서 타이머가 동작하고 있는 동안 위젯이 위젯 트리에서 dispose되니 제목과 같은 에러가 나타났다.에러 메시지 내용 그대로 setState()가 선언된 위젯, 혹은 해당 위젯의 부모위젯이 dispose된 후 setState()가 호출된 경우를 나타
BlocListener BlocListener위젯의 형태는 아래와 같이 생겼다. 제네릭으로 선언된 Bloc(또는 Cubit)과 State를 통해 상태 값이 변하는 것을 감지하고 그에 따라 listener함수를 실행한다. 이 위젯의 좋은 점은 child에 선언된 위젯
Freezed 패키지 링크 : https://pub.dev/packages/freezed freezed는 불변성을 지닌 객체를 생성할 수 있도록 도움을 주는 코드 생성 패키지인데, freezedannotation, jsonserializable, jsonannotat
개발을 하다 보면 정렬을 해야하는 경우가 굉장히 많이 나타난다. 그럴 때 Dart나 다른 언어에서는 sort함수를 제공해주는데, 편리하게 사용할 수 있다 보니 sort함수에 대해 깊게 생각해 본 적이 없어 sort함수의 동작에 대해 알아보고자 한다.우선, Dart의 s
freezed를 사용할 때, 보통 아래와 같은 방식을 사용해 데이터 모델을 생성한다. 이 모델을 사용을 사용할 때 아래와 같이 사용할 수 있다. 예시에 있는 모델과 같이 name, type같은 간단한 데이터를 저장하는 모델인 경우 이렇게 사용해도 문제가 없지만, 아
플러터를 사용해 앱을 개발하다보면 네이티브 기능을 호출할 수 없는 경우가 찾아오게 된다.이 때, 두가지 선택지를 고를 수 있는데 하나는 pub.dev에서 원하는 기능에 해당하는 서드파티 패키지를 찾아 활용하는 방법이고, 다른 하나는 오늘 소개할 MethodChannel
구글 Gemini SDK 지원온디바이스 AI 지원은 아님. 구글 AI 서버에 요청을 보내서 응답을 받는 방식으로 동작함.지원하는 기능텍스트 입력 및 이미지 입력에 대한 응답 텍스트 생성 (멀티모달 지원)채팅 기능 지원 -> 정확히는 "multi-turn conversa
Flutter로 개발된 여러 프로젝트 중 우리가 공부를 위해 접하는 대부분의 프로젝트는 하나의 Flutter프로젝트로 구성된 경우가 많다. 단일 프로젝트로 구성할 경우, 개발이 편리하다는 이점이 있지만, 프로젝트가 거대해질 경우, 하나의 프로젝트에 너무 많은 종속성과
최근 내가 만드는 모바일 앱에서 사용하는 서드파티 패키지 사용 중 문제가 발생해 해당 패키지를 직접 수정하고 이를 maintainer가 마이너 업데이트에 반영한 경험을 얻어 이에 대한 후기를 작성해보고자 한다.나는 Flutter로 알람 어플리케이션을 만들고 있었는데,
Xcode를 15로 업데이트한 뒤 빌드하게 되면 WebKit 관련 에러가 발생하게 되는 증상이 나타남.에러 메시지는 다음과 같음.flutter_inappwebview패키지에서 ios관련 모듈이 에러가 발생한 것으로 보인다.flutter_inappwebview 패키지를
앱을 만든 뒤에는 어딘가에 홍보를 해야 사용자를 확보할 수 있다.그렇기 때문에 sns에서는 다양한 앱들이 홍보되는 경우가 많은데 이러한 홍보글의 링크를 클릭하면 앱스토어가 열리거나, 혹은 이미 설치된 앱의 경우 해당 앱이 실행되는 것을 경험해봤을 것이다.이러한 기능이
이전 글에서는 Flutter에서 멀티모듈을 활용해 재사용성을 높인 구조를 만드는 방법에 대해 소개했었다. 이번 글에서는 멀티모듈의 단점인 pubspec.yaml의 버전 관리가 어려운 점을 손쉽게 해결해주는 melos라는 패키지를 소개하고자 한다. melos는 i
내가 회사에서 만드는 프로젝트는 단순히 플러터만 사용한 것이 아니라, 회사 내부에서 개발된 모듈을 플러터에 연동해서 만들어야 하는 프로젝트다. 그래서인지, 일반적인 플러터 앱 배포를 수행하면 안되고, 반드시 빌드 전에 미리 수행되어야하는 몇가지 작업들이 있었다. 안