删除 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 的文档和示例,因为它的代码显示了如何处理所有情况。
我正在构建一个需要用户登录的 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 的文档和示例,因为它的代码显示了如何处理所有情况。