Flutter: Предупреждение: операнд операции с нулевым значением '!' имеет тип WidgetsBinding, который исключает нуль. при обновлении до флаттера 3.0.0
При обновлении до флаттера 3.0.0 возникла проблема при запуске приложения,
(Приложение работает, но в терминале есть ошибки (предупреждения)).
Это похоже на проблему с привязкой.
ошибка (предупреждение) говорит: Предупреждение: операнд операции с нулевым значением '!' имеет тип WidgetsBinding, который исключает нуль.
: Warning: Operand of null-aware operation '!' has type 'WidgetsBinding' which excludes null.
../…/src/keyboard_visibility.dart:21
- 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../fvm/versions/3.0.0/packages/flutter/lib/src/widgets/binding.dart').
package:flutter/…/widgets/binding.dart:1
WidgetsBinding.instance!.addObserver(this);
^
: Warning: Operand of null-aware operation '!' has type 'WidgetsBinding' which excludes null.
../…/src/keyboard_visibility.dart:37
- 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../fvm/versions/3.0.0/packages/flutter/lib/src/widgets/binding.dart').
package:flutter/…/widgets/binding.dart:1
WidgetsBinding.instance!.removeObserver(this);
^
: Warning: Operand of null-aware operation '!' has type 'WidgetsBinding' which excludes null.
../…/src/bot_toast_init.dart:15
- 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../fvm/versions/3.0.0/packages/flutter/lib/src/widgets/binding.dart').
package:flutter/…/widgets/binding.dart:1
WidgetsBinding.instance!.addObserver(this);
^
: Warning: Operand of null-aware operation '!' has type 'SchedulerBinding' which excludes null.
../…/src/bot_toast_manager.dart:6
- 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../fvm/versions/3.0.0/packages/flutter/lib/src/scheduler/binding.dart').
package:flutter/…/scheduler/binding.dart:1
SchedulerBinding.instance!.addPostFrameCallback((_) {
^
: Warning: Operand of null-aware operation '!' has type 'SchedulerBinding' which excludes null.
../…/src/bot_toast_manager.dart:9
- 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../fvm/versions/3.0.0/packages/flutter/lib/src/scheduler/binding.dart').
package:flutter/…/scheduler/binding.dart:1
SchedulerBinding.instance!.ensureVisualUpdate();
Изменить: - Проблема связана с совместимостью некоторых пакетов с флаттером 3.0.0.
- (Есть некоторые изменения во флаттере 3, так что теперь авторы пакетов должны следить за этими изменениями).
Примечания к выпуску Flutter 3.0.0
f вы видите предупреждения о привязках. При переходе на Flutter 3 вы можете увидеть предупреждения, подобные следующим:
Warning: Operand of null-aware operation '!' has type >'SchedulerBinding' which excludes null.
-например, как пакет bot_toast. В репозитории GitHub этого пакета есть открытая проблема https://github.com/MMMzq/bot_toast/issues/133 , поэтому проблема должна быть исправлена вскоре после выпуска обновления, как они сказали.
3 ответа
Сначала вы должны очистить свой проект
flutter clean
flutter pub get
flutter pub upgrade
Проверьте версию compileSdkVersion и Kotlin. Теперь это должно работать.
Мы можем просто игнорировать ошибку на данный момент. Мы рассматриваем эту ошибку как побочный эффект упрощения API. Обратитесь к примечаниям к выпуску flutter 3.0 для получения дополнительной информации об этом.
https://docs.flutter.dev/development/tools/sdk/release-notes/release-notes-3.0.0
Проблема в том, что
WidgetsBinding.instance
вернуть WidgetsBinding? во флаттере версии 2.xx и в более новой версии, например v3.0.x, возвращается WidgetsBinding.
РЕШЕНИЕ
Если предупреждение исходит от вашего кода, а не от зависимостей, для поддержки флаттера версии 2.9.x и 3.0.x и удаления предупреждения вы можете сделать
/// This allows a value of type T or T?
/// to be treated as a value of type T?.
T? _ambiguate<T>(T? value) => value;
_ambiguate(WidgetsBinding.instance)!.addObserver(this);
Если предупреждение исходит от зависимостей, вы должны обновить его или иным образом подождать, пока оно не будет обновлено.