【问题标题】:Can't watch object instance with Riverpod无法使用 Riverpod 观看对象实例
【发布时间】:2022-01-09 13:43:42
【问题描述】:

在 Flutter Web 项目中,我遇到了 Riverpod 的这个问题:

Consumer(
  builder: (context, watch, child) {
    final om=watch(human);  
    return Text(om.name); }

'watch' 带有下划线,编译器显示:The expression doesn't evaluate to a function, so it can't be invoked. 快速修复建议是从括号中删除人。当然,当我还有一些战斗余地时,这不会发生。这是人的定义:

final human=ChangeNotifierProvider((ref)=>Human()); 

class Human with ChangeNotifier{String name="tananana";}

我无法告诉你我正在导入哪个版本的 Riverpod,因为我不得不在 pubspec.yaml 中未指定它,以便它可以解决它与其他导入的冲突,但我在频道上主运行版本 2.9.0-1.0.pre.294

任何建议都会受到重视。

【问题讨论】:

    标签: flutter dart flutter-web riverpod


    【解决方案1】:

    您很可能使用的是 Riverpod 1.0.x 版本,它更改了侦听提供程序的语法。

    TL;DR,Consumer 不接收“watch”作为参数,而是接收“ref”。因此,要监视提供程序,您需要执行以下操作:

    Consumer(
      builder: (context, ref, child) {
        final om = ref.watch(human);
    

    更多信息请见the migration guide

    【讨论】:

    • 做到了!!!你=救命稻草
    • 这个版本你不会碰巧知道怎么做 context.read 吧?
    • @EightRice 改为“ref.read”
    • 就编译器而言没有“ref”,所以我最终降级到旧版本。
    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2018-10-04
    • 2019-09-21
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多