본문 바로가기

Flutter

(10)
Riverpod : 리버팟 Provider를 사용하려면 먼저 전체 앱을 ProviderScope로 감싸줘야 한다. void main() { runApp( ProviderScope( // ProviderScope로 감싸줘야 한다 child: MyApp(), ), ); } provider 에서 관리되는 데이터를 읽기 위해 필요한 것 ConsumerWidget WidgetRef ref.watch : UI관련 코드에만 사용할것. provider 값이 변경되면 build 함수를 다시 실행시켜줌. ref.read : 실행순간 단 1번만 provider 값을 가져온다.(단발성) // 사용할 Provider final valueProvider = Provider((ref) { return 0; }); // Stateless --> Comsume..
빈 화면 터치. 키보드(자판) 숨기기 GestureDetector( onTap: () { // 키보드 올라왔을때, 빈곳 터치시 내려가게 설정 FocusScope.of(context).requestFocus(FocusNode()); print('touch'); }, child: // 하위 위젯 부분 Container( child: ?? // 위젯 ) ) GestureDetector로 감싼뒤에 // 키보드 올라왔을때, 빈곳 터치시 내려가게 설정 FocusScope.of(context).requestFocus(FocusNode()); 해당 코드를 적용하면 된다. 그런데 간혹, 코드를 적용했는데도 안되는 경우가 있는데, 하위 부분이 Container 일 경우, color 속성을 적용 후, 코드를 다시 실행시켜 확인해 보길 바랍니다. # 왜 colo..
[GoRouter] Go vs Push GoRouter는 Flutter의 선언적 라우팅에 널리 사용되는 패키지입니다. Navigator 2.0 API를 기반으로 하며, 사용하기 쉬운 API를 바탕으로 딥 링크 및 기타 일반적인 탐색 시나리오를 지원합니다. GoRouter를 사용할 때는 두 가지 별도의 옵션이 있습니다. go push GoRouter 를 사용한 선언적 Routing 두 개의 하위 경로가 있는 하나의 상위 경로로 구성된 간단한 경로 계층 구조 GoRouter( initialLocation: '/', routes: [ // top-level route GoRoute( path: '/', builder: (context, state) => const HomeScreen(), routes: [ // one sub-route GoRout..
싱글턴 패턴 Singleton Pattern 상세 내용은 생략하고, 핵심만 간단히 남긴다. class Singleton { // 1. Private한 생성자 생성 (빈생성자 생성) /// Dart에선 생성자가 없을경우 자동으로 Public한 생성자를 만들어 버린다. /// 이를 막기위해 Private한 생성자를 만들어줘서 자동으로 만들어주는 생성자가 생성 되지 않도록 방지하는 것. Singleton._privateConstructor(); // 2. 생성자를 호출 /// 생성자를 호출하고 반환된 Singleton 인스턴스를 _instance 변수에 할당 static final Singleton _instance = Singleton._privateConstructor(); // Singleton() 호출시에 _instance 변수를 반환 facto..
Dart : isolate 일반적인 프로그래밍 언어는 순차적으로 코드 실행한다. 그렇게 코드를 실행 중에 처리시간이 긴 작업(특히 UI와 관련된 상황 or 서버통신)을 만나면 프로그램이 기다리는 것처럼 느낄 수도 있다. 이러한 상황을 해결하기 위해, 요청한 작업의 결과를 기다리지 않고 바로 다음 작업으로 넘어감(비동기)으로써 프로그램의 실행을 기다리지 않게끔 한다. 이러한 문제 해결 방식을 비동기 프로그래밍(Asynchronous programming)이라고 한다. ⇒ 보통 Sub Thread(서브 쓰레드)를 생성해서 작업을 할당하는 것을 비동기 프로그래밍 이라고 한다. 안드로이드 Kotlin 개발에서는 Coroutine 을 통해 비동기 프로그래밍 하기를 구글 Jetpack에서 적극 권장하고, Flutter는 Future, Str..
Unit Test 테스트 3종류 Unit 테스트 UI Widget 테스트 Intergation 테스트 (통합 테스트) Unit Test 메소드나 클래스처럼 작은 단위를 테스트할 때 쓰입니다.(내부테스트) Http 통신 IO , DB 접근하여 데이터 가져오는 행위를 테스트(외부테스트) : Mockito 테스트 프레임워크 사용 Mockito 테스트 프레임워크 https://flutter-ko.dev/docs/cookbook/testing/unit/mocking Mockito를 사용하여 의존성들에 대해 mock 객체 생성하기 어떠한 경우에는 단위 테스트가 웹 서비스나 데이터베이스로부터 데이터를 가져오는 역할을수행하는 특정 클래스에 의존하는 경우가 있습니다. 이럴 때는 다음과 같은 이유로 인해 테스트가 flutter-ko.dev..
gskinner gskinner 는 회사명이며, 글로벌 협업 및 디자인 and 개발 회사 이다. Flutter 2021 conference 를 통해 알게 되었고, Flutter x gskinner 콜라보레이션 소개 내용을 보고 감명깊게 보고 포스팅으로 소개하고자 한다. https://gskinner.com/ gskinner gskinner.com https://flutter.gskinner.com/ gskinner: leaders in Flutter design and development Flutter empowers us to build robust, beautiful apps that run on mobile, desktop & the web for clients including Google, Adobe & sm..
플러터에서 자주 쓰이는 Dart 언어 특징들 계속 쓰면서 업데이트 할 예정 변수 다트언어는 형변환을 지원하지 않는다. num 타입에는 int ,double 타입 모두 대입할수 있다. var : 한번 데이터를 할당하면 데이터 변경이나 다른 형태의 변수로 바꿀수도 없다. Dynamic : 데이터 변경도 자유롭고, int 타입이 었다가 String 타입으로도 변환이 쉽다. final , const 1. 비교 차이점 코드 실행의 결과로 인해 결정되는 상수 : final 코드 실행 이전부터 결정되어야 하는 상수 const ⇒ DateTime.now() 과 같이 실행의 결과로 나오는 값 불가 공통점 둘 다 "상수"이다. 2. 선언 방법 final String a = "final"; const String b = "const"; final 이든 const 든 ..