Flutter - 添加Firebase Messaging出现问题

12
医生总结(要查看所有细节,请运行flutter doctor -v):
[√] Flutter(稳定通道,2.5.0,在Microsoft Windows [Version 10.0.19042.1348]上,区域设置为en-US)
[√] Android工具链-用于开发Android设备(Android SDK版本30.0.0-rc2)
[√] Chrome-用于Web开发
[√] Android Studio(版本3.6)
[√] VS Code(版本1.52.1)
[√] 连接的设备(可用3个)
我的pubsec.yaml仅包含:
firebase_messaging:^10.0.1
firebase_core:^1.2.1
flutter_local_notifications:^6.1.0

即使在全新的Flutter项目中,当我将import 'package:firebase_messaging/firebase_messaging.dart';添加到main.dart时,我遇到了以下问题:
/D:/Flutter/flutter_windows_2.5.0-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_messaging_platform_interface-3.2.0/lib/src/method_channel/utils/exception.dart:13:11: Error: Method not found: 'Error.throwWithStackTrace'.
    Error.throwWithStackTrace(exception, stackTrace);
          ^^^^^^^^^^^^^^^^^^^
/D:/Flutter/flutter_windows_2.5.0-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_messaging_platform_interface-3.2.0/lib/src/method_channel/utils/exception.dart:16:9: Error: Method not found: 'Error.throwWithStackTrace'.
  Error.throwWithStackTrace(
        ^^^^^^^^^^^^^^^^^^^
/D:/Flutter/flutter_windows_2.5.0-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_messaging_platform_interface-3.2.0/lib/src/method_channel/utils/exception.dart:11:7: Error: A non-null value must be returned since the return type 'Never' doesn't allow null.
Never convertPlatformException(Object exception, StackTrace stackTrace) {
      ^


FAILURE: Build failed with an exception.

* Where:
Script 'D:\Flutter\flutter_windows_2.5.0-stable\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 1005

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command 'D:\Flutter\flutter_windows_2.5.0-stable\flutter\bin\flutter.bat'' 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

BUILD FAILED in 15s
Exception: Gradle task assembleDebug failed with exit code 1


1
firebase_messaging 依赖于 firebase_messaging_platform_interface,后者 刚刚 更新到了版本 3.2.0,现在依赖于 Flutter 2.10 中的 Dart 2.16。问题详情(也影响了 riverpod,所以非常相似)。如果升级到 Flutter 2.10 导致构建失败,这可能会有所帮助 - Baker
如果您想将其用于Web,请尝试比较您的pub.yml文件,链接为https://github.com/FirebaseExtended/flutterfire/blob/master/packages/cloud_firestore/cloud_firestore_web/pubspec.yaml。 - Umer Waqas - Python expert
10个回答

14

Error.throwWithStackTrace 是Dart 2.16中新增的(Flutter版本为2022年2月8日发布的2.10)。

您可以选择以下操作:

  • 将Flutter更新至2.10:flutter upgrade
  • 或使用冲突包的旧版本:firebase_messaging_platform_interface: 3.1.6

2
请关注此问题以获取更新:https://github.com/FirebaseExtended/flutterfire/issues/8181 - Pavel

11

我尝试了所有的方案,包括这里和链接中的方案:https://github.com/FirebaseExtended/flutterfire/issues/8181

但只有这个对我有效。

dependency_overrides:
  firebase_messaging_platform_interface: 3.1.6
  firebase_crashlytics_platform_interface: 3.1.13
  cloud_firestore_platform_interface: 5.4.13
  firebase_auth_platform_interface: 6.1.11
  firebase_storage_platform_interface: 4.0.14
  cloud_functions_platform_interface: 5.0.21
  firebase_analytics_platform_interface: 3.0.5
  firebase_remote_config_platform_interface: 1.0.5
  firebase_dynamic_links_platform_interface: 0.2.0+5
  firebase_performance_platform_interface: 0.1.0+5
  firebase_app_installations_platform_interface: 0.1.0+6

这些是我首要使用的依赖项

  firebase_core: ^1.6.0
  firebase_crashlytics: ^2.2.1
  firebase_messaging: ^10.0.9
  firebase_analytics: ^9.1.0

是的,dependency_overrides。我花了三天时间纠结为什么会发生这种情况。 - ib_ganz

5

我曾经遇到过同样的问题,并找到了一个解决方法。

在 pubspeck.yaml 文件中添加 firebase_messaging_platform_interface:

dependency_overrides:
  firebase_messaging_platform_interface: 3.1.6

3
Flutter Firebase包的依赖项已经发生了更改。您可以升级到使用dart的“>=2.16”版本,或者覆盖依赖项,只需添加您正在使用的依赖项即可。详情请查看:https://github.com/FirebaseExtended/flutterfire/pull/8156
dependency_overrides:
  firebase_messaging_platform_interface: 3.1.6
  firebase_storage_platform_interface: 4.0.14
  cloud_functions_platform_interface: 5.0.21
  cloud_firestore_platform_interface: 5.4.13
  firebase_auth_platform_interface: 6.1.11
  firebase_database_platform_interface: 0.2.0+5

2

最近我在使用 firebase_storage 时遇到了问题。

我解决这个问题的方法是... (我使用的是flutter 2.6和dart 2.14)。

升级flutter和dart版本:进入终端,运行 flutter upgrade 或者在我的情况下,运行 flutter upgrade --force,因为flutter upgrade 给我带来了一些问题。然后我将依赖项的最新版本添加到我的pubspec中(firebase_storage_10.2.0)。

此时,运行应用程序可能会引发关于不支持的compileSDKVersion或类似的错误,并要求您进行升级。对于这个问题,进入您的应用程序级别的build.gradle文件

("project"\android\app\build.gradle),

在android下,将compileSDKVersion从其当前值更改为flutter要求更改的值。在我的情况下,它是从30更改为31。

android{
       //change compile sdk version to 31 (in my case. flutter will tell you which version you should set to)
       compileSdkVersion 31
}

运行应用程序时,它将检查您刚编辑的 Android SDK 包(31)的许可证。它应该自动接受并安装所有必要的内容。 Flutter run 可能会再次失败,并显示 kotlin 版本不兼容的错误,并建议您进行更新。 要更新 kotlin 版本,请转到项目级别的 build.gradle 文件("project"/android/build.gradle), 在此处更改 kotlin 版本 (ext.kotlin_version = '1.3.5') 为最新版本,可以在 此处 找到最新版本,截至目前,最新版本为 1.6.10。 因此,现在这行代码如下:

ext.kotlin_version = '1.6.10'

现在您可以运行应用程序了。再次运行应用程序可能需要比平时更长的时间,但应该可以正常工作。 或者至少对我而言是可以的。


0
我遇到了以下错误:

{flutter-folder}/.pub-cache/hosted/pub.dartlang.org/firebase_messaging_web-2.2.9/lib/src/internals.dart:11:20: Error: Method not found: 'guardWebExceptions'. return internals.guardWebExceptions( ^^^^^^^^^^^^^^^^^^

最近,我在我的dependency_overrides部分中添加了firebase_messaging_web: 2.2.7来解决它。
dependency_overrides:
  firebase_messaging_web: 2.2.7

您可以在https://pub.dev/packages/firebase_messaging_web/versions中查看可用的软件包版本。

flutter --version

https://github.com/flutter/flutter.git<
Framework • revision 097d3313d8 (10 days ago) • 2022-02-18 19:33:08 -0600
Engine • revision a83ed0e5e3
Tools • Dart 2.16.1 • DevTools 2.9.2

pubspec.yml

dependencies:
  firebase_messaging: 10.0.9

希望这对你有用。我长时间面临这个问题。


目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
我更新了评论。希望你觉得有用。 - Alejandro Rodríguez

0

自从2.16版本的Flutter,throwWithStackTrace方法已经被添加到了Flutter的Dart核心中。 解决方法是添加dependency_overrides,就像我们添加其他依赖项一样。

dependencies:
      flutter:
        sdk: flutter
      cupertino_icons: ^1.0.2

并且

dev_dependencies:
  flutter_test:
    sdk: flutter

现在我们必须以与依赖项和dev_dependencies相同的方式添加依赖项覆盖。例如:

dependency_overrides:
  firebase_messaging_platform_interface: 3.1.6
  firebase_crashlytics_platform_interface: 3.1.13
  cloud_firestore_platform_interface: 5.4.13
  firebase_auth_platform_interface: 6.1.11
  firebase_storage_platform_interface: 4.0.14
  cloud_functions_platform_interface: 5.0.21
  firebase_analytics_platform_interface: 3.0.5
  firebase_remote_config_platform_interface: 1.0.5
  firebase_dynamic_links_platform_interface: 0.2.0+5  
  firebase_performance_platform_interface: 0.1.0+5 
  firebase_app_installations_platform_interface: 0.1.0+6

参考资料:在Flutter的Github上创建的问题


0

添加到yaml文件中:

 firebase_messaging_platform_interface

0

简单操作:

一句话回答:使用终端升级所有软件包

步骤1: 列出所有过时的软件包:"flutter pub outdated"(在终端中执行)

步骤2: 升级软件包:"flutter pub upgrade --major-versions"(在终端中执行)

这对我有帮助,希望对你也适用


-2

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