본문 바로가기

프로그래밍/미분류

Flutter Warning: Operand of null-aware operation '!' hastype 'SchedulerBinding' which excludes null.

반응형

올해 초에 만들었던 플러터 프로젝트를 다시 빌드하다 보니 다음과 같은 경고메시지가 떴다. 동작은 했지만, 우찌 없앨지 고민했다.

/D:/DEV_FLUTTER/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_math_fork-0.5.0/lib/src/widgets/selectable.dart:459:24: Warning: Operand of null-aware operation '!' has
type 'SchedulerBinding' which excludes null.
 - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('/D:/DEV_FLUTTER/flutter/packages/flutter/lib/src/scheduler/binding.dart').
      SchedulerBinding.instance!.addPostFrameCallback((_) {
                       ^
/D:/DEV_FLUTTER/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_math_fork-0.5.0/lib/src/widgets/selection/web_selection_manager.dart:119:24: Warning: Operand of
null-aware operation '!' has type 'SchedulerBinding' which excludes null.
 - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('/D:/DEV_FLUTTER/flutter/packages/flutter/lib/src/scheduler/binding.dart').
      SchedulerBinding.instance!
                       ^
/D:/DEV_FLUTTER/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_math_fork-0.5.0/lib/src/widgets/selection/overlay_manager.dart:138:28: Warning: Operand of null-aware
operation '!' has type 'SchedulerBinding' which excludes null.
 - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('/D:/DEV_FLUTTER/flutter/packages/flutter/lib/src/scheduler/binding.dart').
      if (SchedulerBinding.instance!.schedulerPhase ==
                           ^

에러는 내 코드에서 발생하는 것은 아니고, 사용하는 라이브러리 종속성으로 깔린 어떤 라이브러리에서 코드 안에서 발생하는 것이다. 

pubspec.yaml 파일 안에 사용하는 라이브러리들과 필요한 버전정보등을 적도록 되어 있는데, 어떤 라이브러리의 버전을 올려줘야 할까? 그냥 막 수동으로 고치다 보니 컴파일 에러가 발생하기도 했다. 그래서 결국 해결책이 된 방법은. flutter pub upgrade --null-safety 명령을 사용한 것.

C:\WORK\myflutterproj>flutter pub upgrade --null-safety
Resolving dependencies...
  async 2.8.2 (2.9.0 available)
  boolean_selector 2.1.0
  characters 1.2.0 (1.2.1 available)
  charcode 1.3.1
  clock 1.1.0 (1.1.1 available)
  collection 1.16.0
> csslib 0.17.2 (was 0.17.1)
> cupertino_icons 1.0.5 (was 1.0.4)
  fake_async 1.3.0 (1.3.1 available)
  flutter 0.0.0 from sdk flutter
> flutter_html 3.0.0-alpha.5 (was 2.2.1)
  flutter_lints 2.0.1
  flutter_test 0.0.0 from sdk flutter
  html 0.15.0

...
...
...



Changed 4 constraints in pubspec.yaml:
  http: any -> ^0.13.5
  xml2json: any -> ^5.3.4
  flutter_html: any -> ^3.0.0-alpha.5
  cupertino_icons: ^1.0.2 -> ^1.0.5

현재의 pubspec.yaml 로 찾아지는 라이브러리들을 쭉 찾고, 그 중에서 null-safety 를 지원하지 않는 라이브러리가 없도록, pubspec.yaml 에 지정된 라이브러리 버전을 설정해 준다. 제일 아래에 나온 4가지가 결국 yaml 파일에서 바뀐 것.

해당 명령을 실행하고, pubspec.yaml 파일에 변경이 일어났고. 이후에 다시 flutter run 을 해 보니, 경고가 사라졌다.

728x90