在我的第一个屏幕中,我使用了Firebase中的数据并将其存储在提供程序中。 此数据将在另一个屏幕中使用。
@override
void initState() {
super.initState();
FirestorePreviousPage.documentsListDescending().then((query) {
final totalHisabProvider = Provider.of<TotalHisab>(context, listen: false);
totalHisabProvider.addItemsFromSnapshot(query);
final unpaidHisabProvider = Provider.of<UnpaidHisab>(context, listen: false);
unpaidHisabProvider.addItems(query);
final paidHisabProvider = Provider.of<PaidHisab>(context, listen: false);
paidHisabProvider.addItems(query);
});
}
documentListAscending方法:
static Future<QuerySnapshot> documentsListDescending() async {
final user = await CurrentUser.getCurrentUser();
return await Firestore.instance
.collection(user.uid)
.orderBy('serverTimestamp', descending: true)
.getDocuments();
}
我的注销方法:
static Future<void> logout(BuildContext context) async {
await FirebaseAuth.instance.signOut();
Navigator.of(context).pushNamedAndRemoveUntil(
WelcomeScreen.routeName,
(Route<dynamic> route) => false,
);
}
现在,当我注销并使用其他用户登录时,该新用户仍然可以访问前一个用户的数据。现在我想我了解这部分。只要该应用正常运行,它将数据保留在状态管理中。
但是为什么不从Firebase检索新数据呢?
此行不应该使用新的用户ID .collection(user.uid)
我对如何解决这个问题有个想法。只需使用注销方法清除所有提供程序中的数据。但这感觉不对。我需要了解为什么它先不起作用。
答案 0 :(得分:0)
我最终手动清除了提供程序:
static Future<void> logout(BuildContext context) async {
await FirebaseAuth.instance.signOut();
// Clear all providers
Provider.of<Cart>(context, listen: false).clear();
Provider.of<UnpaidHisab>(context, listen: false).clear();
Provider.of<PaidHisab>(context, listen: false).clear();
Provider.of<TotalHisab>(context, listen: false).clear();
Navigator.of(context).pushNamedAndRemoveUntil(
WelcomeScreen.routeName,
(Route<dynamic> route) => false,
);
}
据我所知,它工作正常。