Как использовать StreamBuilder во Flutter для потоковой передачи результата из другого StreamBuilder

У меня есть два StreamBulder First Stream в коллекции («Пользователи»). Документ («PhoneNum»), который представляет собой имя контента и фотографию. sec Stream in Collection ("Users"). document ("PhoneNum"). document ("FrindList"), который является содержимым Frind PhoneNumber, я хочу, чтобы первый поток получал все результаты sec Stream, который я не хочу создавать Stream для всех FrindList, чтобы получить там имя и фотографию и поместить их в ListView

и я пробую много кода, но он не работает

я пытаюсь сделать вот так

StreamBuilder(
  stream: Firestore.instance.collection("Users")
      .document(names)
      .snapshots(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) {
      return CircularProgressIndicator(
        backgroundColor: Colors.white,
      );
    } else {
      List<Widget> list = [];
      var Frindname = snapshot.data["name"];
      var Frindpic = snapshot.data["ImageURL"];
      var Frindnum = snapshot.data["PhoneNumber"];
      try {

         return GestureDetector(
            onTap: () {
              var chatkey;
              if (widget.phoneN.compareTo(Frindnum) >
                  0) {
                chatkey = widget.phoneN + Frindnum;
                print(chatkey);
              } else {
                chatkey = Frindnum + widget.phoneN;
                print(chatkey);
              }

              Navigator.push(context,
                  MaterialPageRoute(
                      builder: (context) {
                        return Chat();
                      }));
            },
            child: Container(
              decoration: BoxDecoration(
                borderRadius: BorderRadius.vertical(
                    bottom: Radius.elliptical(
                        100, 100),
                    top: Radius.elliptical(100, 100)),
                color: Colors.grey[200],),
              padding: EdgeInsets.all(20),
              child: Row(
                children: <Widget>[
                  CircleAvatar(
                    backgroundImage: NetworkImage(
                        Frindpic), radius: 30,),
                  SizedBox(width: 10,),
                  Text(Frindname, style: TextStyle(
                      color: Colors.deepPurple,
                      fontSize: 18,
                      fontWeight: FontWeight.bold),),
                ],
              ),
            ),

        );


      } catch (e) {
        return CircularProgressIndicator(
          backgroundColor: Colors.white,);
      }
    }
  },

);

а затем вызовите этот метод внутри другого streambuilder

StreamBuilder<QuerySnapshot>(
                stream: Firestore.instance.collection("Users").document(widget.phoneN).collection("FrindList").snapshots(),
                builder: (context, snapshot) {
                  if (!snapshot.hasData) {
                    CircularProgressIndicator(
                      backgroundColor: Colors.white,
                    );
                  }
                    try {
                    List<Widget> e = [];
                    snapshot.data.documents.forEach((d) {
                      print(d.data["FrindKey"]);
                      e.add(Streems(d.data["FrindKey"]));
                    }

                    );
                   return ListView(
                     children: e,
                   );

                     } catch (e) {
                      print(e);
                      return Text("No Friend Found", style: TextStyle(
                          color: Colors.deepPurple,
                          fontSize: 24,
                          fontWeight: FontWeight.bold),);
                    }
                  }

                 ),

и это моя структура базы данных

структура базы данных


person Kamal Samir    schedule 12.06.2019    source источник


Ответы (1)


он разрешается используемым sec streambuilder внутри listview.builder, который вернулся из первого streambuilder, который дает список пользователей, и sec streambuilder получит там детали в зависимости от результата первого потока

person Kamal Samir    schedule 13.06.2019