Flutter Riverpod 替代 _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 用户数据流已经在树中并且永远不会为空或有错误

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