【问题标题】:how to query a specific data field from a document in flutter如何在flutter中从文档中查询特定的数据字段
【发布时间】:2020-07-03 03:45:52
【问题描述】:

我正在尝试从我的 firestore 数据库中检索一个字段。数据库中的字段名称是“dob”。这是它的代码


   FirebaseUser currentUser;
  @override
  void initState() {
    super.initState();
    _loadCurrentUser();
  }

  void _loadCurrentUser() {
    FirebaseAuth.instance.currentUser().then((FirebaseUser user) {
      setState(() { // call setState to rebuild the view
        this.currentUser = user;
      });
    });
  }

  Future<String> email() async {

    if (currentUser != null) {
      String d;
      var usId = currentUser.uid;
      await Firestore.instance.collection('User').document(usId).get().then((data){
        d = (data.data['dob'].toString());  
      });
      return d;
    } else {
      return "no current user";
    }
  }

  @override
  Widget build(BuildContext context) {
    var d = email();
    return Container(
      child: Text('$d'??'no'),
    );
  }
}

检索数据后,我尝试将其显示在文本小部件中。但是 Text 小部件唯一显示的是

Instance of a Future<String>

而不是出生日期。我找不到我做错了什么!

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore firebase-authentication


    【解决方案1】:

    email() 返回Future 类型为String,您可以尝试以下操作:

     FirebaseUser currentUser;
     String emailResult;
      @override
      void initState() {
        super.initState();
        _loadCurrentUser();
      }
    
      void _loadCurrentUser() {
        FirebaseAuth.instance.currentUser().then((FirebaseUser user) {
          email(user).then((String result) {
          setState(() { // call setState to rebuild the view
            this.currentUser = user;
            this.emailResult = result;
           });
          });
        });
      }
    
      Future<String> email(user) async {
        if (user != null) {
          await Firestore.instance.collection('User').document(user.uid).get().then((data){
            d = (data.data['dob'].toString());  
          });
          return d;
        } else {
          return "no current user";
        }
      }
    
    
      @override
      Widget build(BuildContext context) {
        return Container(
          child: Text('$emailResult'??'no'),
        );
      }
    }
    

    _loadCurrentUser 方法内部调用email() 方法并将user 作为参数传递,然后在setState() 内部将result 分配给this.emailResult,这样您就可以更新状态,然后将emailResult 分配给Text() 小部件。

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 1970-01-01
      • 2015-07-24
      • 2021-02-01
      • 2020-09-20
      • 2021-07-04
      • 2021-05-22
      • 2019-11-27
      • 2021-04-25
      相关资源
      最近更新 更多