【发布时间】:2022-11-17 01:43:25
【问题描述】:
我正在制作一个 Flutter 应用程序,并试图在应用程序中获取用户数据。
所以基本上,用户使用他的信息(姓名、电子邮件、密码)注册,当他登录时,这些数据显示在 ProfilePage 中。
根据 Firestore 文档,我应该使用 StreamBuilder 来获取他的数据。
此时,一切正常。
问题是,当用户注销并且另一个用户登录时,ProfilePage 显示先前用户的数据(用户已注销)。
只有当我重新启动应用程序时,我才能获得正确的数据。
这是我的ProfilePage:
class UserInformation extends StatefulWidget {
@override
_UserInformationState createState() => _UserInformationState();
}
class _UserInformationState extends State<UserInformation> {
final _uid = FirebaseAuth.instance.currentUser!.uid;
final Stream<QuerySnapshot> _usersStream =
FirebaseFirestore.instance.collection('Users')
.doc(_uid)
.collection('UserData')
.snapshots();
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
key: Key(_uid),
stream: _usersStream,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return const Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const Text("Loading");
}
return ListView(
children: snapshot.data!.docs
.map((DocumentSnapshot document) {
Map<String, dynamic> data =
document.data()! as Map<String, dynamic>;
return ListTile(
title: Text(data['full_name']),
subtitle: Text(data['company']),
);
})
.toList()
.cast(),
);
},
);
}
}
我看到这是一个在 SO 上被问过多次的问题,但我找不到好的解决方案。我试图在 StreamBuilder 中添加一个唯一键,但它并没有解决问题。
我也看到了didUpdateWidget的用法,但是我不明白怎么用。
【问题讨论】:
标签: flutter dart google-cloud-firestore flutter-streambuilder