Android 폰에서는 잘 동작하는데, iOS 환경에서 네이버 지도가 화면에 나오지 않고, 에러 메시지는 다음과 같이 나온다.
******** Authorize Error : 잘못된 클라이언트 ID를 지정. 콘솔에서 앱 Bundle Identifier를 잘못 등록함 [ERROR:flutter/shell/common/shell.cc(1015)] The 'flutter_naver_map_sdk' channel sent a message from native to Flutter on a non-platform thread. Platform channel messages must be sent on the platform thread. Failure to do so may result in data loss or crashes, and must be fixed in the plugin or application code creating that channel. See https://docs.flutter.dev/platform-integration/platform-channels#channels-and-platform-threading for more information. flutter: Auth failed: NAuthFailedException(code: 401, message: 잘못된 클라이언트 ID를 지정. 콘솔에서 앱 Bundle Identifier를 잘못 등록함)
Null Safety 를 이용하기 위해서는 pubspec.yaml 파일의 environment 의 버전을 2.12.0 버전 이상이어야 한다.
environment: sdk: ">=2.12.0 <3.0.0"
Null Safety 지원 확인 및 dependencies: 자동 업데이트 - Teminal 창에서 아래와 같이 입력한다.
dart pub outdated --mode=null-safety
dart pub upgrade --null-safety
Flutter Upgrade 방법
// 터미널 창에서 아래 두줄을 입력한다.
flutter channel stable
flutter upgrade
AndroidManifest.xml 파일 수정
빨간색 박스 부분을 아래와 같이 수정한다.
android:name="${applicationName}"
그리고 Android Compile 버전을 31로 할 경우에는 android:exported="true" 한줄을 추가해야 한다.
Setting 에서 Plugins 에 업데이트 할 사항이 있다면 Update 해준다.
Android app build.gradle 수정사항
android\gradle\wrapper\gradle-wrapper.properties to gradle-6.5-all.zip
최종적으로 아래와 같이 수정했다.
android gradle 수정
기능 동작 테스트를 거쳐서 최종적으로 아래와 같이 수정했다.
Null safety 적용 전 버전의 모든 변수는 Nullable 이였지만 Flutter 2.0 이상부터는 Nullable 변수를 만들려면 꼭 "?" 를 선언해야 된다. "Class 내의 변수"는 반드시 선언과 동시에 초기화를 시켜야 한다. 변수 초기화를 위해서 생성자를 만들어주거나 아니면 late keyword를 붙여 줘야 한다.
class Person {
String name;
int age;
Person({required this.name, required this.age});
}
main(){
Person p = Person(name: "홍길동", age: 25);
print(p);
print(p.name);
print(p.age);
}
news_article.dart 파일 내용을 아래와 같이 수정했다.
전체 소스코드를 일일이 확인하면서 수정한 것이 아니라 에러가 발생하는 부분을 찾아서 수정하다보니 null 처리를 위해 ? 붙이는 것으로 대체했다.