[Flutter / Error] Cannot run with sound null safety, because the following dependencies don't support null safety: 에러 해결법

Jemma·2022년 2월 8일
0

Flutter Diary

목록 보기
2/3

#. 문제상황

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



#. 해결법


1. Unsound null safety 무시하기

 // 둘 중에 하나 터미널에 입력하면 됨
 $ dart --no-sound-null-safety run
 
 $ flutter run --no-sound-null-safety



2. 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부분을 편집 후 사용하는 방법이 있다.



3. null-safety를 지원하는 패키지로 편집 후 불러오기


1) null-safety 정보 체크

$ dart pub outdated --mode=null-safety

위의 명령어로 확인하면, 현재 사용중인 종속성 패키지 중 어떤 것이 문제가 있는지 보여준다. (이 경우에는 그냥 쓰지 않는 것이 좋다)


2) 마이그레이션 도구로 라이브러리의 null 여부 체크 / 변경 후 import 해오기

$ 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로 코드를 편집할 수 있다.

자세한 마이그레이션 방법은 링크 참조.


3) 편집 완료 후 패키지 업데이트 및 테스트

# 패키지 업데이트
$ dart pub get
$ dart analyze # or flutter analyze

# 테스트
$ dart test # or flutter test

마이그레이션을 하는 즉시 패키지를 업데이트한 후 프리릴리즈로 게시하는 것을 권장한다고 한다.

Flutter 강좌들이 2.0 업데이트 전의 것들이 대부분이라 null-safety를 짚고 넘어가지 않았다. 그런데 알아가면 알아갈 수록 nullable / non-nullable 이슈가 자꾸 발생한다.
dart 언어 중에서도 null-safety 부분에 대해 더 심도있게 공부해야 할 듯 싶다.

profile
꽃길만 걸어요 우리

1개의 댓글

comment-user-thumbnail
2022년 9월 14일

flutter_swiper 라이브러리 사용하다 같은 문제로 해당 글을 보게되었습니다. 도움이 많이 되었습니다!!
flutter_swiper 이슈에 대해 좀 더 찾아보니 flutter_swiper_null_safety 라이브러리라는게 있고, 해당 라이브러리로 교체하니 null-safety 이슈를 해결하게 되었습니다.
https://pub.dev/packages/flutter_swiper_null_safety/score

답글 달기