_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 或出错。

  1. 我可以使用 ChangeNotifier 来实现吗?

  2. 我还能怎么做?

您可以创建一个新的提供者,它将依赖于先例:

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);