为什么 riverpod 甚至无法在项目中初始化?未找到方法:'Error.throwWithStackTrace'

Why is riverpod failing even to initialize in project? Method not found: 'Error.throwWithStackTrace'

所以我正在尝试开始使用 riverpod 并使用“点击和计数器”默认示例创建一个新的 flutter 项目。 一旦我添加了 pubspec

flutter_hooks: ^0.18.0
hooks_riverpod: ^2.0.0

import 'package:hooks_riverpod/hooks_riverpod.dart';

我在调试控制台上收到此错误,无法弄清楚是什么问题

: Error: Method not found: 'Error.throwWithStackTrace'.
../…/framework/provider_base.dart:904
  Error.throwWithStackTrace(error, chain);
        ^^^^^^^^^^^^^^^^^^^
: Error: A non-null value must be returned since the return type 'Never' doesn't allow null.
../…/framework/provider_base.dart:898
Never _rethrowProviderError(Object error, StackTrace stackTrace) {
      ^

我看到了

试试 flutter pub upgrade 怎么样?

如果未解决,则检查 analyzer 版本并检查哪个依赖项锁定了它。

Error.throwWithStackTrace 已添加到 Dart 2.16(Flutter 2.10 版,2022 年 2 月 8 日起)。

https://api.flutter.dev/flutter/dart-core/Error/throwWithStackTrace.html

(检查 @Since 注释。)

如果您的 Flutter/Dart 版本低于该版本,您将看到您看到的错误。

可能有帮助的两个选项是:

  1. 指定依赖项的确切版本(不要在版本之前使用 ^
  2. 将 Flutter/Dart 至少升级到 2.10/2.16
flutter upgrade

如果您的问题包(hooks_riverpod: ^2.0.0 在您的情况下)与 ^ 一起列出,它将

我猜想当您创建一个新项目并使用相同的依赖版本时,最初 pub get 它下载了更新版本的包( 该包使用的依赖项的较新版本) 到依赖于新错误 API 方法的“pub 缓存”。

您的项目会将此信息存储在:

<your_project_dir>/dart_tool/package_config.json

为软件包列出的 min Dart SDK 版本通常应该从 2.12 更改为 2.16。 (更新:它是 been updated now)如果我们发现构建失败,这会提示我们需要更新 Flutter/Dart。

在这个答案的早期版本中,我注意到包依赖版本的 ^ 前缀应该可以防止这些类型的问题,但我不再确定它是为了涵盖这种情况底层平台需要更新的地方(而不是包本身的 API 中的重大更改)。

无论如何,乍一看,将包版本从 2.0.0 升级到 3.0.0 可能是有意义的 # 当它依赖于 2.0 时不存在的新核心 Dart API 方法.0 已发布。

备注

riverpod 的作者还为 Error.throwWithStackTrace 编写了新的 API,因此 hooks_riverpod 的最新版本可能正在使用最新的 API 更改。 (您列出的版本 2.0.0 目前是 pre-release)。您可以在 pubspec.yaml(例如 1.0.3)

中尝试早期版本的 riverpod

对于使用 firebase 遇到“找不到方法:'Error.throwWithStackTrace'”的任何人。 尝试将此添加到您的 pubspec.yaml

dependency_overrides:
  firebase_messaging_platform_interface: 3.1.6

中所述,Error.throwWithStackTrace 最近被添加到 Dart 2.16 中。

如果您收到有关 Error.throwWithStackTrace 未找到某些软件包的错误,则软件包作者忽略了更新其软件包的最低 Dart SDK 版本。你应该向包维护者报告。同时,您应该使用较早版本的问题包或使用较新版本的Dart SDK。

尝试运行 flutter 升级

通过这个它会升级你的 flutter 和 dart SDK 版本,希望它能解决你的问题

如果您在“flutter upgrade”后仍然遇到问题,或者您在 pubspec.yaml

中使用了这行代码
  dependency_overrides:   
    firebase_messaging_platform_interface: 3.1.6

您收到此类错误

java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl)
    at com.sun.tools.javac.util.Assert.error(Assert.java:133)
    at com.sun.tools.javac.code.TypeAnnotations.annotationType(TypeAnnotations.java:231)
    at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.separateAnnotationsKinds(TypeAnnotations.java:294)
    at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitMethodDef(TypeAnnotations.java:1066)
    at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
    at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
    at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
    at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)

so 尝试升级你的 gradle 版本,这一行在你的 build.gradle

classpath 'com.android.tools.build:gradle:4.1.0'

这样做之后,它可能会要求您更改您的 gradle-wrapper.属性

distributionUrl=https://services.gradle.org/distributions/gradle-6.1.1-all.zip

distributionUrl=https://services.gradle.org/distributions/gradle-6.5-all.zip

也升级这个包

firebase_core: ^1.10.0
firebase_messaging: ^11.1.0