web-dev-qa-db-ja.com

FlutterでFirebase AuthからユーザーIDを取得するにはどうすればよいですか?

ドキュメントとしてユーザーIDをフィールドとして割り当て、ユーザー関連データをFirestoreに保存したいのですが。

Firebase AuthからユーザーIDを取得する方法

またはユーザーデータをFirestoreに保存するためのより良い方法はありますか?

この方法でFirebase AuthからユーザーIDを取得できませんでした(Text(_userId)は_userId == nullエラーを返します):

String _userId;
  ...

  @override
  Widget build(BuildContext context) {
    FirebaseAuth.instance.currentUser().then((user) {
      _userId = user.uid;
    });

    return new Scaffold(
      appBar: new AppBar(
        title: new Text("App bar"),
      ),
      body: new Text(_userId),
    );
  }
6
Darkhan

FirebaseAuth.instance.currentUser()から返されたFutureが完了する前にウィジェットが構築されているため、__userId_はnullです。それが完了すると、それは遅すぎ、ウィジェットは更新されません。これを処理する1つの方法は、 FutureBuilder を次のように使用することです。

_Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text("App bar"),
    ),
    body: FutureBuilder(
      future: FirebaseAuth.instance.currentUser(),
      builder: (context, AsyncSnapshot<FirebaseUser> snapshot) {
        if (snapshot.hasData) {
          return Text(snapshot.data.uid);
        }
        else {
          return Text('Loading...');
        }
      },
    ),
  );
}
_
19
Herohtar