Получить данные firestore, когда идентификатор документа равен текущему зарегистрированному идентификатору пользователя во Flutter?

Я хочу показать раздел профиля пользователя после входа в систему и войти в раздел просмотра профиля. В части аутентификации я храню пользовательские данные в базе данных облачного хранилища. там я установил идентификатор документа, равный идентификатору пользователя. Теперь я хочу получить данные поля документа в соответствии с идентификатором пользователя.

Это то, что я сделал,


class MyProfile extends StatefulWidget {

Future<String> getData() async {
    final FirebaseUser user = await FirebaseAuth.instance.currentUser();
    final String uid = user.uid.toString();
    return uid;
  }

 @override
  Widget build(BuildContext context) {

    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: Text('My Profile'),
              backgroundColor: Color(0xFF4A184C),
            ),
            body: 
            StreamBuilder(
             stream: 
             Firestore.instance.collection('Users').document().snapshots(),
              builder: (context, snapshot){
                if(!snapshot.hasData) return Text('Loading Data.. Please Wait...');
               return  
                Column(
                children: <Widget>[
                  Card(
                    child: ListTile(
                      leading: Icon(
                        Icons.account_circle,
                        size: 40,
                        color: Colors.amber,
                      ),
                      title: Text(
                        "Name : " + snapshot.data['username'],
                        style: TextStyle(
                          fontSize: 18,
                            color: Color(0xFF4A184C),
                            fontWeight: FontWeight.bold),
                      ),
                    ),
                  ),
.....


person Shevon Soyza    schedule 04.05.2020    source источник


Ответы (1)


Если у вас есть контроль над созданием документов в Users, вы можете дать им тот же идентификатор, что и uid FirebaseUser.

Вы можете использовать StreamBuilder или FutureBuilder для его получения.

Если вы хотите, чтобы эти данные постоянно обновлялись с помощью StreamBuilder, вы можете использовать функцию асинхронного генератора.

Stream<DocumentSnapshot> getUserStream() async* {
  final uid = await getData();
  yield* Firestore.instance.document("Users/$uid").snapshots();
}

или если вы предпочитаете получать данные только один раз, вы можете использовать FutureBuilder. Будущее может быть получено из следующей функции

Future<DocumentSnapshot> getUser() async {
  final uid = await getData();
  return Firestore.instance.document("Users/$uid").get();
}
person dumazy    schedule 04.05.2020