본문 바로가기

프로그래밍/Flutter38

[Flutter] FCM 기능 추가 Flutter 환경에서의 Firebases는 상대적으로 쉽게 설정이 가능하다. FlutterFire CLI에서 기본적인 설정을 다 해주기 때문이다. 따로 패키지명 가지고 Firebase Console에 등록할 필요도 없다. (프로젝트는 추가해야 한다) 1. FlutterFire 설정 npm을 이용하여 설치하고 firebase 로그인, cli 활성화 과정을 거친다. dart pub global activate flutterfire_cli flutterfire configure - 안 되면 에러메시지 보고 환경변수 추가 여기까지 하면 lib 파일쪽에 firebase_options 파일이 추가되고, android, ios 쪽에 google-service 파일도 자동으로 추가 된다. 참고: https://fir.. 2023. 10. 23.
[Flutter] Missing Push Notification Entitlement 앱 내부에서 푸시 알림 기능을 사용하지 않더라도, 푸시 알림이 허용된 상황을 가정하여 iOS 스위즐링을 처리하고 있는 플러그인이 존재한다. https://github.com/flutter/flutter/issues/9984#issuecomment-1664282440 앱 내에서 사용하지 않더라도, 푸시 알림 설정만 변경해주면 해결할 수 있다. To not receiving this email anymore, you can workaround by enabling publish notification in your App. (You don't have to implement any publish notification features, just simply enable the feature and capab.. 2023. 10. 22.
[Flutter] Git Repository 생성(협업 과정 고려) 1. 로컬 레포지토리 생성(깃허브 데스크탑 사용) 깃허브 데스크탑의 상단에 File, new Repository를 누른다. 이름, 설명, 경로, ignore 파일(Dart), 라이센스를 입력하고 생성한다. 2. gitignore 파일 수정 Android Studio flutter 기본 gitignore 파일에서 *.iml 파일만 제외한 것이다. 3. 누락 파일 추가(iml, 설정 파일 등) 루트폴더에 .idea 파일이 ignore처리 되어 있는지 확인한다. 루트 폴더에 iml 파일이 누락되어 있을텐데 추가한다. 안드로이드 폴더에 iml 파일도 같이 확인해준다. (Private 저장소에서만 처리) 안드로이드 jks파일, key.properties 파일 추가 4. 로컬 레포지토리 Publish Github .. 2023. 10. 7.
[Flutter] 프로젝트 구성 변경 정리(패키지명, 앱 이름 등) 테스트 코드를 작성한 이후에 프로젝트 구성을 변경하여 그대로 프로젝트를 가져가고 싶은 경우에 참고하면 된다. 공통사항 안드로이드, iOS 앱 이름은 일단 영어로 잡고 나중에 Localization 하는 것을 추천한다. (iOS에서는 한글로 넣으면 오류난다고 함) 수정한 이후에 Android, iOS부분에서 패키지명, 앱 이름 등이 정상적으로 나오는지 확인한다. 변경 사항 1. 루트 프로젝트 폴더 이름 2. flutter 부분 - 패키지명 수정 pubspec.yaml name:** 수정( 프로젝트명 같은 상징적인 의미로 잡자 ) - 참조 패키지 모두 수정 package:name/~.dart 3. 안드로이드 부분(Manifest) - 안드로이드 패키지명(applicationId) - 안드로이드 폴더 경로(c.. 2023. 10. 6.
[Flutter] 스크롤뷰 하단부터 위젯 배치 CustomScrollView( slivers: [ SliverFillRemaining( hasScrollBody: false, child: Column( children: [ const Text('Header'), Expanded(child: Container(color: Colors.red)), const Text('Footer'), ], ), ), ], ) SingleChildScrollView를 사용하고 내부에 Expanded위젯을 사용하는 경우에는 스크롤뷰의 크기가 정해져 있어야 사용할 수 있다. 그래서 SizedBox위젯을 사용하여 사이즈 설정 후에 사용하는 경우도 있는데, 문제는 이러면 내부 영역이 고정되어 버린다. 이러한 경우에 CustomScrollView를 사용하여 스크롤뷰 내부에서도 .. 2022. 11. 4.
[Flutter] Visibility와 Opacity 차이 Visibility의 경우에는 해당 위젯이 눈에 보이는지 아예 보이지 않는지에 대한 처리를 한다. (영역을 차지하지 않는다.) Opacity의 경우에는 해당 위젯이 얼만큼 보이는지 opacity값을 조절한다. (영역을 차지한다.) Visibility(visible: true, child: Container()) Opacity(opacity: 1, child: Container()) Flutter로 개발함에 있어서 위의 내용만 이해를 한다면 클릭 이벤트에서 문제가 생길 여지가 있다. 특정 물체에 클릭 이벤트를 주고 싶은 경우에 GestureDetector를 이용하는데, Visibility로 감싼 위젯의 경우에는 false 상태에서 이벤트를 받지 않지만, Opacity로 감싼 위젯의 경우에는 opacity .. 2022. 11. 4.
[Flutter] Flavor 처리(New Version) Flutter Flavor 처리(Old version) https://kymworld.tistory.com/70 Flavor 처리를 적용하다 Flutter에서 Flavor 시스템을 구축하는 방법에 대해서 조사를 했고 실제로 Android에서는 Flavor, IOS에서는 scheme 정보를 추가하여 flutter의 --flavor 명령어를 사용하여 정상적으로 동작하는 것을 확인했습니다. 이러한 방식은 다음 블로그의 내용을 참고하여 작업을 했으며 BuildConfig에 대한 다트 코드 및 main문에 대한 분기 처리를 제외하고는 동일한 방식으로 개발이 되었습니다. Flavor를 통한 빌드 변형 — PART#1 (안드로이드 사이드) Flavor를 통한 빌드 변형 — PART#2 (iOS 사이드) Flavor를.. 2022. 6. 20.
[Flutter] Provider 성능 최적화 Flutter의 provider라는 패키지를 사용하여 프로그램을 개발하고 있었는데, 어플 실행시 CPU점유율이 너무 높고 발열이 심한 이슈가 있어서 성능 최적화 작업을 진행하게 되었습니다. 개발과정에서도 어플이 느리긴 했는데 디버그 모드 생각해서 크게 이슈라고 생각하지 않았다가 릴리즈 모드에서 성능이 너무 안 좋아서.... ㅠ 개선 방향성 - 모든 화면에 대한 build함수 호출을 줄이는 방향 - rebuild가 필요하더라도 최소한의 리소스를 사용하는 방향(캐싱) Android Native 앱을 프로파일링 했을 때 CPU점유율이 어느 정도 되는지 비교하고 비슷한 수준으로 맞추거나 더 빠르게 만드는 것을 목표로 하고 개선 작업을 진행했습니다. 테스트 내역(Native 수준으로 빨라질 수 있는가?) 더보기 .. 2022. 6. 12.
[Flutter] 화면 전환 애니메이션 추가(Screen, Dialog) MaterialPageRoute를 상속받아서 처리하는 방식으로 했다. 밑에 buldTransitions를 override해서 slide 애니메이션을 적용한다. (위 아래) my_page_route.dart import 'package:flutter/material.dart'; SlideTransition getSlideTransition(Animation animation, Widget child) { final tween = Tween(begin: const Offset(0.0, 1.0), end: Offset.zero); final offsetAnimation = animation.drive(tween); return SlideTransition( position: offsetAnimation, ch.. 2022. 6. 2.
[Flutter] ScrollToWidget Flutter 개발을 하다보면 특정 위젯의 위치로 Scroll을 하고 싶은 순간이 있다. 이럴 때 다음과 같이 사용을 할 수 있는데 특정 키를 가진 widget을 보이도록 하는 것이다. Scrollable.ensureVisible(key.currentContext!, duration: const Duration(milliseconds: 200), curve: Curves.ease); 예를 들어 스크롤을 해서 내가 원하는 위젯이 중간에 있도록 하고 싶다면, 그 상단에 있는 위젯에 GlobalKey를 주고 해당 키를 이용하여 함수를 호출하면 된다. final scrollKey = GlobalKey(); Container( key: scrollKey, child: null ), 2022. 6. 1.