错误:未为类“BuildContext”定义方法“inheritFromWidgetOfExactType”

Dol*_*hin 31 flutter

今天编译我的flutter项目时,显示这个错误:

This will generate a JSON format file containing all messages that 
need to be translated.
../../../.pub-cache/hosted/pub.flutter-io.cn/fish_redux-0.3.4/lib/src/redux_component/page.dart:208:17: Error: The method 'inheritFromWidgetOfExactType' isn't defined for the class 'BuildContext'.
 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../apps/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'inheritFromWidgetOfExactType'.
        context.inheritFromWidgetOfExactType(PageProvider);
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.6.3/lib/src/smart_refresher.dart:273:21: Error: The method 'ancestorWidgetOfExactType' isn't defined for the class 'BuildContext'.
 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../apps/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'ancestorWidgetOfExactType'.
    return context?.ancestorWidgetOfExactType(SmartRefresher);
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
../../../.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.6.3/lib/src/smart_refresher.dart:277:21: Error: The method 'ancestorStateOfType' isn't defined for the class 'BuildContext'.
 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../apps/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'ancestorStateOfType'.
    return context?.ancestorStateOfType(TypeMatcher<SmartRefresherState>());
                    ^^^^^^^^^^^^^^^^^^^
../../../.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-1.6.3/lib/src/smart_refresher.dart:1003:20: Error: The method 'inheritFromWidgetOfExactType' isn't defined for the class 'BuildContext'.
 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../apps/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'inheritFromWidgetOfExactType'.
    return context.inheritFromWidgetOfExactType(RefreshConfiguration);
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../.pub-cache/hosted/pub.flutter-io.cn/chewie-0.9.10/lib/src/chewie_player.dart:276:17: Error: The method 'inheritFromWidgetOfExactType' isn't defined for the class 'BuildContext'.
 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../apps/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'inheritFromWidgetOfExactType'.
        context.inheritFromWidgetOfExactType(_ChewieControllerProvider)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../.pub-cache/hosted/pub.flutter-io.cn/chewie_audio-1.0.0+1/lib/src/chewie_player.dart:101:17: Error: The method 'inheritFromWidgetOfExactType' isn't defined for the class 'BuildContext'.
 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../apps/flutter/packages/flutter/lib/src/widgets/framework.dart').
Try correcting the name to the name of an existing method, or defining a method named 'inheritFromWidgetOfExactType'.
        context.inheritFromWidgetOfExactType(_ChewieAudioControllerProvider)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我正在使用颤振主频道,这是颤振医生:

[?] Flutter (Channel master, 1.26.0-2.0.pre.366, on Mac OS X 10.15.7 19H114 darwin-x64, locale en-CN)
    • Flutter version 1.26.0-2.0.pre.366 at /Users/dolphin/apps/flutter
    • Framework revision b7f6d9bcb2 (24 hours ago), 2021-01-15 07:44:03 -0500
    • Engine revision 69a7538a90
    • Dart version 2.12.0 (build 2.12.0-227.0.dev)
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

[?] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/dolphin/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[?] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    • CocoaPods version 1.10.0

