목록flutter (16)
HIT해
Lazy Loading ( 지연 로딩 )필요한 시점에 데이터를 불러오거나 객체를 생성하여 메모리와 자원을 효율적으로 사용하는 기법즉, 한꺼번에 모든 데이터를 미리 준비하지 않고, 사용자가 필요로 할 때마다 점진적으로 처리하는 방식 특징무거운 작업이나 데이터 로딩을 필요할 때만 수행초기 로드 시간을 줄이고 메모리 사용을 최소화스크롤이나 UI 인터랙션, 페이지네이션에 따라 점진적으로 데이터 또는 UI를 생성 ListView로 확인해보자ListView( children: [ ListTile(title: Text('Item 1')), ListTile(title: Text('Item 2')), ListTile(title: Text('Item 3')), // 모든 아이템들을 한꺼번에 생성 ..
플러터에는 3가지 트리가 있습니다.1. Widget Tree2. Element Tree3. RenderObject Tree Flutter는 위젯을 사용해 UI를 선언하고, 위젯들은 빈번하게 재생성되는데만약 화면을 하나의 트리만으로 관리한다면, 부모 위젯의 변화는 모든 자식까지 불필요하게 빌드 및 렌더링을 하게돼성능 저하가 발생합니다 > 한 가지 트리를 여러 레이어로 나누어 해결한다 Widget Tree설계도는 언제든 새로 그려도 부담이 없듯, 단순히 "UI가 어떻게 보여야 하는지"를 정의한다불변 오브젝트UI의 설계도생성과 파기 비용이 매우 적어 자주 바뀌어도 부담이 없다상태를 직접 가지지 않음변경시 새 Widget Instance를 만들어 Element에게 전달Element Tree가변 오브젝트Widge..
retrofit | Dart package retrofit | Dart packageretrofit.dart is an dio client generator using source_gen and inspired by Chopper and Retrofit.pub.dev pubspec.yamldependencies: retrofit: '>=4.0.0 =7.0.0 =2.19 build_runner: '>=2.3.0 json_serializable과 함께 사용하면 좋다는 것을 알 수 있다,기존의 Json 통신구조를 살펴보자.Future함수를 통해 http통신을 진행해 변환되지않은 JSON코드 받아오기JSON코드를 모델에 담아 직렬화직렬화된 JSON을 FutureBuilder에 담아 실행.FuterBuilde..
json_serializable | Dart packagejson serializable 은 json 직렬화 역직렬화 도구입니다. 자동 코드 생성:json_serializable을 사용하면 JSON 직렬화/역직렬화를 위한 boilerplate 코드를 자동으로 생성할 수 있습니다.이를 통해 개발자가 직접 fromJson(), toJson() 메서드를 작성할 필요가 없어집니다. 간편한 사용:클래스에 @JsonSerializable() 어노테이션을 추가하면 json_serializable이 자동으로 필요한 코드를 생성합니다. 이를 통해 JSON 처리 로직을 쉽게 구현할 수 있습니다. 유연한 설정:JsonSerializable 어노테이션에는 다양한 옵션을 설정할 수 있습니다. 예를 들어 필드 이름 매핑, 기본..
의존성 주입(Dependency Injection, DI)이란?의존성 주입은 객체지향 프로그래밍에서 자주 사용되는 소프트웨어 디자인 패턴 중 하나로, 객체가 필요로 하는 의존성을 외부에서 주입받는 방법을 의미한다. 이를 통해 코드의 결합도를 낮추고, 테스트와 유지보수가 용이해지는 장점이 있다.의존성 주입의 개념의존성(Dependency): 객체가 정상적으로 동작하기 위해 필요한 외부 객체나 자원을 의미한다. 예를 들어, 클래스 A가 클래스 B의 기능을 사용해야 한다면, 클래스 A는 클래스 B에 의존하고 있다고 할 수 있다.주입(Injection): 의존성을 외부에서 제공하는 행위다. 객체가 필요한 의존성을 직접 생성하지 않고, 외부에서 주입받음으로써 코드의 유연성을 높일 수 있다.의존성 주입의 장점결합도..
1. 내 애플리케이션 > 앱설정 > 플랫폼Android 패키지명, 키해시 설정2. 내 애플리케이션 > 앱설정 > 앱키네이티브 앱 키, REST API 키 복사 후import 'package:flutter/material.dart';import 'package:flutter_riverpod/flutter_riverpod.dart';import 'package:flutter/services.dart'; // SystemChrome을 사용하기 위해 필요import 'package:kakao_flutter_sdk_user/kakao_flutter_sdk_user.dart';import 'common/view/splash_screen.dart'; // SplashScreen의 경로에 따라 수정해주세요.void m..
백엔드와 통신으로 값을 받고 그 값들중에서 키값이 일치하는 값들만 받아서 저장해야하는 상황이 있었다. 내가 해결한 방식은 저장된 값의 길이만큼 반복문을 돌고 해당하는 키값을 배열에 저장하는 방식으로 해결했다. 해결방식 var pushData = context.watch().pushData; var matchedData = []; for (var i = 0; i < pushData.length; i++) { if (pushData[i].containsKey(ownPillId.toString())) { matchedData.add(pushData[i][ownPillId.toString()]); } } pushData에는 전체 값이 들어가있고 matchedData에는 빈 배열이 들어가있다. pushData가 ..
setState는 호출하면 해당 StatefulWidget과 하위 위젯들이 변경되고 watch 메서드는 ChageNorifier 상태 변화를 감지하고 호출 위치부터 하위의 모든 위젯들이 재빌드 됩니다. 그리고 두가지 모두 하위에 변화가 없는 위젯이 있다면 변화없는 위젯들은 재빌드되지 않습니다. Flutter는 효율적인 렌더링을 위해 위젯 트리를 비교해 실제 변화가 있는 위젯만을 재빌드하기 때문이죠. 별다른 차이가 없어보이는데 공통된 부분이 있는데 어째서 공존하는걸까? 사용 방법과 동작 방식에 차이가 존재한다. setState는 새로운 상태를 설정하고, 그 후 Flutter 프레임워크에게 위젯의 build 메서드를 다시 호출하도록 요청합니다. 따라서 setState를 호출하는 것은 상태가 변경되었음을 Fl..