【发布时间】:2020-12-16 15:29:34
【问题描述】:
我使用 Firebase 身份验证和 Cloud FireStore 插件。我想使用最佳实践,但很难找到一个很好的例子来说明我尝试做的事情。互联网上的每个示例都显示仅使用 Auth 或仅使用 Firestore。
但是,如果想要拥有当前登录用户的个人资料页面怎么办?我首先需要检索当前的用户 ID,所以我使用 FutureBuilder 吗?现在我想从那个用户那里得到结果,所以我之后要使用 StreamBuilder 吗?关于颤振的最佳实践真的很难理解。
有人说在statefullwidget中做,在initstate中放一个快照的引用 其他人正在使用 Statefull Widget。
这是我尝试实现的代码示例,但我确实认为这是愚蠢的方式。
PS:AuthHelper().uid() 将 UID 作为字符串返回。我为此创建了一个函数,但我不知道如何使用 FireAuth 在 1 行中做到这一点。
class EducatorScreen extends StatelessWidget {
static const routeName = '/educatorScreen';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: geAppBar(context, 'Contrôle Éducateur'),
body: FutureBuilder(
future: AuthHelper().uid(),
builder: (BuildContext context, AsyncSnapshot<String> uidSnapshot) {
if (uidSnapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
return StreamBuilder(
stream: Firestore.instance
.collection('users')
.document(uidSnapshot.toString())
.snapshots(),
builder: (ctx, educatorSnapshot) {
if (educatorSnapshot.data['favoriteNursery'] != 'none') {
return nurseryWidget(
context, educatorSnapshot.data['favoriteNursery']);
} else {
return noNurseryWidget(context);
}
});
}),
);
}
}
class AuthHelper {
Future<String> uid() async {
// Return UserID
final FirebaseUser user = await FirebaseAuth.instance.currentUser();
return user.uid;
}
}
【问题讨论】:
标签: flutter google-cloud-firestore firebase-authentication