[?] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[?] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[?] IntelliJ IDEA Community Edition (version 2020.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart

[?] IntelliJ IDEA Ultimate Edition (version 2019.2.2)
    • IntelliJ at /Users/dolphin/Applications/JetBrains Toolbox/IntelliJ IDEA Ultimate.app
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart

[?] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[?] Connected device (3 available)
    • sdk gphone x86 arm (mobile) • emulator-5554 • android-x86    • Android 11 (API 30) (emulator)
    • macOS (desktop)             • macos         • darwin-x64     • Mac OS X 10.15.7 19H114 darwin-x64
    • Chrome (web)                • chrome        • web-javascript • Google Chrome 87.0.4280.141
    ! Error: xiaoqiang ? iPhone is not connected. Xcode will continue when xiaoqiang ? iPhone is connected. (code
      -13)

• No issues found!
(base)
Run Code Online (Sandbox Code Playgroud)

升级到flutter 2.0.1后,再次显示这个错误:

~/Documents/GitHub/cruise-open on ? feature/channel! ? 15:01:43
$ ~/apps/flutter/bin/flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[?] Flutter (Channel stable, 2.0.1, on Mac OS X 10.15.7 19H114 darwin-x64, locale en-CN)
[?] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[?] Xcode - develop for iOS and macOS
[?] Chrome - develop for the web
[?] Android Studio (version 4.1)
[?] IntelliJ IDEA Community Edition (version 2020.3.2)
[?] IntelliJ IDEA Ultimate Edition (version 2019.2.2)
[?] VS Code (version 1.53.2)
[?] Connected device (3 available)
    ! Error: xiaoqiang ? iPhone is not connected. Xcode will continue when xiaoqiang ? iPhone is connected. (code
      -13)

• No issues found!
(base)
Run Code Online (Sandbox Code Playgroud)

Kab*_*uda 35

此错误是由inheritFromWidgetOfExactType方法引起的。

此方法已弃用。改用dependOnInheritedWidgetOfExactType

您的项目仅包含它

第一个解决方案:

1.26.0-8.0手动返回版本或使用此命令:

flutter downgrade
Run Code Online (Sandbox Code Playgroud)

第二种解决方案:

切换到测试版频道

flutter channel beta
Run Code Online (Sandbox Code Playgroud)

如果您还没有 beta 频道,则需要添加 flutter upgrade

第三个解决方案:

更新您的项目

在您的代码中找到inheritFromWidgetOfExactType方法并使用DependOnInheritedWidgetOfExactType对其进行调整

替换示例

之前:使用InheritFromWidgetOfExactType

static Name of(BuildContext context) {
  return context.inheritFromWidgetOfExactType(Name);  //before
}
Run Code Online (Sandbox Code Playgroud)

现在使用dependOnInheritedWidgetOfExactType(推荐)

static Name of(BuildContext context) {
  return context.dependOnInheritedWidgetOfExactType<Name>();  //after
}
Run Code Online (Sandbox Code Playgroud)

现在代替 aType作为参数,该方法是通用的。
简短<...>()而不是(...)

该错误也可能是由您导入的包引起的:

解决方案: 检查这个包是否有新的更新

事实上,这个方法从 flutter 1.12.1 版本开始就已经弃用了。但在那之前,它的使用是可能的,但不推荐。从 1.26.0-12.0.pre 版本开始不再使用它,这解释了错误。


Max*_*lin 11

更新!

随着 Flutter 2 的发布,从长远来看,降级 SDK 并不是最好的解决方法。正确的做法是检查依赖项并更新它们,您可以使用flutter pub outdated终端命令突出显示可用更新 - 然后使用更新版本更改 pubspec.yaml 并尝试运行您的应用程序。可能会发生某些依赖项不会对 Flutter SDK 中的重大更改进行更新或修复的情况。在这种情况下,您将被锁定使用较旧的 Flutter(直到更新依赖项或您将其替换为其他包)。

原点

flutter downgrade

升级后立即收到相同的错误。从Flutter 1.26.0-12.0.pre • channel dev切换到之前的版本 ( 1.26.0-8.0.pre ) 使构建再次工作

这是一个快速修复,以防您不想通过依赖项pubspec.yaml将它们更新为较新的(希望有空安全更新),但只想从您离开的地方继续。最终,您必须检查所有的包/插件,并用nullsafe版本更新/替换它们。


小智 6

如果您需要在 flutter 1.26 中运行提供程序,您应该运行:flutter downgrade。

如果您需要在 flutter 2.0.0 + 中运行提供程序,您应该更改:

pubspec.yaml

提供商:^ 2.0.1 至 ^ 5.0.0

主程序.dart

更改构建器以进行创建

return MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => YourProvider()), ],


小智 5

对我来说是因为我使用的是旧版本的依赖项。检查 pub.dev 以查看您的软件包是否有新版本!