Flutter 无法显示快照中的字符串

Flutter 无法显示快照中的字符串,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我想从firestore获取数据并显示在文本中,但eror弹出了一个窗口。 错误说明类型“\u BroadcsastStream”不是类型“String”的子类型。 类调用该方法 void main() => runApp(MaterialApp( home : profUser(), )); class profUser extends StatelessWidget { @override Widget build(BuildContext context) {

我想从firestore获取数据并显示在文本中,但eror弹出了一个窗口。 错误说明类型“\u 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(),
        ],
      ),
    );
  }
}
void main()=>runApp(MaterialApp(
主页:profUser(),
));
类profUser扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
主页:新用户(),
);
}
}
类profiUser扩展StatefulWidget{
@凌驾
_profiUserState createState();
}
类_profiUserState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.indigo,
appBar:appBar(
标题:文本(“概要文件”),
行动:[
图标按钮(
图标:图标(选项[1]。图标),
已按下:(){
注销();
Navigator.push(上下文,MaterialPage路由(生成器:(上下文)
=>myLogin());
},
),
],
),
正文:专栏(
儿童:[
userDetail(),
],
),
);
}
}
类以基于firestore中的数据显示文本

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();
  }
类userDetail扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新的StreamBuilder(
流:UniQuery().getUserDetail(),
生成器:(BuildContext上下文,快照){
如果(!snapshot.hasData)
返回新文本(“正在加载…”请稍候);
var userDocument=snapshot.data;
返回新列(
儿童:[
Text('Name:'+userDocument['Name']),
Text('Age:'+userDocument['Age'],toString()),
Text('Address:'+userDocument['Address']),
Text('Result:'+userDocument['Result']),
],
);
}
);
}
}
下面是在上述代码中用于从firestore获取数据的空格

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();
  }
var用户id;
未来getCurrentUser()异步{
final FirebaseUser user=等待FirebaseAuth.instance.currentUser();
//返回uID!=null?uID:null;
最后一个字符串uID=user.uID.toString();
返回uID;
}
setUserDetail()异步{
userID=等待getCurrentUser();
}

问题出在getUserDetail()中,您正在向documents()传递一个异步函数,以便该函数返回未来。在调用documents()之前,应该首先获取字符串,等待异步调用完成,然后将字符串传递给documents()

你在其他字段上也更改了吗?姓名、年龄、地址、成绩?是的,我都有。我还尝试注释其他字段,只留下名称。但是仍然说类型“\u BroadcsastStream”不是类型“String”的子类型。在控制台中,您是否检查了哪行代码是错误?类型“\u BroadcastStream”不是导致错误的小部件was:列的用户创建的“字符串”类型的子类型file:///D:/Compile/ttpproject/lib/profileUser.dart:45:13Try 重新安装/重新启动应用程序,不要使用热重新加载。