【发布时间】:2021-04-15 01:28:59
【问题描述】:
我正在尝试使用 Hive 将我保存的用户数据流式传输到一个名为“用户”的框中。这是为了显示基于用户提供的信息的屏幕。目前,该框不包含任何数据,因此我希望以下代码显示蓝屏。否则它应该是绿色或紫色。我必须知道读完的值,这样我才能知道返回的值null是数据还没有加载还是用户框是空的。
我正在使用 Riverpod 进行状态管理和这种方法。
我实现了以下两个提供者
final localUserBoxFutureProvider = FutureProvider<Box>((ref) async {
final usersBox = await Hive.openBox('users');
return usersBox;
});
final localUserStreamProvider = StreamProvider<User>((ref) async* {
final usersBox = await ref.watch(localUserBoxFutureProvider.future);
yield* usersBox.watch(key: 0).map((boxEvent) => boxEvent as User);
});
并希望像这样使用它们:
final localUserStream = watch(localUserStreamProvider);
return localUserStream.when(
data: (data) => data == null ? Container(color: Colors.blue) : data.isEmailVerified ? Container(color: Colors.green) : Container(color: Colors.purple),
loading: () => Container(color: Colors.yellow),
error: (e, s) => Container(color: Colors.red)
);
这个实现的问题是它总是显示一个黄色的屏幕,这意味着它卡在加载中。有什么想法吗?
【问题讨论】:
-
“产量”达到了吗?如果是这样,是否调用了“地图”?您的信息流中可能没有推送任何内容
-
@RémiRousselet 我删除了“地图”,然后只检查了
data==null ?。相同的行为。我如何检查您的“产量”部分?
标签: flutter provider riverpod flutter-hive