Необходимо создать строку для UID текущего пользователя, но постоянно получаю сообщение об ошибке («Future <String>Function ()» нельзя присвоить типу параметра «String».) - PullRequest
0 голосов
/ 30 сентября 2019

Это виджет моей домашней страницы ...

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(''),
        actions: <Widget>[
          FlatButton(
            onPressed: () => _signOut(context),
            child: Text('Sign out'),
          )
        ],
      ),
      body: Container(    ),
    );
  }
}

У меня есть коллекция Firebase с именем "users", внутри нее есть документы, эти документы создаются с использованием UID зарегистрированного / зарегистрированного пользователя, например«Dn0dXfzwhjWZRKYqO8N1VrUIzNm2», и в этих документах есть поле: «firstname» ....

Я хочу использовать Streambuilder (в теле моего скаффолда), например:

StreamBuilder(
                stream: Firestore
.instance.collection('users')
.document('Dn0dXfzwhjWZRKYqO8N1VrUIzNm2')
.snapshots(),
                builder: (context, snapshot) {
                  if (!snapshot.hasData) return const Text("Loading...");
                  return _buildFirstname(context, snapshot.data);
                })

но вместо «Dn0dXfzwhjWZRKYqO8N1VrUIzNm2» в качестве «документа» я хочу, чтобы это была строка, которая динамически вызывает UID пользователя, но она просто не будет работать ...

Я прочитал всеответы от людей до сих пор, но я не могу понять, что я должен делать с предоставленной информацией, потому что это не достаточно ясно для меня ...

PS: виджет "_buildFirstname" будетпросто вот так

Widget _buildFirstname(
      BuildContext context, DocumentSnapshot document) {
    return 
        Text(document['firstname'],

    );
  }

Кстати, мое приложение основано на этом видео.

Как и в этом видео: https://www.youtube.com/watch?v=nxu4bMpPvCQ

ОГРОМНОЕ спасибо всемкто может помочь мне понять это. Я думаю, что мне нужен кто-то, чтобы объяснить ответ более подробно.

Мне действительно нужно это понять, чтобы я мог прогрессировать.

1 Ответ

2 голосов
/ 30 сентября 2019
///this variable will use in StreamBuilder

String userId = "";

@override
void initState() {
    super.initState();

    ///get current user and assign his id 
    FirebaseAuth.instance.currentUser().then((FirebaseUser user){
        setState(() {
           userId = user.uid; 
        });
    });

}

в вашем StreamBuilder (возможно, вам нужно проверить, является ли userId нулевым или нет)

StreamBuilder(
                stream: Firestore
.instance.collection('users')
.document(userId)
.snapshots(),
                builder: (context, snapshot) {
                  if (!snapshot.hasData) return const Text("Loading...");
                  return _buildFirstname(context, snapshot.data);
                })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...