从已知documentID返回单个Firestore字段值

时间:2019-05-16 06:39:04

标签: flutter

我想在Firestore中进行简单的查找,以从集合“属性”中获取给定“ propertyID”(“属性” documentID)的“ propertyName”,并将其分配给变量propertyName。

print()给出'from initstate propertyName ='Future'的实例,而不是Firestore中的实际值。如何提取实际值?

我也尝试过使用StreamBuilder,但仍然遇到相同的问题。

@override
  void initState() {
    super.initState();

    var propertyName = _getPropertyNameFromPropertyID(
        widget.propertyID); // to get propertyName from Firestore
    print('from initstate propertyName = $propertyName');
  }

  Future _getPropertyNameFromPropertyID(propertyID) async {
    DocumentSnapshot snapshot = await Firestore.instance
        .collection('properties')
        .document(propertyID)
        .get();
    String result = snapshot['propertyName'].toString();
    return result;
  }

1 个答案:

答案 0 :(得分:1)

那是因为您的方法返回了Future,所以您将需要使用async / await或直接从Future获得结果。

选项1

    @override
      void initState() {
        super.initState();

        _getPropertyNameFromPropertyID(widget.propertyID).then ((propertyName){
                  print('from initstate propertyName = $propertyName');
            });

      }

选项2

  @override
    void initState() {
      super.initState();
      _loadAsyncData(); 
    }

    _loadAsyncData() async {
      var propertyName = await _getPropertyNameFromPropertyID(
          widget.propertyID); // to get propertyName from Firestore
      print('from initstate propertyName = $propertyName');
    }

    Future _getPropertyNameFromPropertyID(propertyID) async {
      DocumentSnapshot snapshot = await Firestore.instance
          .collection('properties')
          .document(propertyID)
          .get();
      String result = snapshot['propertyName'].toString();
      return result;
    }