我要监听 firebase AuthStateChanges
流并为流提供 streamProvider
以根据流值更改视图。我这样做了:
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
Stream get currentUser => _auth.authStateChanges();
}
final userStream = StreamProvider.autoDispose((ref) => AuthService().currentUser);
class AuthenticationWrapper extends ConsumerWidget {
@override
Widget build(BuildContext context, ScopedReader watch) {
final user = watch(userStream);
print('AutenticationWrapper build method got called');
return user.when(
data: (data) {
if (data?.uid == null) {
print('I am currently Logged out ?');
return LogInPage();
} else {
print('I am logged in user?');
return HomePage();
}
},
loading: () => CircularProgressIndicator(),
error: (e, s) => Text('Oops'),
);
}
}
我希望在更改 AsyncValue
的 streamProvider
时呈现登录页面。上面的代码没有按预期工作;实际上,它会打印消息,但不会返回它应该返回的 Widget。但是,当我热重启应用程序时,它会根据流值呈现正确的 Widget。
为什么 build 方法在此:final user = watch(userStream);
收到更新时不重新呈现?
答案 0 :(得分:0)
我认为您可能应该在流本身更新时收到通知 watch(userStream.stream)
。不过我没怎么玩过 StreamProvider,所以我可能是错的。