【问题标题】:Unable to display string from snapshot无法显示来自快照的字符串
【发布时间】:2019-10-25 06:52:57
【问题描述】:

我想从 firestore 获取数据并显示在文本中,但弹出错误。 Thar 错误说类型“_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(),
        ],
      ),
    );
  }
}

根据 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']),
            ],
          );
        }
    );
  }
}

在上述代码中用于从 firestore 获取数据的 void 下方

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();
  }

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    问题出在 getUserDetail() 内部,您将异步函数传递给documents(),因此该函数返回一个Future。在调用documents() 之前,您应该首先获取字符串,等待异步调用完成,然后将字符串传递给documents()。

    【讨论】:

    • 您是否也更改了其他字段?姓名、年龄、地址、结果?
    • 是的,我都做了。我也尝试评论其他字段,只留下名字。但仍然说类型'_BroadcsastStream'不是'String'类型的子类型。
    • 在控制台中,你检查到哪一行代码出错了吗?
    • type '_BroadcastStream' 不是 'String' 类型的子类型 导致错误的小部件的用户创建祖先是:列 file:///D:/Compile/ttpproject/lib /profileUser.dart:45:13
    • 尝试重新安装/重启应用,不要使用热重载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多