Невозможно отобразить строку из снимка - PullRequest
0 голосов
/ 25 октября 2019

Я хотел бы получить данные из хранилища и отобразить их в тексте, но всплывающее окно содержит ошибку. Ошибка говорит, что тип «_BroadcsastStream» не является подтипом типа «String». Класс я вызываю метод

void main() => runApp(MaterialApp(
  home : profUser(),
));

class profUser extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home : new profiUser(),
    );
  }
}

class profiUser extends StatefulWidget {
  @override
  _profiUserState createState() => _profiUserState();
}

class _profiUserState extends State<profiUser> {    
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.indigo,
      appBar: AppBar(
        title: Text('Profile'),
        actions: <Widget>[
          IconButton(
            icon: Icon(choices[1].icon),
            onPressed: (){
              logOut();
              Navigator.push(context,MaterialPageRoute(builder: (context)
              => myLogin()));
            },
          ),
        ],
      ),

      body: Column(
        children: <Widget>[
          userDetail(),
        ],
      ),
    );
  }
}

Класс для отображения текста на основе данных из хранилища

class userDetail extends StatelessWidget{
  @override
  Widget build(BuildContext context){
    return new StreamBuilder(
        stream: UniQuery().getUserDetail(),
        builder: (BuildContext context, snapshot){
          if(!snapshot.hasData)
            return new Text('Loading..... Please wait');

          var userDocument = snapshot.data;
          return new Column(
            children: <Widget>[
              Text('Name: ' + userDocument['name']),
              Text('Age: ' + userDocument['age'],toString()),
              Text('Address: ' + userDocument['address']),
              Text('Result: ' + userDocument['result']),
            ],
          );
        }
    );
  }
}

Ниже пустоты, которая используется в приведенном выше коде для получения данных из хранилища

var userID;

      Future<String> getCurrentUser() async{
    final FirebaseUser user = await FirebaseAuth.instance.currentUser();
//    return uID != null ? uID : null;
    final String uID = user.uid.toString();
    return uID;
  }

  setUserDetail() async{
    userID = await getCurrentUser();
  }

1 Ответ

0 голосов
/ 25 октября 2019

Проблема заключается в том, что внутри getUserDetail () вы передаете асинхронную функцию в documents (), поэтому функция возвращает Future. Перед вызовом documents () вы должны сначала получить строку, дождаться завершения асинхронного вызова, а затем передать строку в documents ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...