Android 如何在Flatter中访问DocumentReference数组?

Android 如何在Flatter中访问DocumentReference数组?,android,firebase,flutter,google-cloud-firestore,Android,Firebase,Flutter,Google Cloud Firestore,我想访问当前登录用户的所有注册事件。我现在有以下代码 stream: Firestore.instance.collection('users').document(email).snapshots(), builder: (context, snapshot){ if(!snapshot.hasData){ return Text("Loading.."); } return Center(

我想访问当前登录用户的所有注册事件。我现在有以下代码

       stream: Firestore.instance.collection('users').document(email).snapshots(),
       builder: (context, snapshot){
         if(!snapshot.hasData){
           return Text("Loading..");
         }
         return Center(
          child: new Container(
            child: new PageView.builder(
                onPageChanged: (value) {
                  setState(() {
                    currentpage = value;
                  });
                },
                controller: controller,
                itemCount: snapshot.data['reg_events'].length,
                itemBuilder: (context, index) => builder(index, snapshot.data)),
          ),
        );
       }
     ),
“建筑商”是:

builder(int index, DocumentSnapshot document) {
    return new AnimatedBuilder(
      animation: controller,
      builder: (context, child) {
        double value = 1.0;
        if (controller.position.haveDimensions) {
          value = controller.page - index;
          value = (1 - (value.abs() * .5)).clamp(0.0, 1.0);
        }

        return new Center(
          child: new SizedBox(
            height: Curves.easeOut.transform(value) * 200,
            width: Curves.easeOut.transform(value) * 1000,
            child: child,
          ),
        );
      },
      child: new Card(
        child: Text(document.data['reg_events'][0].toString(),
        textAlign: TextAlign.center,
        style: TextStyle(fontSize: 15, color: Colors.white),),
        margin: const EdgeInsets.all(10.0),
        color: index % 2 == 0 ? Colors.blue : Colors.red,
      ),
    );
  }

但它输出“DocumentReference”的实例。如何访问此文档参考?

可能它不理解reg\u事件作为列表,因此请尝试此

 stream: Firestore.instance.collection('users').document(email).snapshots(),
  builder: (context, snapshot){
     List regEvent = new List();
     if(snapshot.hasData){
        regEvent = snapshot.data['reg_events'];
      }
      if(!snapshot.hasData){
        return Text("Loading..");
      }
      return Center(
           child: new Container(
                 child: new PageView.builder(
                         onPageChanged: (value) {
                                setState(() {
                                      currentpage = value;
                                });
                          },
                         controller: controller,
                         itemCount: regEvent.length,
                         itemBuilder: (context, index) { 
                               print(regEvent[index]);
                               return builder(index, snapshot.data)),}
                      ),
               );
         }
),

可能它无法理解注册表事件作为列表,因此请尝试以下操作

 stream: Firestore.instance.collection('users').document(email).snapshots(),
  builder: (context, snapshot){
     List regEvent = new List();
     if(snapshot.hasData){
        regEvent = snapshot.data['reg_events'];
      }
      if(!snapshot.hasData){
        return Text("Loading..");
      }
      return Center(
           child: new Container(
                 child: new PageView.builder(
                         onPageChanged: (value) {
                                setState(() {
                                      currentpage = value;
                                });
                          },
                         controller: controller,
                         itemCount: regEvent.length,
                         itemBuilder: (context, index) { 
                               print(regEvent[index]);
                               return builder(index, snapshot.data)),}
                      ),
               );
         }
),

DocumentReference就像指向一个文档的指针。您可以使用
.get
方法获取单个文档,该方法返回
Future
。因为您有一个数组,所以您可以使用流来获得一系列未来

List references=[ref,ref,ref];
var myStream=Stream.fromFutures(references.map((ref)=>ref.get()).toList());
StreamBuilder(生成器:…,流:myStream);
但是

Firestore有查询功能,所以如果您实际使用它,应该会更好。您应该能够引用您的
reg\u事件
,如下所示:

Firestore.instance.collection('users').document("$email/reg_events").snapshots();

DocumentReference就像指向一个文档的指针。您可以使用
.get
方法获取单个文档,该方法返回
Future
。因为您有一个数组,所以您可以使用流来获得一系列未来

List references=[ref,ref,ref];
var myStream=Stream.fromFutures(references.map((ref)=>ref.get()).toList());
StreamBuilder(生成器:…,流:myStream);
但是

Firestore有查询功能,所以如果您实际使用它,应该会更好。您应该能够引用您的
reg\u事件
,如下所示:

Firestore.instance.collection('users').document("$email/reg_events").snapshots();

