개발/Flutter

개발/Flutter

compileSdkVersion minSdkVersion targetSdkVersion 값과 정의된 위치

참고 글을 보던 중 flutter.gradle이란게 있는 것을 알게 되었고 혹시나해서 이를 검색해봤더니 flutter sdk 내에 있었다. 열어보니 바로 해당 값을 찾을 수 있었다. 위와 같이 정의되어 있는 것을 볼 수 있다. flutter sdk 폴더 이름이 flutter인 경우 경로는 아래와 같다. flutter/packages/flutter_tools/gradle/flutter.gradle 지금부턴 해당 파일에서 값들을 어떻게 가져오는지를 분석 및 파악한다. flutter.~~~를 사용하는 블록 이전에 apply를 통해 아까 compileSdkVersion, minSdkVersion 등이 정의된 gradle 파일을 불러오게 되어있다. 아까 flutter.gradle에서 cimpileSdkVersio..

개발/Flutter

다중 네비게이터 사용 시의 modal_bottom_sheet 문제

root가 아닌 자식에서 modal_bottom_sheet을 1 개의 네비게이터 사용하듯이 열면 아래 이미지와 같은 문제가 발생한다. 이를 해결하기 위해선 root 네비게이터를 쓰도록 해야한다. 일반적인 dialog처럼 modal_bottom_sheet에도 적용 가능하므로 아래와 같이 한 줄 추가하면 해결된다. 아래와 같이 하위 네비게이터가 아닌 root 네비게이터에서 modal 창이 나온다.

개발/Flutter

TextField 위젯의 높이가 남은 공간 모두 차지하도록 설정

맨 마지막 TextField 위젯의 expands를 true, maxLines를 null로 주고 Expanded 위젯으로 감싸 남은 공간을 모두 차지하도록 설정 추가적으로 마지막 TextField의 hintText가 가운데로 정렬되는데 TextField 내에 아래 코드를 적용시키면 왼쪽 위에 나오게 됨 textAlignVertical: TextAlignVertical(y: -1)

개발/Flutter

화면 눌러 focus 해제

GestureDetector( onTap: () => FocusScope.of(context).unfocus(), child: ... ); 위 방식으로 설정하여 child 내의 위젯 중 focus를 가지고 있는 상태에서 focus대상이 아닌 곳을 누르면 해제

개발/Flutter

status bar color 변경

import 'package:flutter/services.dart'; SystemChrome.setSystemUIOverlayStyle( const SystemUiOverlayStyle( statusBarColor: Colors.blue, statusBarIconBrightness: Brightness.light, statusBarBrightness: Brightness.light, ), ); brightness는 아이콘의 색상을 light(흰색), dark(검은색) 중에서 설정하는 것 statusBarIconBrightness는 android의 status bar icon의 색상 결정 statusBarBrightness는 iOS의 status bar icon의 색상 결정(안먹히는 것으로 보임, 더 테..

개발/Flutter

[Error][Firebase] This operation is sensitive and requires recent authentication.

문제점 아래 코드로 firebase의 계정을 삭제할 때 발생했다. await FirebaseAuth.instance.currentUser?.delete(); 해결방법 계정 삭제와 같은 민감한 작업엔 계정 재인증이 필요해 발생하는 문제이므로 재인증하면 된다. await FirebaseAuth.instance.currentUser?.reauthenticateWithCredential(각 플랫폼의 OAuthCredential);

개발/Flutter

[Error] CocoaPods could not find compatible versions for pod

문제점 ios에서 다른 패키지와 버전이 맞지 않아 발생 해결방법 pod update # not m1 mac arch -x86_64 pod update # for m1 mac pod install 참고 CocoaPods could not find compatible versions for pod "Firebase/CoreOnly" I've update my flutter package to the last versions and now IOS doesn't work anymore. When I try to update the pods it's shows this error: [!] CocoaPods could not find compatible versions for... stackoverflow.com

개발/Flutter

[Error][firebase] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)

Error: Required named parameter 'auth' must be provided. 위 문제도 이 해결방법과 똑같이 해결함 문제점 firebase 관련된 패키지들의 버전이 호환되지 않아 발생한 것으로 보임 해결방법 firebase 관련 패키지들의 버전 최신화 flutter pub upgrade 설치된firebase패키지이름 최신화만 해선 동작하지 않으면 아래 방법 하나씩 해보기 flutter clean 실행 후 flutter pub get 실행 flutterfire configure로 firebase_options파일 재생성 참고 [Solved] Unhandled Exception: PlatformException(channel-error, Unable to establish conne..

개발/Flutter

[Error] setState() or markNeedsBuild() called during build

문제점 위젯의 lifecycle이 build 중인 상태에서 setState를 호출해서 발생 내 경우엔 builder에서 setState를 호출해서 발생했다. 더 정확한 원인을 알아보기 위해 디버그 모드로 살펴봤다. setState 내부 코드를 들어가보면 많은 assert문을 지나 markNeedsBuild를 호출한다. markNeedsBuild 내부 중에선 _debugIsInScope함수에서 false가 반환되어 호출된 if문 아래의 _debugAllowIgnoredCallsToMarkNeedsBuild는 false로 되어있어 ! 연산자로 인해 true가 되어 해당 if문의 내부에서 최종적으로 에러가 발생한다. 이제 에러를 발생시키는 아래의 _debugIsInScope 코드를 보면서 에러가 발생하는 상..

개발/Flutter

[Error] dependOnInheritedWidgetOfExactType<MediaQuery>() or dependOnInheritedElement() was called before initState() completed.

문제점 MediaQuery.of(context)를 initState함수 내에서 사용해서 발생했다. MediaQuery는 InheritedWidget을 상속받는 클래스이다. of로 context를 통해서 MediaQuery를 가져오는 역할을 수행하는 dependOnInheritedWidgetOfExactType함수를 시작으로 발생한 것이다. 내부 코드 주석에 적힌 설명에 따르면 생성자나 initState함수는 InheritedWidget의 값이 변해도 다시 호출되지 않기에 이곳에선 호출되지 않아야 한다고 한다. 디버깅으로 정확히 발생한 곳을 찾으니 StatefulElement클래스 내의 dependOnInheritedElement함수에서 발생했다. lifecycle이 created일 때(initState함..

leebera_
'개발/Flutter' 카테고리의 글 목록