Error: The non-abstract class 'InternalSelectableMathState'

Error: The non-abstract class 'InternalSelectableMathState'

我刚刚将 flutter 版本从 2.5.3 更新到 2.8。我有以下错误,我不知道如何解决。安装的任何插件都没有错误,似乎错误来自内部 类 本身,我不知道我的应用程序的哪个部分抛出了错误:

../../AppData/Local/Pub/Cache/hosted/pub.dartlang.org/flutter_math_fork-0.3.3+1/lib/src/widgets/selectable.dart:407:7: Error: The non-abstract class 'InternalSelectableMathState' is missing implementations for these members:
 - TextSelectionDelegate.copySelection
 - TextSelectionDelegate.cutSelection
 - TextSelectionDelegate.pasteText
 - TextSelectionDelegate.selectAll
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class InternalSelectableMathState extends State<InternalSelectableMath>
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
/C:/desarrollo/flutter/packages/flutter/lib/src/services/text_input.dart:985:8: Context: 'TextSelectionDelegate.copySelection' is defined here.
  void copySelection(SelectionChangedCause cause);
       ^^^^^^^^^^^^^
/C:/desarrollo/flutter/packages/flutter/lib/src/services/text_input.dart:965:8: Context: 'TextSelectionDelegate.cutSelection' is defined here.
  void cutSelection(SelectionChangedCause cause);
       ^^^^^^^^^^^^
/C:/desarrollo/flutter/packages/flutter/lib/src/services/text_input.dart:973:16: Context: 'TextSelectionDelegate.pasteText' is defined here.
  Future<void> pasteText(SelectionChangedCause cause);
               ^^^^^^^^^
/C:/desarrollo/flutter/packages/flutter/lib/src/services/text_input.dart:979:8: Context: 'TextSelectionDelegate.selectAll' is defined here.
  void selectAll(SelectionChangedCause cause);
       ^^^^^^^^^


FAILURE: Build failed with an exception.

* Where:
Script 'C:\desarrollo\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 1070

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command 'C:\desarrollo\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 8m 5s
Exception: Gradle task assembleDebug failed with exit code 1

我没有在我的 pubspec 上声明 flutter_math_fork

我的 flutter doctor 输出:

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 2.8.0, on Microsoft Windows [Versión 10.0.19041.1348], locale es-ES)
[√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
[√] Chrome - develop for the web
[√] Android Studio (version 2020.3)
[√] VS Code (version 1.62.3)
[√] Connected device (3 available)

• No issues found!

我已经尝试过:flutter clean、flutter upgrade 和无效缓存/重启。

欢迎任何建议。

我已经通过强制更新 flutter_math_fork 添加到 pubspec:

解决了这个问题
flutter_math_fork: ^0.5.0

升级到2.8稳定版的时候不知道为什么要安装flutter flutter_math_fork-0.3.3+1

我在仅使用 codemagic 构建时遇到了这个错误,但在我的本地 M1 上却没有mac。

我的一个依赖项(标志)与 flutter_math_fork 有冲突:^0.5.0.

我能够让它与 flutter_math_fork 一起工作:^0.4.2+2。 Codemagic 构建成功。

我已经用

解决了这个问题
flutter pub upgrade --major-versions

首先尝试将您的 flutter_math_fork 更新为 0.6.0,但在我的情况下

将 flutter 版本更新到 2.8.1 后我遇到了同样的错误,我无法将 flutter_math_fork 更新到最新版本,因为我使用的是 Provider version 5.0.0flutter_math_form 需要 provider version 6.0.0+。因此,在升级其他库之前,您可以修改 /lib/src/widgets/selectable.dart 这个文件。添加这一行。

 @override
  dynamic noSuchMethod(Invocation invocation) {
    // We override noSuchMethod since we do not have concrete implementations
    // for all methods of the selection manager mixins.
    throw NoSuchMethodError.withInvocation(this, invocation);
  }
}

