FutureProvider 使用 .whenData() shorthand
FutureProvider using .whenData() shorthand
Riverpod 提供了一个 shorthand 使用 .whenData() 的方法,您无需提供加载和错误参数。但是我找不到关于此代码如何用于 return 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() 来 return 小部件吗?
为此我必须阅读一份非常有趣的文档。
似乎 whenData
听起来可能并不完全像它应该做的那样。
因为它所做的只是 return 一个 AsyncValue<Widget>
而不是像 when
函数那样直接 returning Widget
。
所以一种使用方法是,
return cityListFuture.whenData((val) => Text(val)).data!.value;
在这里,value
就是你的 Text(value)
本身。
这里要注意的一件事是 !
符号,因为 data
可以为空。所以你必须手动进行 if
检查。
这里要注意的另一件事是,你也可以用这样的东西来达到同样的目的,
return Text(watch(cityListFutureProvider).data?.value);
假设您的 value
是一个字符串。
Riverpod 提供了一个 shorthand 使用 .whenData() 的方法,您无需提供加载和错误参数。但是我找不到关于此代码如何用于 return 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() 来 return 小部件吗?
为此我必须阅读一份非常有趣的文档。
似乎 whenData
听起来可能并不完全像它应该做的那样。
因为它所做的只是 return 一个 AsyncValue<Widget>
而不是像 when
函数那样直接 returning Widget
。
所以一种使用方法是,
return cityListFuture.whenData((val) => Text(val)).data!.value;
在这里,value
就是你的 Text(value)
本身。
这里要注意的一件事是 !
符号,因为 data
可以为空。所以你必须手动进行 if
检查。
这里要注意的另一件事是,你也可以用这样的东西来达到同样的目的,
return Text(watch(cityListFutureProvider).data?.value);
假设您的 value
是一个字符串。