Flutter:在扩展“ReadContext”和“BuildContextX”中定义了一个名为“read”的成员,这两个都不是更具体的

问题描述

我的应用程序中有一个返回按钮:

onpressed: () {
                    return context
                        .read(FavoriteIds.provider.notifier)
                        .toggle(doa.id.toString());
                  },

在这种情况下,我使用了一个 riverpod 提供者。但是当我想导入一个 Flutter_bloc 包时,read 关键字将出现此消息错误 A member named 'read' is defined in extensions 'ReadContext' and 'BuildContextx' and neither is more specific. Try using an extension override to specify the extension you want to to be chosen.

请帮我解决这个问题。谢谢:)

解决方法

这意味着您要导入两个提供相同方法 read 的扩展。考虑这个例子:

extension Ext1 on String {
  void foo() => print("from extension 1");
}

extension Ext2 on String {
  void foo() => print("from extension 2");
}

void main() {
  String s = "hello";
  s.foo();
}

这段代码应该打印什么?没有明显的答案,为了避免意外的编程错误,Dart 禁止这样做。

您可以在 read 方法上尝试“转到定义”(在大多数 IDE 中单击 ctrl/cmd)以导航到定义它的文件之一,然后删除相应的导入语句。

但是,删除该文件中的所有导入语句并使用自动完成功能重新添加它们可能会更快