错误:非抽象类'InternalSelectableMathState'

15

我刚把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和invalidate cache/restart。

欢迎提出任何建议。


你试过 flutter clean 吗? - Jahidul Islam
是的,我尝试了Flutter clean、Flutter upgrade、重启和使缓存失效。 - Maikzen
手动删除构建文件夹,然后再尝试运行。 - Jahidul Islam
1
依赖覆盖: provider: ^6.0.0 flutter_math_fork: ^0.5.0 - Hardip
8个回答

17

我通过强制更新flutter_math_fork并将其添加到pubspec中解决了这个问题。

flutter_math_fork: ^0.5.0

我不知道为什么在升级到2.8稳定版时,flutter会安装flutter_math_fork-0.3.3+1


谢谢,我遇到了同样的问题。奇怪的是,上周五我在我的个人机器(Linux)上升级时一切正常,现在在工作机器Windows上今天却出现了这个错误。 - pedro pimont
是的,这很奇怪,可能在下一个稳定版本中我们必须从pubspec中删除那个插件,因为Flutter刚刚修复了它。 - Maikzen

7
我已经解决了这个问题。
flutter pub upgrade --major-versions

我认为这段代码正在更新所有的库,可能会导致更大的问题。 - Yasin Ege
我不这么认为,如果有任何冲突,它可能会警告你。但是当然,如果库更改了如何使用它的方法,您必须更新您的代码,我认为这比使用旧版本的库更好。 - Mustafa Ali Dikçinar

6

将以下代码添加到你的 pubspec.yaml 文件中。这对我起作用了。

dependency_overrides:
   flutter_math_fork: ^0.5.0
   provider: ^6.0.2

这对我有用,不需要 flutter_math 部分。原来我使用的是 provider 5.0,所以将其升级到 6.0 就可以了。 - WSBT

5

首先尝试将您的 flutter_math_fork 更新到 0.6.0 ,但在我的情况下,我在更新了 Flutter 版本到 2.8.1 后仍然遇到同样的错误。由于我正在使用 Provider version 5.0.0 ,而 flutter_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) {}   
}

或者只需复制和粘贴这个链接


但是如何打开这个目录呢?/lib/src/widgets/selectable.dart..我在我的src文件夹中找不到这个目录。 - benten
此文件将会在您的缓存文件夹中可用。 - Shailandra Rajput
1
推荐答案 - benten

2

当我只在Codemagic上构建时,我遇到了这个错误,但在我的本地M1 Mac上没有出现这个错误。

我的一个依赖项(flag)与flutter_math_fork:^0.5.0发生了冲突。

我通过使用flutter_math_fork:^0.4.2+2使其工作。 Codemagic构建成功。


1
解决更新到新的Flutter版本后出现此类问题的方法是找出问题实际所在的位置。答案会因您在pubspec.yaml中拥有哪些依赖项而异,因此这里的许多答案可能对您无效。
问题在于您添加到pubspec.yaml的软件包也有它们自己的依赖项列表,而那些软件包也可能有一系列依赖项列表,依此类推。这些被称为瞬态依赖项。结果是您的应用程序依赖于一个大型依赖关系“树”中的一堆软件包。当您更新用于应用程序的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 版本(0.3.3+1)存在短暂依赖,该版本无法支持更新的 Flutter 版本。
所以,解决方法是更新我的 flutter_html 版本。对于你来说,可能是不同的软件包或多个软件包。无论是哪个软件包,请前往 pub.dev 上的其变更日志页面,并查看后续版本的变更说明 - 希望你可以看到类似于“更新依赖项”的内容。
在我的情况下,我使用的是 flutter_html 2.1.5 版本。访问 flutter_html 的变更日志页面,在 2.2.0 版本下有一个说明:

为了兼容 Flutter 2.5,升级了最小的 flutter_math_fork 版本

太好了!因此,我将 flutter_html 版本更新为 2.2.0,运行 flutter pub get,问题得以解决。

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

当然,您也可以使用flutter pub upgrade同时更新所有软件包,但是如果您的项目很大,请确保至少分配整天时间来可能解决破坏性变化、依赖关系问题和错误等问题。


1

我遇到了同样的错误,我在pubscpec.yaml中加入了以下代码,现在它可以正常工作了。如果不行,你可以尝试上述方法。

dependency_overrides:
provider: 6.0.0

1
在我的情况下:
步骤1:在pubspec.yaml中更新以下依赖项:
  • provider: ^6.0.0
  • flutter_svg: ^0.23.0+1
  • flutter_math_fork: ^0.5.0
步骤2:运行 flutter pub get 步骤3:运行:flutter run 祝好运!

enter image description here


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