flutter-swiper
라이브러리를 이용하기 위해 pubspec.yaml
에 입력 후 pub.get 을 했는데, 이 라이브러리가 null-saferty가 적용되지 않은 패키지였다.
예전에는 별 문제없이 사용했던 것 같아서 flutter run 으로 앱을 구동시켰는데 다음과 같은 에러가 발생했다.
Error: Cannot run with sound null safety, because the following dependencies
don't support null safety:
- package:flutter_swiper
- package:flutter_page_indicator
- package:transformer_page_view
For solutions, see https://dart.dev/go/unsound-null-safety
Unsound null safety
무시하기 // 둘 중에 하나 터미널에 입력하면 됨
$ dart --no-sound-null-safety run
$ flutter run --no-sound-null-safety
main.dart
의 언어 버전 낮추기// @dart=2.9
import 'src/my_app.dart';
main() {
//...
}
모든 앱의 진입점이 되는 main.dart
최상단에 dart 버전을 null-safety 업데이트 이전 버전인2.9
로 낮춘다.
하지만 1, 2번 모두 임시방편일 뿐이다. null-check를 비활성화 시킨다든지, null-safety를 피하는 방식으로 상황을 모면하는 것이기 때문이다.
잠깐의 앱테스트를 위해 사용할 수는 있지만, 가장 확실한 방법은, null-safety를 적용하지 않는 라이브러리를 사용하지 않거나, 마이그레이션 프로세스를 통해 null-safety부분을 편집 후 사용하는 방법이 있다.
null-safety
를 지원하는 패키지로 편집 후 불러오기$ dart pub outdated --mode=null-safety
위의 명령어로 확인하면, 현재 사용중인 종속성 패키지 중 어떤 것이 문제가 있는지 보여준다. (이 경우에는 그냥 쓰지 않는 것이 좋다)
$ dart migrate
// 위의 명령어를 수행하면 아래의 결과를 받게 됨
View the migration suggestions by visiting:
http://127.0.0.1:60278/Users/you/project/mypkg.console-simple?authToken=Xfz0jvpyeMI%3D
migrate 도구를 불러오면 마이그레이션을 실행할 수 있는 URL을 받게 된다.
마이그레이션이란, 가이드라인에 따라 null-check를 할 수 있는 서비스. 필요한 부분을 마커(!
, ?
, required
) 등을 이용하여 편집창의 제안에 따라 null-check로 코드를 편집할 수 있다.
자세한 마이그레이션 방법은 링크 참조.
# 패키지 업데이트
$ dart pub get
$ dart analyze # or flutter analyze
# 테스트
$ dart test # or flutter test
마이그레이션을 하는 즉시 패키지를 업데이트한 후 프리릴리즈로 게시하는 것을 권장한다고 한다.
Flutter 강좌들이 2.0 업데이트 전의 것들이 대부분이라 null-safety를 짚고 넘어가지 않았다. 그런데 알아가면 알아갈 수록 nullable / non-nullable 이슈가 자꾸 발생한다.
dart 언어 중에서도 null-safety 부분에 대해 더 심도있게 공부해야 할 듯 싶다.
flutter_swiper 라이브러리 사용하다 같은 문제로 해당 글을 보게되었습니다. 도움이 많이 되었습니다!!
flutter_swiper 이슈에 대해 좀 더 찾아보니 flutter_swiper_null_safety 라이브러리라는게 있고, 해당 라이브러리로 교체하니 null-safety 이슈를 해결하게 되었습니다.
https://pub.dev/packages/flutter_swiper_null_safety/score