Firebase 返回null的字符串方法

Firebase 返回null的字符串方法,firebase,dart,google-cloud-firestore,Firebase,Dart,Google Cloud Firestore,我查询firebase并得到预期的答案,但是,当我返回字符串时,它是空的。。。在方法内部,它不是空的 class Util { final Firestore firestore = Firestore.instance; String name; List<User> users = []; String getNomeById(bool retirada, String userId) { firestore .collection('u

我查询firebase并得到预期的答案,但是,当我返回字符串时,它是空的。。。在方法内部,它不是空的

class Util {
  final Firestore firestore = Firestore.instance;
  String name;
  List<User> users = [];

  String getNomeById(bool retirada, String userId) {
    firestore
        .collection('users')
        .where(FieldPath.documentId, isEqualTo: userId)
        .snapshots()
        .listen((snapshot) {
      users = snapshot.documents.map((d) => User.fromDocument(d)).toList();

      if (retirada) {
        name = users[0].name;
        //  print(name); name is here!
      } else {
        name = 'Other';
      }
    });

    return name; // IS NULL
  }
}
class-Util{
最终Firestore Firestore=Firestore.instance;
字符串名;
列出用户=[];
字符串getNomeById(bool retirada,字符串userId){
火库
.collection('用户')
.where(FieldPath.documentId,isEqualTo:userId)
.快照()
.listen((快照){
users=snapshot.documents.map((d)=>User.fromDocument(d)).toList();
如果(视网膜){
name=用户[0]。名称;
//打印(姓名);姓名在这里!
}否则{
名称='其他';
}
});
返回名称;//为空
}
}

如果只想获取返回的查询,请使用
getDocuments
方法,而不是
snapshots()
。它返回一个
未来
。这样,您就可以使用现有代码正确返回
字符串
。例:

Future getNomeById(bool retirada,String userId)异步{
QuerySnapshot快照=等待firestore
.collection('用户')
.where(FieldPath.documentId,isEqualTo:userId)
.getDocuments();
users=snapshot.documents.map((d)=>User.fromDocument(d)).toList();
如果(视网膜){
name=用户[0]。名称;
}否则{
名称='其他';
}
返回名称;
}

为什么您要从firestore获得
?这有什么特别的原因吗?或者你只是想得到那个查询返回的结果?@Christophermore我只是想得到返回的结果Hanks但是现在。。。我试图在一个小部件返回警报对话框(标题:Text(u.getNomeById(retirada,userId)?“teste”)中使用返回,类型“Future”不是“String”@Manzini”类型的子类型,应该作为一个单独的问题来问,或者你可以看其他问题,但是你需要等待
等待
。你应该阅读
Future
s。