问题描述
寻找替代品
@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 用户数据流已经在树中并且永远不会为空或有错误。
-
我可以使用 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);