您已经升级了Flutter,但未升级软件包。在终端中输入
flutter pub outdated
然后像这样逐个升级过时的软件包:
flutter pub upgrade 要升级的过时软件包
完成后:
flutter clean
和
flutter pub get
您的问题现在应该得到解决。
我花了很长时间研究这个问题,最终发现是插件注册器在设置插件时为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)
}
FlutterViewController
-尤其是在没有FlutterAppDelegate的情况下。因此,此答案为您提供了正确的方向。对我非常有帮助@jonathan,谢谢! - LegolessGeneratedPluginRegistrant.register(with: ...
来解决问题。(我当时正在使用文档中的使用隐式FlutterEngine创建FlutterViewController部分中的代码,所以不小心错过了PluginRegistrant这个东西。) - autodavidFlutterViewController
在 UINavigationController
中,你也会发现 SystemChrome.setPreferredOrientations()
无法正常工作。我刚刚在这里发布了解决该问题的方法 here(我在这里发布是因为我认为可能会遇到此问题的人会查看此答案!) - Jonathan Ellis我曾经遇到过同样的问题,看到了这篇文章后感到很困惑。
在我的情况下,我能够检测出是哪个插件导致了错误,结果发现是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)
flutter clean
和flutter pub get
对我有效。如果您正在使用这些依赖项,请将其替换为最新版本:
然后在android/app/build.gradle
中将compileSdkVersion flutter.compileSdkVersion
更新为33
android/app/build.gradle
中的compileSdkVersion
并将其更新到33。我也受到了这个问题的影响,花了几个小时最终发现问题所在:我将模拟器运行为Windows系统,是的,请使用你选择的Android模拟器来运行。
按以下三步操作即可: