플러터

    플러터(Flutter) 프로바이더(Provider) 라이브러리란?

    Provider 라이브러리란? 플러터에서 주로 쓰는 전역 상태 관리 솔루션 플러터의 반응형(Reactive) 특성과 잘 어울린다 주요 특징 단순함: 단순해서 중소규모 프로젝트와 초보자들이 사용하기에 적합하다. 효율성: 모델이 변경되면 해당 모델에 의존하는 위젯만 다시 빌드된다. 확장성: 단순하지만, 복잡한 애플리케이션에서도 사용할 수 있다. Flutter 와의 통합: BuildContext 와 상속 위젯(InheritedWidget) 같은 개념을 사용해 플러터 자체 상태 관리 방식과 조화롭게 작동한다. 작동 방식 Provider 생성: 상태를 저장할 프로바이더를 생성 데이터 액세스: 위젯은 컨텍스트를 사용하여 프로바이더가 보유한 상태/데이터에 액세스할 수 있다. 보통 Provider.of(context)..

    플러터(Flutter) 에서 자주 쓰는 GetIt 패키지란?

    Get it 라이브러리란? Dart 언어에서 의존성 주입을 위해 사용하는 도구이다. 스프링의 IoC 컨테이너와 다르게 서비스 로케이터로 구현되었다고 한다. 닷넷의 서비스 로케이터 스플랫을 Dart 로 포팅한 것이라고 한다. 서비스 로케이터 패턴이란? 서비스나 의존성을 get_it 에 수동으로 등록하고 필요할 때 코드의 어느 위치에서나 검색할 수 있다. 인스턴스를 쉽게 등록하고 사용할 수 있다. 등록 유형 Factory: 요청될 때마다 새 인스턴스가 생성되도록 등록한다. Singleton: 매번 1개의 동일한 인스턴스를 반환한다. Lazy Singleton: Singleton 과 유사하지만, 처음 호출 때 인스턴스를 생성한다. 특징 비동기 지원: 비동기 팩토리 함수를 지원하여 인스턴스를 생성하는 동안 비동..

    플러터(Flutter) 의 글로벌 키(GlobalKey) 클래스란?

    플러터의 GlobalKey 란? 전체 앱에서 고유한 키이다. 전체 앱에서 위젯을 고유하게 식별하는 데 사용된다. 위젯 트리 전체에서 보존해야 하는 위젯의 상태를 유지하는 것이 목적이다. 상태 보존 GlobalKey 를 사용하면 위젯 트리에서 위젯을 이동해도 연결된 위젯의 상태가 유지된다. 원래 위젯 트리의 일부를 재빌드하면 해당 트리의 위젯 상태가 손실된다. 위젯 트리 전체 액세스 GlobalKey 를 사용하면 앱 어느곳에서나 위젯에 액세스 가능하다. 앱의 다른 부분에서 위젯의 상태나 기능에 액세스해야 하는 경우 유용하다. 고유 식별자 GlobalKey 는 앱 전체에서 고유하다. 사용 사례 앱의 다른부분에서 위젯의 상태에 액세스 위젯 트리 내에서 위젯이 이동할 때 위젯의 상태 유지 ex. 목록 위젯이 다..

    플러터의 Drift 라이브러리(플러그인) 이란?

    Drift 라이브러리란? Flutter 에서 사용하는 ORM이다. 사용 방법 model 생성 RDB 에서 테이블을 정의하는 것과 동치인 코드이다. 마지막에 () 를 한번 더 불러 정의의 끝을 명시한다. import 'package:drift/drift.dart'; class Schedule extends Table { IntColumn get id => integer().autoIncrement()(); // Primary key, 정수, 열 TextColumn get content => text()(); DateTimeColumn get date => dateTime()(); IntColumn get startTime => integer()(); IntColumn get endTime =..

    플러터 (Flutter) 의 initializeDateFormatting() 메서드의 역할과 사용법

    initializeDateFormatting() 메서드란? 날짜/시간 서식 지정 등 국제화 및 로컬라이제이션에 사용되는 intl 패키지에서 제공하는 메서드다. Locale 에 따른 날짜와 시간에 대한 포맷팅을 세팅하는 역할을 한다. 어떻게 동작하는가? 날짜 서식 지정 메서드를 호출하기 전에 적어도 하나의 Locale 에 대해 이 함수를 호출해야 한다. 지정한 Locale 에 따라 날짜 서식 패턴을 초기화한다. 지정하지 않으면, 장치의 기본 Locale 을 사용한다. 지정된 Locale 규칙에 따라 날짜 및 시간 서식을 지정하는데 필요한 데이터를 로드한다. 월, 요일, 일반적인 시간 및 날짜 형식이 포함된다. 주석에 아래와 같이 써져있다. This should be called for at least on..

    플러터(Flutter) 의 WidgetsFlutterBinding.ensureInitializing() 이란?

    WidgetsFlutterBinding.ensureInitialized() 란? 앱을 실행하기 전에 프레임워크의 초기화를 처리하는 메서드다. 역할 플러터 프레임워크 초기화 프레임워크와 Flutter 엔진을 연결하는 역할을 한다. 프레임워크로부터 엔진과의 바인딩을 초기화하는데, 이는 프레임워크의 다양한 기능을 위해 필수적인 절차이다. 엔진과의 바인딩 바인딩 프로세스에는 Dart 코드와 기본 플랫폼별 코드 간의 통신 채널을 설정하여 UI 그리기, 이벤트 처리 및 기타 필수 기능을 활성화하는 작업이 포함된다. 싱글톤 패턴 구현 ensureInitialized() 는 앱의 수명 주기 동안 WidgetsFlutterBinding 인스턴스가 한 번만 생성되고 초기화되도록 한다. 동작 방식 바인딩 여부 확인 바인딩이..

    안드로이드 스튜디오 에뮬레이터 인식 안됨 (Device emulator-5554 is offline) 문제 해결

    증상 Flutter 앱을 실행시키려 했는데, 에뮬레이터가 켜져있음에도 에뮬레이터를 인식하지 못했다. 윈도우즈 CMD 를 열어 flutter doctor 명령어를 치니 Connected device (3 available) 아래에 'Device emulator-5554 is offline.' 이라는 메세지가 보였다. 해결 에뮬레이터와 안드로이드 스튜디오를 껐다가 다시 켰다. Device Manager 탭의 에뮬레이터 Actions 에서 Wipe data 를 실행했다. 작업이 완료된 후에 에뮬레이터를 다시 켜니 정상적으로 연결됐다. flutter doctor 에서 이제는 에뮬레이터 오프라인 메세지가 보이지 않는다. 레퍼런스 https://coding-dahee.tistory.com/199 그래..

    플러터 (Flutter) A value of type 'Null' can't be assigned to parameter of type 'double' in a const constructor 에러

    A value of type 'Null' can't be assigned to parameter of type 'double' in a const constructor 에러 원인 const 로 지정된 위젯에 null 이 될 수 있는 값을 넣어서 그렇다. const 에는 정해진 상수만 넣어야 한다. 에러 해결 위젯 앞의 const 를 지우면 된다. padding: const EdgeInsets.only(left: 8, right: 8, top: 8, bottom: bottomInset), padding: EdgeInsets.only(left: 8, right: 8, top: 8, bottom: bottomInset),

    플러터(Flutter) 의 MediaQuery 클래스란?

    플러터의 MediaQuery 클래스란? 화면 크기 등 디바이스 미디어에 대한 정보를 제공한다. 제공하는 것들 장치 정보: 디바이스의 픽셀 비율, 밝기, 방향 등 현재 미디어의 크기에 대한 데이터를 제공한다. 접근성 (Accessibility): 사용자가 커스텀하게 설정한 접근성에 대한 정보를 제공한다. 안전 영역 (Safe Area): 화면 노치나 둥근 모서리 등에 가려지는 부분에 대한 데이터를 제공한다. 성능 주의사항 깊은 위젯 트리에서 과도하게 사용하면 성능 문제가 발생할 수 있다. 위젯 트리의 맨 위에서 사용하는 것이 좋다. 용례 키보드 영역 높이 가져오기 화면 사이즈 측정 반응형 패딩 방향별 레이아웃 안전 영역 계산 공식 문서 MediaQuery class 예제 코드들 화면 사이즈 측정 @over..

    플러터(Flutter) proxy_box.dart Failed assertions: 'hasSize': is not true. 에러 해결하기

    에러 내용 'package:flutter/src/rendering/proxy_box.dart': Failed assertion: line 1971 pos 12: 'hasSize': is not true.원인 계산할 수 없는 Intirinsic 사이즈가 존재할 때 발생한다. Intrinsic 사이즈란? 간단하게 위젯이 컨텐츠를 넘치지 않게 렌더링하는데 필요한 최소 높이와 너비를 말한다. 보통 자식의 너비의 총 합이다. 이를테면 자식 너비나 높이가 디바이스 크기를 초과하는데 스크롤이 없다면? 위와 같은 에러가 나온다. 혹은 너비나 높이가 무한대인 자식이 2개가 있다면 나온다. 해결 방법 Column 이나 Row 위젯에 가로나 세로 사이즈를 이미 꽉채운 상태에서 더 채우지는 않았나..

    플러터(Flutter) 의 IntrinsicHeight 와 IntrinsicWidth 위젯이란?

    IntrinsicHeight 와 IntrinsicWidth 란? Intrinsic 이란? 사전적 정의로는 '고유의' 라는 뜻 Flutter 가 말하는 Intrinsic 이란? 위젯이 콘텐츠를 넘치지 않게 렌더링하는데 필요한 최소 높이와 너비를 말함 장점 IntrinsicHeight 위젯으로 자식을 감싸면, 따로 계산할 필요 없이 자식의 최대 높이로 위젯이 설정된다. 단점 IntrinsicHeight, IntrinsicWidth 는 내부적으로 자식 위젯의 고유 사이즈를 측정하는 것이므로 성능 문제가 발생할 수 있음 플러터 공식문서에 따르면 O(n^2) 의 복잡도까지 가능하다고 함 공식문서 Intrinsic class

    플러터(Flutter) 의 RefreshIndicator 란?

    RefreshIndicator 리스트에서 스크롤을 위로 쭉 올리거나 밑으로 쭉 내린 다음에 새로고침 되게 만들 수 있는 위젯 보통 내부에 있는 onRefresh 속성의 콜백함수에서 Future 를 반환하여 데이터를 새로고침한다. 단, Future 를 반환하고, 콜백 함수 내부에서 setState() 를 호출하는 방식도 가능하다. 다양한 속성으로 로딩될 때 사용되는 spinner 의 스타일을 조정할 수 있다. 스타일엔 edgeOffset(시작 위치), displacement(위치), strokeWidth, color, backgroundColor 등이 있다. 예제 코드 class _HomeScreenState extends State { @override Widget build(BuildContext co..

반응형