【问题标题】:FutureProvider using .whenData() shorthandFutureProvider 使用 .whenData() 速记
【发布时间】:2021-05-18 11:35:58
【问题描述】:

Riverpod 使用 .whenData() 提供了一种速记方式,您无需提供加载和错误参数。但我找不到如何使用此代码在 build() 函数中返回小部件的示例。

     Widget build(BuildContext context, ScopedReader watch) {
          final cityListFuture = watch(cityListFutureProvider);
          // This one is working fine
          return cityListFuture.when(
              data: (value) {
                return Text("Data goes here");
              },
              loading: () => CircularProgressIndicator(),
              error: (error, stack) {
                return Container();
              });
     
          // This is shorthand for .when() without the need of loading and error
          // ERROR: The return type 'AsyncValue<Text>' isn't a 'Widget', as required by the closure's context.
          return cityListFuture.whenData((value) => Text("Data goes here"));
     }

有人知道我们如何使用 .whenData() 来返回一个小部件吗?

【问题讨论】:

    标签: flutter riverpod


    【解决方案1】:

    为此我不得不阅读一个非常有趣的文档。

    似乎whenData 可能不完全是它应该做的。

    因为它所做的只是返回一个AsyncValue&lt;Widget&gt;,而不是像when 函数那样直接返回Widget。

    所以使用它的一种方法是,

    return cityListFuture.whenData((val) => Text(val)).data!.value;
    

    在这里,value 将是您的 Text(value) 本身。

    这里需要注意的是! 符号,因为data 可以为空。所以你必须手动进行if 检查。

    这里要注意的另一件事是,您也可以通过这样的方式实现相同的目标,

    return Text(watch(cityListFutureProvider).data?.value);
    

    假设您的value 是一个字符串。

    【讨论】:

    • 这是您要找的东西吗?
    • 感谢 Nisanth,whenData().data.value 有效!考虑到大约一年前何时在 0.3.0 中发布 Data(),而这仍然没有完全实现,这让我感到惊讶。无论如何感谢您的帮助,我已经接受了这个作为答案。
    • 不,谢谢你让我回答。浏览他们的源代码非常有趣。 :D 我正在学习 Flutter,它很好。
    • 我开始学习Flutter已经一年多了,一路上做了几个小应用,不得不说这是我目前用过最好玩的移动框架,永不回头再次在 jQueryMobile、PhoneGap、Meteor、Ionic、Xamarin 上!你对 Flutter 使用状态管理吗?您首选的解决方案是什么?
    • 完全同意。我之前使用的是react-native,但性能问题太多了。 Flutter 在处理它们方面要好得多。不幸的是,我还没有遇到过状态管理。我仍然要研究它们。但据我了解,Provider 模式解决了大部分用例。
    猜你喜欢
    • 2021-12-24
    • 2019-12-12
    • 1970-01-01
    • 2022-10-19
    • 2021-11-15
    • 1970-01-01
    • 2022-07-28
    • 2022-08-14
    • 2022-12-14
    相关资源
    最近更新 更多