시작하기 전에...
pub.dev의 각 package 마다 Repository가 모두 존재하는데, 해당 Repository를 fork 해서 수정한 다음 직접 수정한 git repository를 pubsepc.yaml의 git url로 지정해서 사용하는 방법을 소개합니다.
일부 단계를 제외하고 기존 프로젝트를 마이그레이션 하는 방법과 동일하기때문에 순서대로 따라해주시면 간단하게 적용 합니다.
Null Safety 적용할 package 다운로드 받기
- 샘플로 적용해볼 flutter_coupang_ad 0.1.0를 pub.dev에서 찾아봅니다.
- 우측 메뉴중 Repository (GitHub)을 눌러 해당 Repo로 이동합니다.
- GitHub에서 Fork를 눌러 개인 Repo에 Fork 합니다.
- fork된 Repo Clone 합니다.
Android Studio 기준
- File → New → Project from Version Control... 클릭
- Fork 한 Repo Clone
아래 2가지 방법중 편하신 방법으로 진행하시면 됩니다.
- Repo url 입력 후 Clone
- GitHub 계정이 연동된 경우 해당 Repo 선택 후 Clone
flutter SDK Upgrade
- flutter SDK version 확인
> flutter --version Flutter 2.0.6 • channel stable • https://github.com/flutter/flutter.git Framework • revision 1d9032c7e1 (2 weeks ago) • 2021-04-29 17:37:58 -0700 Engine • revision 05e680e202 Tools • Dart 2.12.3
- flutter channel 확인
> flutter channel Flutter channels: master dev beta * stable
- stable이 아니라면 channel 변경
> flutter channel stable
- SDK 업그레이드
> flutter upgrade Checking Dart SDK version... Downloading Dart SDK from Flutter engine 05e680e202af9a92461070cb2d9982acad46c83c... Building flutter tool... Running pub upgrade... Flutter is already up to date on channel stable Flutter 2.0.6 • channel stable • [https://github.com/flutter/flutter.git](https://github.com/flutter/flutter.git) Framework • revision 1d9032c7e1 (2 weeks ago) • 2021-04-29 17:37:58 -0700 Engine • revision 05e680e202 Tools • Dart 2.12.3
- flutter SDK 버전 재확인
> flutter --version Flutter 2.0.6 • channel stable • https://github.com/flutter/flutter.git Framework • revision 1d9032c7e1 (2 weeks ago) • 2021-04-29 17:37:58 -0700 Engine • revision 05e680e202 Tools • Dart 2.12.3
Migration
외부 의존성 업그레이드 (pubspec.yaml)
- null safety 적용 안된 의존성 체크
> dart pub outdated --mode=null-safety Resolving... Showing dependencies that are currently not opted in to null-safety. [✗] indicates versions without null safety support. [✓] indicates versions opting in to null safety. Computing null safety support... All your dependencies declare support for null-safety.
coupang_ad 0.1.0에서는 null safety를 지원하는 의존성만 존재합니다. (사실 외부 의존성 lib 이 없었어요...)
null safety를 지원하지 않는 의존성이 존재하는 경우 아래와 같은 메세지가 표시됩니다.
> dart pub outdated --mode=null-safety Resolving... Showing dependencies that are currently not opted in to null-safety. [✗] indicates versions without null safety support. [✓] indicates versions opting in to null safety. Computing null safety support... Package Name Current Upgradable Resolvable Latest direct dependencies: flutter_plugin_android_lifecycle ✗1.0.7 ✗1.0.11 ✓2.0.1 ✓2.0.1 plugin_platform_interface ✗1.0.2 ✗1.0.3 ✓2.0.0 ✓2.0.0 stream_transform ✗1.2.0 ✗1.2.0 ✓2.0.0 ✓2.0.0 2 upgradable dependencies are locked (in pubspec.lock) to older versions. To update these dependencies, use `dart pub upgrade`. 3 dependencies are constrained to versions that are older than a resolvable version. To update these dependencies, edit pubspec.yaml, or run `dart pub upgrade --null-safety`.
- 의존성 null safety 적용된 버전으로 업그레이드
dart pub outdated --mode=null-safety
명령 수행 후 표시되는 내용을 수행해주시면 됩니다.의존성에
Resolvable
버전이 명시되어 있다면 아래 2가지 방법 중 하나를 선택하여 처리 합니다.- 각 의존성을 해당 버전으로 업그레이드
dart pub upgrade --null-safety
명령으로 일괄 처리
두가지 방법 모두 pubspec.yaml 파일의 해당 의존성 버전을
Resolvable
로 변경하는 작업입니다.> dart pub upgrade --null-safety Changed 5 dependencies! 3 packages have newer versions incompatible with dependency constraints. Try `dart pub outdated` for more information. Changed 4 constraints in pubspec.yaml: meta: ^1.0.5 -> ^1.3.0 flutter_plugin_android_lifecycle: ^1.0.7 -> ^2.0.1 plugin_platform_interface: ^1.0.1 -> ^2.0.0 stream_transform: ^1.2.0 -> ^2.0.0
- 정상처리 되었는지 다시확인
> dart pub outdated --mode=null-safety Resolving... Showing dependencies that are currently not opted in to null-safety. [✗] indicates versions without null safety support. [✓] indicates versions opting in to null safety. Computing null safety support... All your dependencies declare support for null-safety.
마지막 2라인의 메세지가 위와같이 표시된다면 의존성 업그레이드 작업은 완료 입니다.
- 만약 null safety 버전이 적용 된 버전이 없는 경우...
null safety 적용되도록 직접 마이그레이션을 해주시거나,
(현재 방법을 재귀호출??)해결이 불가능 한경우 실행 및 빌드 시
--no-sound-null-safety
옵션을 추가하여 null safety 적용 안된 소스와 같이 사용 할 수도 있습니다.
프로젝트 마이그레이션
- 마이그레이션 명령 실행
> dart migrate Migrating C:\project\flutter\flutter-coupang_ad See https://dart.dev/go/null-safety-migration for a migration guide. Note: more than one project found; migrating the top-level project. Analyzing project... [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\] No analysis issues found. Generating migration suggestions... [------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] Compiling instrumentation information... [------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] View the migration suggestions by visiting: http://127.0.0.1:6105/C:/project/flutter/flutter-coupang_ad?authToken=Gle7ozKMfnY%3D Use this interactive web view to review, improve, or apply the results. When finished with the preview, hit ctrl-c to terminate this process. If you make edits outside of the web view (in your IDE), use the 'Rerun from sources' action.
- 마이그레이션 추천 소스 확인
콘솔에 표시되는 내용 중 URL 주소가 나오는데, 해당 주소로 접속하여 migration suggestion을 확인합니다.
null
가능성이 있는 변수에?
를 추가하거나,@required
를required
로 변경되는 내용이 주로 나왔습니다.특이 사항이 없는 것 같아
APPLY MIGRATION
으로 migration을 진행합니다.
- 최종 적용
Applying migration suggestions to disk... Migrated 4 files: lib\flutter_coupang_ad.dart test\flutter_coupang_ad_test.dart pubspec.yaml .dart_tool\package_config.json
APPLY MIGRATION
클릭 후 콘솔에 위와 같이 변경된 파일명이 표시되며 migration 작업은 완료됩니다. (해당 package의 소스 규모가 작아 별문제 없이 진행되었지만, 실제 프로젝트에서는 많은 수정내용이 나올 수 있습니다.)
변경한 소스를 의존성으로 사용하기
null safety 적용이 성공적으로 완료 되었다면, 개인 Repo에 Push 하고, 해당 Repo 주소를 pubspec.yaml
에 입력하여 pub.dev의 package 대신 사용합니다.
- AS-IS
dependencies: flutter_coupang_ad: ^0.1.0
- TO-BE
dependencies: flutter_coupang_ad: git: url: https://github.com/empering/flutter-coupang_ad # 본인이 수정해서 push한 Repo 주소
끝!!
flutter 2.0 가 출시 된 후 시간이 조금 지난 상태라 많인 package에서 null safety를 지원 하고 있습니다. 하지만 국내에서 사용되는 package라던지 사용량이 적은 package의 경우에는 빠른 업데이트가 되고 있지 않는 것 같습니다. 아쉬운대로 기존 package를 null safety migration 하여 사용하면 어찌저찌 대처는 되지만 아쉬운 감은 여전하네요..
(물론 migration 해서 pull request를 보내서 배포가 되면 더 좋겠지만..으흠...)
'Flutter' 카테고리의 다른 글
Flutter 2.2 새롭게 추가된 것들 (0) | 2021.05.21 |
---|---|
Flutter Engage Extended Seoul Goods! (0) | 2021.05.12 |
Flutter 매우 간단한 무한 스크롤 만들기 (14) | 2021.04.29 |
Flutter 앱출시 방법 (0) | 2021.04.15 |
댓글