BuildContext中未定义context.select。

26

为什么我不能使用Provider的任何扩展方法(context.selectcontext.readcontext.listen)?

我收到了这样的静态错误。

方法"select"未定义于类型"BuildContext"。请尝试更正名称为已存在的方法的名称,或定义一个名为"select"的方法。

class MyWidget extends StatelessWidget {
  

  @override
  Widget build(BuildContext context) {

    // Following line causes the problem
    var isFavorite = context.select<FavModel, bool>(
      (fav) => fav.items.contains(item),
    );

    return OtherWidget(...);
  }
}

2
你应该在这个文件中导入 provider 包。 - easeccy
是的,截图是我发布的代码的一部分,而且包已经被导入了。 - Rianou
你的提供者版本是什么? - easeccy
它是 provider: ^3.0.0 - Rianou
你应该升级 - easeccy
3个回答

56

context.selectcontext.readcontext.listen是来自Provider的扩展方法。要使用它们,您应该导入Provider。

请在文件顶部添加以下内容:

import 'package:provider/provider.dart';

默认情况下应该自动导入。这是一个已知的问题


10
在我的情况下,应该导入'package:flutter_bloc/flutter_bloc.dart';谢谢提示! - EngineSense

7

我在VS Code中使用Bloc,当调用context.read时,出现了这个错误。这个错误是因为我没有导入bloc库,所以才会出现这种类型的错误。确保您已经导入了相关的库。在我的情况下。

import 'package:flutter_bloc/flutter_bloc.dart';

5

嗨,如果使用 Riverpod 并且在使用 contect.read 时出现错误,请添加这一行代码。

 import 'package:flutter_riverpod/flutter_riverpod.dart';

嗨,伙计,尽管导入了flutter_riverpod文件,但仍然遇到相同的错误,请帮忙解决。 - Vandit Shah
2
嗨,contect.read在riverpod的最新版本中已经被弃用,请遵循文档。 - Erfan Eghterafi
1
好的,非常感谢您的指导,现在是ref.read,我们需要将StatelessWidget转换为ConsumerWidget。 - Vandit Shah

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