Получить данные о пожарном депо, когда идентификатор документа равен текущему зарегистрированному идентификатору пользователя во Flutter? - PullRequest
0 голосов
/ 04 мая 2020

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

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


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),
                      ),
                    ),
                  ),
.....

1 Ответ

2 голосов
/ 04 мая 2020

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

Вы можете выбрать StreamBuilder или FutureBuilder для извлечения.

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

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...