[010] 플러터 (Flutter) Tip - Null Safety 적용하기(Migrating to Null Safety)

2023. 9. 3. 21:59모바일어플개발/Flutter Tips

반응형

안녕하세요~ totally 개발자입니다.

 

Migrating to Null Safety

 

이 포스팅에서는 Null Safety에 대해서 살펴봅니다. Null Safety는 플러터 2.0, 다트 2.12부터 지원되기 시작했으며 Null Safety를 사용하여 모든 변수는 null로 처리되지 않으며 non-nullable의 변수를 위해서 체크 할 필요가 없습니다. 또한 클래스를 선언할 때 선언할 때 초기화를 하거나 ? 표시나 late 키워드를 통해 사용해주셔야 합니다. 그래서 String message = ""; 또는 String? message; late String message;로 사용합니다. Null Safety를 통해 코드 컴파일 실행 전에 오류로 인식하여 미리 수정할 수 있습니다.

 

플러터 2.0, 다트 2.12 전에 생성했던 모든 프로젝트들은 Null Safety가 지원되지 않기 때문에 현재 플러터를 업그레이드해주면 되는데 무조건 업데이트를 하기 보다는 지금 사용하고 있는 패키지들을 https://pub.dev/ 여기 사이트에서 검색하신 뒤 support null safety인지를 먼저 전부 확인하실 필요가 있습니다. 일부 패키지들은 여전히 null safety를 지원하지 않기 때문에 대체할 수 있는 다른 패키지를 사용하셔야 하기 때문입니다. 그리고 업그레이드시 바로 빌드가 안 될 수 있을 뿐더러, Null Safety 특성상 많은 변수 부분에서 코드의 상당한 부분에 에러가 생겨 수정 시간이 상당히 소요될 수 있는 점도 염두에 두시고 Null Safety 마이그레이션을 진행하셔야 합니다. 저도 기존 프로젝트들을 마이그레이션 해봤는데 오류 수정만 며칠 정도 걸렸습니다.

 

진행이 가능하다면 아래 순서대로 진행하시면 됩니다. 

 

Step 1: 먼저 플러터 업그레이드를 진행합니다. flutter upgrade를 했을 때 아래처럼 메시지가 나온다면 git stash를 하거나 먼저 commit를 먼저 하시면 됩니다. 그 후에 flutter upgrade --force 키워드로 진행하시면 됩니다. 업그레이드 하시면 보통 null safety 진행됩니다. flutter 3.0 이후로는 dart migrate 키워드가 아니라 flutter upgrade하면 이미 적용이 되는 것으로 보입니다. dart migrate를 하면 터미널에서 진행 안 됩니다.

 

 

Step 2: pubspec.yaml에 sdk 버전을 확인합니다. 보통 2.7.0으로 되어 있다면 flutter pub get이 안 될 수도 있습니다.

아래처럼 메시지가 특히 나온다면 그렇습니다.

 

 

Step 3: 그리고 pubspec.yaml에 있는 패키지들이 Null Safety를 진행하는 지 알기 위해 dart pub outdated로 체크할 수 있고 dart pub upgrade를 통해 업데이트를 해줄 수 있습니다.

 

 

Step 4: dart 코드에 있는 에러들을 하나씩 수정하면 됩니다. VSCode에서 extension에 들어가서 Error Lens를 활성화해주시고 에러를 해결하면 됩니다.

 

 

위에 보시면 Non-nullable instance field '_con'이라고 나와 있습니다. 그 아래에 _con이 null이 될 수 없다고 뜹니다. 

 

30번째 줄에 HomeController 뒤에 ? 물음표를 붙여주면 해결됩니다.

 

아래 같은 에러를 보시면 The return type 'Future<dynamic>' isn't a 'Future<bool>'이라고 나옵니다.

이 경우에는 일단 위처럼 as Future<bool>를 붙여서 해결할 수는 있는데 실행을 해서 잘 작동이 되는 것까지 확인해보셔야 합니다.

 

아래 에러는 Null Safety 마이그레이션했을 때 제일 많이 오류가 나는 부분인데 이 때는 ?를 붙이거나 !를 붙여서 주로 해결을 할 수 있습니다. 참고로 ?는 Null을 가질 수도 있지만 !는 절대로 허용되지 않는 변수일 때 씁니다. 

 

개발에 도움이 되셨기를 바랍니다. 감사합니다.

 

References:

https://pub.dev/

 

Dart packages

Pub is the package manager for the Dart programming language, containing reusable libraries & packages for Flutter and general Dart programs.

pub.dev

 

아래는 참고용도로 보시고 실제 3.0과는 방식이 다릅니다.

https://dart.dev/null-safety

 

Sound null safety

Information about Dart's null safety feature

dart.dev

 

반응형