从实时数据库中获取更多数据

问题描述

我正在尝试根据 StreamBuilder 返回的数据从 Firebase 实时数据库获取其他数据。

Widget build(BuildContext context) {
var authBloc = Provider.of<AuthBloc>(context);
return Scaffold(
  body: SafeArea(
    bottom: false,left: false,right: false,child: Column(
      children: [
        StreamBuilder<User>(
          stream: authBloc.currentUser,builder: (context,snapshot) {
            if (!snapshot.hasData) return CircularProgressIndicator();
            //check if database has data for uid
            //if yes get data from uid for player
            //else create uid in database
            userData(snapshot.data);
            return Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,children: [
                  Text("${myPlayer.first.country}"),SignInButton(
                    Buttons.Facebook,text: 'Sign Out',onpressed: () => authBloc.logout(),)
                ],),);
          },Text("${myPlayer.length}"),],);

}

函数 userData() 与 Firebase 实时数据库交互以获取数据,并且能够成功执行此操作,由正确的打印输出指示。

userData(userdata) async {
//Clear any prevIoUs entry to myPlayer
myPlayer.clear();
//Make a call to database to fetch details of all users
await databaseReference.child('users').once().then((data) {
  //By default assume user doesn't exist
  bool userexists = false;
  //Map the output
  if (data.value != null) {
    var dataMap = data.value;
    dataMap.forEach((key,value) {
      //if the userid exists in database
      if (key == userdata.uid) {
        //mark boolean to true
        userexists = true;
        //add values in database to the myPlayer
        myPlayer.add(global.Player(
          uid: key,displayName: value['displayName'],avatar: value['avatar'],email: value['email'],country: value['country'],));
      }
    });
  }

  //if user doesn't exist and boolean is false
  if (!userexists) {
    //get User Country
    //add default values to myplayer
    myPlayer.add(global.Player(
      uid: userdata.uid,displayName: userdata.displayName,avatar: "default",email: userdata.email,country: country,));
    //add default values to database table
    databaseReference.child('users').child(userdata.uid).set({
      'avatar': "default",'country': country,'email': userdata.email,'displayName': userdata.displayName,});
  }
});
print(myPlayer.first.country);

}

但是,在 StreamBuilder 小部件中它说

════════ Exception caught by widgets library ═══════════════════════════════════
Bad state: No element
The relevant error-causing widget was
StreamBuilder<User>
lib/home.dart:111

我是 StreamBuilder 的新手,如果有人能指导我如何解决这个问题,我将不胜感激。谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)