0

我要监听 firebaseAuthStateChanges流并提供流以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 方法在 this:final user = watch(userStream);收到更新时不重新渲染?

4

1 回答 1

0

我认为您可能应该watch(userStream.stream)在流本身更新时收到通知。不过,StreamProvider 玩得不多,所以我可能是错的。

于 2021-01-22T00:34:52.283 回答