当用户注销并重新登录时,Firestore 侦听器停止侦听

Firestore listeners stops listening when the user is signed out and re-signed in

最小可重现代码

@override
void initState() {
  super.initState();
  
  final col = FirebaseFirestore.instance.collection('foo');
  col.doc('bar').snapshots().listen((event) {
    print('Data = ${event.data()}');
  });
}
  
@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Column(
      children: [
        ElevatedButton(
          onPressed: () => FirebaseAuth.instance.signInAnonymously(),
          child: Text('Sign in'),
        ),
        ElevatedButton(
          onPressed: () => FirebaseAuth.instance.signOut(),
          child: Text('Sign out'),
        ),
      ],
    ),
  );
}

我的安全规则是:

allow read, write: if request.auth != null;

当我注销并再次登录时,我的听众停止收听。这是设计使然吗?每次出现注销事件时,我都应该重新设置我的监听器吗?

是的,您看到的是预期的行为。

由于您的安全规则要求有登录用户才能读取数据,因此退出当前用户会取消所有现有的侦听器(因为它们不再满足要求)。

您必须在新用户完成登录后(重新)附加监听器。