删除此方法

 @override  
  void bringIntoView(TextPosition position) {}  
  @override 
  void userUpdateTextEditingValue(  
      TextEditingValue value, SelectionChangedCause cause) {}   
}

或者直接复制粘贴this

添加到您的 pubspec.yaml。它对我有用。

dependency_overrides:
   flutter_math_fork: ^0.5.0
   provider: ^6.0.2

我遇到了同样的错误,我将以下代码添加到 pubscpec.yaml,现在可以使用了。 如果还是不行可以按照上面的方法

dependency_overrides:
provider: 6.0.0

就我而言:

第 1 步:使用以下内容更新 pubspec.yaml 中的依赖项:

  • 提供商:^6.0.0
  • flutter_svg:^0.23.0+1
  • flutter_math_fork:^0.5.0

第 2 步:运行flutter pub get

第 3 步:运行:颤振 运行

祝你好运!

更新Flutter版本后出现此类问题,解决方法是找出问题所在。答案会因您 pubspec.yaml 中的依赖项而异,因此这里的许多答案可能不适合您。

问题是您添加到 pubspec.yaml 的包也有自己的包列表,它们 依赖这些包,这些包可能也有一个列表他们 依赖的包的数量,等等。这些称为 t运行sient dependencies。结果是您的应用程序依赖于大依赖“树”中的一大堆包。当您更新用于应用程序的 Flutter 版本时,所有这些依赖项都必须支持新版本。这就是为什么您 运行 经常会在升级时遇到像这样的问题,通常是针对您不知道是应用程序一部分的软件包! (比如 flutter_math_fork)。

要做的第一件事是打印你的依赖关系树。从命令行/终端,在您应用程序的根目录中,运行:

flutter pub deps

这将打印依赖关系树。搜索它,寻找 flutter_math_fork。如果树很大,你可能想把它保存到一个更容易搜索的文件中,例如:

flutter pub deps > deps.txt

就我而言,我是在这里找到的:

-- flutter_html 2.1.5
|   |-- chewie 1.2.2
|   |   |-- cupertino_icons 1.0.3
|   |   |-- flutter...
|   |   |-- provider 5.0.0
|   |   |   |-- collection...
|   |   |   |-- flutter...
|   |   |   '-- nested 1.0.0
|   |   |       '-- flutter...
|   |   |-- video_player...
|   |   '-- wakelock...

...

|   |-- flutter_math_fork 0.3.3+1     <-----------
|   |   |-- collection...
|   |   |-- flutter...
|   |   |-- flutter_svg...
|   |   |-- meta...
|   |   |-- provider...
|   |   '-- tuple...

这告诉我,我的 pubspec.yaml 中的软件包 flutter_html 是对违规 flutter_math_fork 具有 t运行sient 依赖性的软件包,其版本 (0.3.3+1) 太旧,无法支持更新版本的 Flutter。

因此,解决方案是更新我的 flutter_html 版本。对你来说,它可能是一个不同的包,或者多个包。无论是哪个包,请转到 pub.dev 上的更改日志页面并查看更新版本的更改说明 - 希望您会看到其中一个较新版本的“更新依赖项”之类的内容。

就我而言,我使用的是 flutter_html 版本 2.1.5。去the change log for flutter_html,2.2.0版本下有说明:

Bumped minimum flutter_math_fork version for Flutter 2.5 compatibility

太棒了!所以我将 flutter_html 的版本更新为 2.2.0,运行 flutter pub get 和 viola - 问题已解决。

如果您在更新日志中没有看到更新依赖项的任何更高版本,请尝试使用最新版本。如果这不能解决问题,您需要向软件包作者报告此问题。在他们修复它之前,您要么必须恢复到早期版本的 Flutter,要么从您的应用程序中删除该软件包。

当然,您也可以只使用 flutter pub upgrade 同时更新所有包,但如果您的项目很大,请确保至少分配一整天的时间来修复可能的重大更改,依赖问题和错误。