在此示例中,将创建一个用户对象,其中包含实体(或事件)的引用列表。然后将该列表传递给DatabaseService类,该类返回EntityDetails流对象的列表

数据库服务类:

final CollectionReference entityCollection =
      Firestore.instance.collection('entities');
  final CollectionReference userCollection =
      Firestore.instance.collection('user');

 Stream<UserDetails> get userDetails {
    return userCollection
        .document(uid)
        .snapshots()
        .map(_userDetailsFromSnapshot);
  }

UserDetails _userDetailsFromSnapshot(DocumentSnapshot snapshot) {
    return UserDetails(
        email: snapshot.data['email'],
        phone: snapshot.data['phone'],
        fname: snapshot.data['fname'],
        lname: snapshot.data['lname'],
        streetNr: snapshot.data['street_nr'],
        city: snapshot.data['city'],
        entities: List.from(snapshot.data['entities']));
  }

 List<Stream<EntityDetails>> getEntitiesFromDRList(
      List<DocumentReference> entities) {
    List<Stream<EntityDetails>> elist = new List();
    entities.forEach((element) {
      elist.add(element.snapshots().map((_entityDetailsFromSnapshot)));
    });
    return elist;
  }

EntityDetails _entityDetailsFromSnapshot(DocumentSnapshot snapshot) {
return EntityDetails(
  uid: uid,
  name: snapshot.data['name'],
  description: snapshot.data['description'],
  type: snapshot.data['type'],
  geoPoint: snapshot.data['geopoint'],
  adressString: snapshot.data['adress_string'],
  email: snapshot.data['email'],
  phone: snapshot.data['phone'],
);}
用户对象

class UserDetails {
  final String email;
  final String phone;
  final String fname;
  final String lname;
  final String streetNr;
  final String city;
  final List<DocumentReference> entities;

  UserDetails(
      {this.email,
      this.phone,
      this.fname,
      this.lname,
      this.streetNr,
      this.city,
      this.entities});
}
类用户详细信息{
最终字符串电子邮件;
最终字符串电话;
最终字符串fname;
最后的字符串名称;
最终字符串街道编号;
最后的字符串城市;
最后名单实体;
用户详细信息(
{this.email,
这个电话,
这个.fname,
这是我的名字,
这条街道,
这个城市,
这是(实体});
}

在本例中,创建了一个用户对象,其中包含实体(或事件)的引用列表。然后将该列表传递给DatabaseService类,该类返回EntityDetails流对象的列表

数据库服务类:

final CollectionReference entityCollection =
      Firestore.instance.collection('entities');
  final CollectionReference userCollection =
      Firestore.instance.collection('user');

 Stream<UserDetails> get userDetails {
    return userCollection
        .document(uid)
        .snapshots()
        .map(_userDetailsFromSnapshot);
  }

UserDetails _userDetailsFromSnapshot(DocumentSnapshot snapshot) {
    return UserDetails(
        email: snapshot.data['email'],
        phone: snapshot.data['phone'],
        fname: snapshot.data['fname'],
        lname: snapshot.data['lname'],
        streetNr: snapshot.data['street_nr'],
        city: snapshot.data['city'],
        entities: List.from(snapshot.data['entities']));
  }

 List<Stream<EntityDetails>> getEntitiesFromDRList(
      List<DocumentReference> entities) {
    List<Stream<EntityDetails>> elist = new List();
    entities.forEach((element) {
      elist.add(element.snapshots().map((_entityDetailsFromSnapshot)));
    });
    return elist;
  }

EntityDetails _entityDetailsFromSnapshot(DocumentSnapshot snapshot) {
return EntityDetails(
  uid: uid,
  name: snapshot.data['name'],
  description: snapshot.data['description'],
  type: snapshot.data['type'],
  geoPoint: snapshot.data['geopoint'],
  adressString: snapshot.data['adress_string'],
  email: snapshot.data['email'],
  phone: snapshot.data['phone'],
);}
用户对象

class UserDetails {
  final String email;
  final String phone;
  final String fname;
  final String lname;
  final String streetNr;
  final String city;
  final List<DocumentReference> entities;

  UserDetails(
      {this.email,
      this.phone,
      this.fname,
      this.lname,
      this.streetNr,
      this.city,
      this.entities});
}
类用户详细信息{
最终字符串电子邮件;
最终字符串电话;
最终字符串fname;
最后的字符串名称;
最终字符串街道编号;
最后的字符串城市;
最后名单实体;
用户详细信息(
{this.email,
这个电话,
这个.fname,
这是我的名字,
这条街道,
这个城市,
这是(实体});
}

你能包括你的构建者吗?我已经更新了我的帖子@pr0gramist你能包括你的构建者吗?我已经更新了我的帖子@pr0gramist