问题描述
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() 返回一个小部件?
解决方法
为此我必须阅读一个非常有趣的文档。
看起来 whenData
可能不是它应该做的。
因为它所做的只是返回一个 AsyncValue<Widget>
,而不是像 Widget
函数那样直接返回 when
。
所以使用它的一种方法是,
return cityListFuture.whenData((val) => Text(val)).data!.value;
在这里,value
将是您的 Text(value)
本身。
这里需要注意的一件事是 !
符号,因为 data
可以为空。因此,您必须手动进行 if
检查。
这里要注意的另一件事是,你也可以用这样的东西来达到同样的目的,
return Text(watch(cityListFutureProvider).data?.value);
假设您的 value
是一个字符串。