Flutter错误:因为可能为空,所以无法在'SchedulerBinding?'上调用'method'addPostFrameCallback'

8
无论我尝试运行我的Flutter应用程序时,都会出现这个错误,它之前一直在运行,我不知道为什么现在不能运行。我甚至将其重置到以前的提交状态,但仍无法运行。
../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_navigation/src/extension_navigation.dart:357:33: Error: Method 'addPostFrameCallback' cannot be called on 'SchedulerBinding?' because it is potentially null.
 - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../development/flutter/packages/flutter/lib/src/scheduler/binding.dart').
Try calling using ?. instead.
      SchedulerBinding.instance.addPostFrameCallback((_) {
                                ^^^^^^^^^^^^^^^^^^^^
../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_navigation/src/extension_navigation.dart:468:33: Error: Method 'addPostFrameCallback' cannot be called on 'SchedulerBinding?' because it is potentially null.
 - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../development/flutter/packages/flutter/lib/src/scheduler/binding.dart').
Try calling using ?. instead.
      SchedulerBinding.instance.addPostFrameCallback((_) {
                                ^^^^^^^^^^^^^^^^^^^^
../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_navigation/src/snackbar/snackbar.dart:452:31: Error: Method 'addPostFrameCallback' cannot be called on 'SchedulerBinding?' because it is potentially null.
 - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../development/flutter/packages/flutter/lib/src/scheduler/binding.dart').
Try calling using ?. instead.
    SchedulerBinding.instance.addPostFrameCallback(
                              ^^^^^^^^^^^^^^^^^^^^
../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_state_manager/src/rx_flutter/rx_notifier.dart:130:31: Error: Method 'addPostFrameCallback' cannot be called on 'SchedulerBinding?' because it is potentially null.
 - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../development/flutter/packages/flutter/lib/src/scheduler/binding.dart').
Try calling using ?. instead.
    SchedulerBinding.instance.addPostFrameCallback((_) => onReady());
                              ^^^^^^^^^^^^^^^^^^^^
../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_state_manager/src/simple/get_controllers.dart:90:29: Error: Method 'addObserver' cannot be called on 'WidgetsBinding?' because it is potentially null.
 - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../development/flutter/packages/flutter/lib/src/widgets/binding.dart').
Try calling using ?. instead.
    WidgetsBinding.instance.addObserver(this);
                            ^^^^^^^^^^^
../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_state_manager/src/simple/get_controllers.dart:96:29: Error: Method 'removeObserver' cannot be called on 'WidgetsBinding?' because it is potentially null.
 - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../development/flutter/packages/flutter/lib/src/widgets/binding.dart').
Try calling using ?. instead.
    WidgetsBinding.instance.removeObserver(this);
                            ^^^^^^^^^^^^^^
../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.6.3/lib/get_navigation/src/router_report.dart:53:31: Error: Method 'addPostFrameCallback' cannot be called on 'WidgetsBinding?' because it is potentially null.
 - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../development/flutter/packages/flutter/lib/src/widgets/binding.dart').
Try calling using ?. instead.
      WidgetsBinding.instance.addPostFrameCallback((_) {
                              ^^^^^^^^^^^^^^^^^^^^

错误: 构建时发生异常。

* Where:
Script '/home/ibrahimdev/development/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1102

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command '/home/ibrahimdev/development/flutter/bin/flutter'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

构建失败,耗时18秒


1
这个答案应该会有所帮助。 - hnnngwdlch
运行 flutter clean,然后如果存在就删除文件 pubspec.lock,接着运行 flutter get。不要运行 flutter upgrade,因为它可能会将软件包更新到最新版本。 - Yayo Arellano
1
@YayoArellano 小错别字,应该是 flutter pub get - David Alberici
7个回答

7
在Flutter 3.0.0的最新升级中,空安全属性发生了一些变化。有几种方法可以解决这个问题。
1-) 如果你已经升级到最新的Flutter版本,并且你的错误出现在Flutter核心代码中,你必须尝试以下方法;
- dart fix --apply

(参考: https://docs.flutter.dev/development/tools/sdk/release-notes/release-notes-3.0.0

如果此解决方案无法修复任何错误,您可以降级Flutter版本;

- flutter downgrade v2.10.5

2-) 如果您没有升级或错误出现在第三方软件包中;

  1. The developer of this package may have upgraded this package to the recent version of Flutter. You can upgrade packages with;

    flutter pub upgrade --major-versions
    
  2. If the developer hasn't upgraded yet, you must go to this package's Github repo and look at the issue tab. Maybe someone opened an issue and the dev answered the correct running version. For example, GetX's latest compatible version with Flutter 2.10.5 is 4.6.1. So for applying this version you can just use the version constraint (remove ˆ).

更新
get: ˆ4.6.1

get: 4.6.1

在您的pubspec中。

(参考:https://github.com/jonataslaw/getx/issues/2356


1
我将Flutter升级到3.0.1并获得了^4.6.1,这解决了我的问题,谢谢。 - Baskar PC

1

Flutter 3.0.0中SchedulerBindingWidgetsBinding和其他类的可空性已更改,因此多个软件包更新其代码以删除警告。

如果在开发过程中您没有更新任何软件包,则可能会想知道为什么会出现错误。

请确保运行flutter pub get而不是flutter upgrade

要解决问题:

  • 运行flutter clean
  • 如果存在,请删除pubspeck.lock
  • 运行flutter get

如果仍然看到错误,则可能是在运行flutter get时软件包仍在更新。

因此,您可以删除^,例如:flutterfire_ui: ^0.4.0+5将变为flutterfire_ui: 0.4.0+5


1

我遇到了同样的问题,并通过将我的Flutter版本更新到3.0版本来解决它。 在控制台中运行flutter upgrade,然后重新打开VSCode(或您的编辑器)。 检查右下角(在VSCode上)以确保已更新为3.0.0版本。


0

在我的情况下,我遇到了来自auto_route_navigator的小部件绑定问题,这是从我的debug console vscode中引用的。这意味着它参考了auto_route: ^4.0.0

: Error: Method 'addPostFrameCallback' cannot be called on 'WidgetsBinding?' because it is potentially null.
../…/widgets/auto_route_navigator.dart:47
- 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../../../dev/flutter/packages/flutter/lib/src/widgets/binding.dart').
package:flutter/…/widgets/binding.dart:1
    Try calling using ?. instead.
          WidgetsBinding.instance.addPostFrameCallback((_) {
                                  ^^^^^^^^^^^^^^^^^^^^

在 GitHub 上搜索问题,我找到了这些内容: https://github.com/Milad-Akarie/auto_route_library/issues/1070#issuecomment-1126674802 之前的内容。
auto_route: ^4.0.0

解决之后

auto_route: "4.0.0"

其他解决方案是将您的Flutter升级到最新的稳定版本(Flutter 3


0

我遇到了同样的问题。你需要升级Flutter到3.0.0版本。


你知道如何在不升级的情况下解决吗?我的引擎:Flutter版本2.10.3 • Dart版本2.16.1 • DevTools版本2.9.2 - Yogi Arif Widodo
我不知道,抱歉:( - Mustafa Cüneyd Adıyaman
@YogiArifWidodo,你可以在pubsec.yml中删除特定依赖项中的胡萝卜,以便将它们锁定在与2.10.3兼容的版本上,而不是升级到不兼容的版本。 - Matt Larsuma

0
升级了flutter到3.0.0,从2.10.3帮我修复这个错误。

0

将Flutter升级到3.0.0版本,这将解决此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接