Flutter - Dart: как правильно вернуть текстовый виджет из моей функции - PullRequest
0 голосов
/ 20 января 2020

так что моя проблема в том, что я пытаюсь загрузить экран после входа в систему с пользователем (firebase auth), это работает нормально. При входе в систему я сопоставляю идентификатор пользователя из firebase auth с тем же идентификатором в облаке firebase, чтобы я мог получить поле данных «work_title» и отобразить его непосредственно в текстовом виджете.

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

Мой вопрос сейчас: почему я не могу вернуть return Text(sh.data['work_title'].toString()); -часть? Я ввожу эту часть кода, но она возвращает только return Text("??"); -часть.

Я также прикрепил изображение этого.

Спасибо:)

 Widget buildText2() {
    return FutureBuilder(
        future: FirebaseAuth.instance.currentUser(),
        builder: (context, AsyncSnapshot<FirebaseUser> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(
              child: Text("Loading ..."),
            );
          } else {
            if (snapshot.hasData) {
              print(snapshot.hasData); // prints true, so we enter this part:
              DocumentReference doc = Firestore.instance
                  .collection("user_profiles")
                  .document(snapshot.data.uid);
              doc.get().then((sh) {
                if (sh.exists) {
                  print(sh.exists); // prints true, så vi enter here as well:
                  print(sh.data['work_title'].toString());
                  return Text(sh.data['work_title'].toString()); // <-- I want to return this
                }
              });
            }
          } return Text("??");
        });
  }

Скриншот кода

1 Ответ

1 голос
/ 20 января 2020

Может быть, вы можете попробовать следующее (к сожалению, я не могу это проверить ..):

FutureBuilder(
  future: FirebaseAuth.instance.currentUser(),
   builder: (context, AsyncSnapshot<FirebaseUser> snapshot) {
     if (snapshot.connectionState == ConnectionState.waiting) {
       return Center(child: Text("Loading ..."));
     } else {
       if (snapshot.hasData) {
         print(snapshot.hasData); // prints true, so we enter this part:
         DocumentReference doc = Firestore.instance
           .collection("user_profiles")
           .document(snapshot.data.uid);
         return FutureBuilder(
           future: doc.get(),
           builder: (context, AsyncSnapshot snapshot) {
             if (snapshot.hasData) {
               if (snapshot.data.exists) {
                 return Text(snapshot.data.data['work_title'].toString()); // <-- I want to return this
               } else {
                 return Text('sh does not exists..');
               }
             } else {
               return Text('Still Loading...');
             }
            },
           );
          }
         }
       return Text("??");
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...