删除 firebase 用户会导致 Flutter App 无限加载

Deleting a firebase user results in Flutter App having an infinite loading

我正在构建一个需要用户登录的 flutter firebase 应用程序。我的应用程序有一个主页,只有在获取用户数据时才会呈现。如果用户未完全获取,它 returns 加载小部件。

    return StreamBuilder<UserData>(
    stream: DatabaseService(uid: uid).userData,
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        UserData? userData = snapshot.data;
        return Scaffold(...);
    }else {
      return LoadingWidget();
     }

如果用户注销并重新登录时加载仅显示一瞬间,则此方法效果很好。但是,如果用户在登录时被删除,加载屏幕会继续显示。此外,如果我更改用户的 firestore 文档并删除 UserData 模型的字段之一,则会显示无限加载屏幕。有人知道如何解决这个问题吗?

谢谢。

您的代码尝试为用户加载数据,如果(还)没有数据,它会显示 LoadingWidget。如果可以加载数据,这将按预期工作,但如果没有要加载的数据(或没有当前用户为其加载数据),您将永久呈现 LoadingWidget.

您需要区分这两种情况,可能还有更多情况。一个简单的方法:

builder: (context, snapshot) {
  if (snapshot.hasData) {
    UserData? userData = snapshot.data;
    return Scaffold(...);
  } else if (snapshot.hasError) {
    return Text('Error loading user data: ${snapshot.error}');
  } else {
    return LoadingWidget();
  }

我建议查看 StreamBuilder widget 的文档和示例,因为它的代码显示了如何处理所有情况。