提供者注销后保留数据

时间:2020-10-08 09:37:16

标签: flutter

在我的第一个屏幕中,我使用了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)

更新数据

我对如何解决这个问题有个想法。只需使用注销方法清除所有提供程序中的数据。但这感觉不对。我需要了解为什么它先不起作用。

1 个答案:

答案 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,
    );
  }

据我所知,它工作正常。