_provider.when 的 Flutter Riverpod 替代品
Flutter Riverpod alternative to a _provider.when
寻找
的替代品
@override
Widget build(BuildContext context) {
final _user = useProvider(MyUserProvider);
...
return _user.when(data: data, loading: loading, error: error)
我的大部分组件
我想用
final _user = useProvider(MyUserProvider);
// then
return Text(_user.name)
直接是因为 firebase 用户数据流已经在树中,永远不能为 null 或出错。
我可以使用 ChangeNotifier 来实现吗?
我还能怎么做?
您可以创建一个新的提供者,它将依赖于先例:
final connectedUserProvider = Provider<User>((ref) {
final userState = ref.watch(MyUserProvider.state);
return userState.maybeWhen(data: (User user) => user, orElse: () => throw "you should not be there");
});
类似这样的东西可能对你有用:
final authStream = StreamProvider<User?>((ref) => ref.watch(FirebaseAuth.instance).authStateChanges());
final user = Provider<User?>((ref) => ref.watch(authStream).data?.value);
然后:
final _user = useProvider(user);
return Text(_user?.name ?? '');
// or if you're sure the value is not null or your app relies on it being not null
return Text(_user!.name);
寻找
的替代品@override
Widget build(BuildContext context) {
final _user = useProvider(MyUserProvider);
...
return _user.when(data: data, loading: loading, error: error)
我的大部分组件
我想用
final _user = useProvider(MyUserProvider);
// then
return Text(_user.name)
直接是因为 firebase 用户数据流已经在树中,永远不能为 null 或出错。
我可以使用 ChangeNotifier 来实现吗?
我还能怎么做?
您可以创建一个新的提供者,它将依赖于先例:
final connectedUserProvider = Provider<User>((ref) {
final userState = ref.watch(MyUserProvider.state);
return userState.maybeWhen(data: (User user) => user, orElse: () => throw "you should not be there");
});
类似这样的东西可能对你有用:
final authStream = StreamProvider<User?>((ref) => ref.watch(FirebaseAuth.instance).authStateChanges());
final user = Provider<User?>((ref) => ref.watch(authStream).data?.value);
然后:
final _user = useProvider(user);
return Text(_user?.name ?? '');
// or if you're sure the value is not null or your app relies on it being not null
return Text(_user!.name);