首页 > 解决方案 > Flutter:名为“read”的成员在扩展“ReadContext”和“BuildContextX”中定义,两者都不是更具体的

问题描述

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

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.

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

标签: flutterblocriverpod

解决方案


这意味着您要导入两个提供相同方法的扩展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 禁止这样做。

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

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


推荐阅读