未处理的异常: 平台异常(channel-error),无法在通道上建立连接,null,null。

52

突然间出现了这个错误在调试控制台中。我不知道自己哪里做错了。

错误图片


1
你在使用声网吗? - Vinamra Jaiswal
不,我没有使用 agora。 - MsPoojitha
这个对我很有帮助:https://dev59.com/SlIG5IYBdhLWcg3wpDNk#70467105 - Pixie Dust
12个回答

59

您已经升级了Flutter,但未升级软件包。在终端中输入

flutter pub outdated

然后像这样逐个升级过时的软件包:

flutter pub upgrade 要升级的过时软件包

完成后:

flutter clean

flutter pub get

您的问题现在应该得到解决。


flutter upgrade,flutter clean,flutter pub get也可以完成任务。 - Piyush
3
无法工作。Flutter 版本:3.0.5 Dart: 2.17.6 - Balaji Ks
你可以直接将 firebase_core 包升级到最新版本,这对我解决了问题。 - John Oyekanmi
升级命令是错误的。正确的命令是:flutter pub upgrade outdated_package 或更具体地说:flutter pub upgrade firebase_core。你能修复这个问题吗?我敢打赌这会浪费一些人的时间。 - Crob
1
哦,我使用的是Android Studio,我尝试重新启动Android Studio,结果成功了,所以上述的指示仍然有效。 - undefined
显示剩余3条评论

7

我花了很长时间研究这个问题,最终发现是插件注册器在设置插件时为nil

这是由于将我的iOS应用程序根视图控制器设置为除FlutterViewController之外的任何其他内容所导致的(例如,在我的情况下,我将UINavigationController作为根)。这将导致无法注册所有插件。

应用程序委托假定根视图控制器是FlutterViewController,因此如果不是,则需要通过以下方式重定向所有与插件相关的函数调用到您的FlutterViewController从您的应用程序委托覆盖这些函数:

    override func registrar(forPlugin pluginKey: String) -> FlutterPluginRegistrar? {
        flutterViewController.registrar(forPlugin: pluginKey)
    }

    override func hasPlugin(_ pluginKey: String) -> Bool {
        flutterViewController.hasPlugin(pluginKey)
    }

    override func valuePublished(byPlugin pluginKey: String) -> NSObject? {
        flutterViewController.valuePublished(byPlugin: pluginKey)
    }

2
这个答案真的需要更多的赞。错误恰好是由于此造成的。有时插件注册器文件只是过时(或丢失),其他答案中的命令可以修复它们,但在某些情况下,您可能会错误地设置FlutterViewController-尤其是在没有FlutterAppDelegate的情况下。因此,此答案为您提供了正确的方向。对我非常有帮助@jonathan,谢谢! - Legoless
1
感谢您查找根本原因。然后,我按照文档中所说的添加了GeneratedPluginRegistrant.register(with: ...来解决问题。(我当时正在使用文档中的使用隐式FlutterEngine创建FlutterViewController部分中的代码,所以不小心错过了PluginRegistrant这个东西。) - autodavid
顺便提一下,如果你的 FlutterViewControllerUINavigationController 中,你也会发现 SystemChrome.setPreferredOrientations() 无法正常工作。我刚刚在这里发布了解决该问题的方法 here(我在这里发布是因为我认为可能会遇到此问题的人会查看此答案!) - Jonathan Ellis

5

我曾经遇到过同样的问题,看到了这篇文章后感到很困惑。

在我的情况下,我能够检测出是哪个插件导致了错误,结果发现是firebase_core。因此,我决定将该包升级到最新版本,而在我这里最新版本是1.21.1

因此,为了解决这个问题,我建议您尝试将您项目中使用的firebase_core包的版本更改为最新版本,类似于在项目的 pubspec.yaml 文件中:

firebase_core: ^1.21.1 (replace with latest verison)

或者你可以直接运行:

flutter pub upgrade firebase_core

这将会升级firebase_core到最新版本。

或者,您也可以在项目的pubspec.yaml文件中任意指定版本代码,例如:

firebase_core: any (upgrades firebase_core to the latest verison)

不是 firebase_core,而是 path_provider 导致了这个问题的根本原因。 - Nicholas Jela
升级到最新版本似乎无法解决这个问题。 - Africanfruit

2
我遇到了同样的问题,试了一天后,我意识到我传递给createUserWithEmailAndPassword()的变量没有值。 当我传递硬编码的值,即电子邮件和密码时,这个函数完全正常工作。

2
运行flutter cleanflutter pub get对我有效。

2

如果您正在使用这些依赖项,请将其替换为最新版本:

  • firebase_messaging
  • firebase_core
  • flutter_local_notifications

然后在android/app/build.gradle中将compileSdkVersion flutter.compileSdkVersion更新为33


1
请确保检查位于android/app/build.gradle中的compileSdkVersion并将其更新到33。

1

我也受到了这个问题的影响,花了几个小时最终发现问题所在:我将模拟器运行为Windows系统,是的,请使用你选择的Android模拟器来运行。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

1
在我的情况下,我尝试同时使用“google_mobile_ads”和“admob_flutter”。您必须只选择一个。

0

按以下三步操作即可:

  1. Flutter clean
  2. Flutter pub get
  3. Flutter run
您可以轻松搞定以上操作。

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