как изменить будущее на Streambuilder?

IM использовал Futurebuilder, но не изменил его на Streambuilder. Итак, мой вопрос: все ли я делаю правильно или все еще использую какие-то будущие методы, которые могут быть методом Stream? И если я буду использовать будущие методы, это нормально или это приведет к негативным последствиям? Вот мой код

      class _MeineFreundeState extends State<MeineFreunde> {
  Icon custIcon = Icon(Icons.search);
  Widget cusSearchBar = Text("Meine Freunde");
  Stream myVideos;
  int likes = 0;
  int videos = 0;
  int followers;
  int following;
  bool dataisthere = false;
  @override
  void initState() {
    super.initState();
    getalldata();
  }

  getalldata() async {
    List listOfIds = [];
    String myID = FirebaseAuth.instance.currentUser.uid;
    var idofotheruser = await FirebaseFirestore.instance
        .collection('meinprofilsettings')
        .doc(myID)
        .collection('following')
        .get();
    following = idofotheruser.docs.length;
    idofotheruser.docs.forEach((element) {
      listOfIds.add(element.id);
    });
    print(listOfIds);

    myVideos = FirebaseFirestore.instance
        .collection('videos')
        .where('uid', whereIn: listOfIds)
        .snapshots();
    var documents = await FirebaseFirestore.instance
        .collection('videos')
        .where('uid', whereIn: listOfIds)
        .get();
    print(documents.docs.length);

    if (!mounted) return;
    setState(() {
      videos = documents.docs.length;
    });
    for (var item in documents.docs) {
      likes = item.data()['likes'].length + likes;
    }
    var followersdocuments = await FirebaseFirestore.instance
        .collection("meinprofilsettings")
        .doc(myID)
        .collection('followers')
        .get();
    var followingdocuments = await FirebaseFirestore.instance
        .collection("meinprofilsettings")
        .doc(myID)
        .collection('following')
        .get();
    followers = followersdocuments.docs.length;
    following = followingdocuments.docs.length;

    setState(() {
      dataisthere = true;
    });
  }

  @override
  Widget build(BuildContext context) {
    return getBody(context);
  }

  Widget getBody(BuildContext context) {
    return dataisthere == false
        ? Scaffold(body: Center(child: CircularProgressIndicator()))
        : Stack(children: <Widget>[
            Scaffold(
              appBar: AppBar(
                actions: [
                  IconButton(
                    icon: Icon(Icons.search),
                    onPressed: () {
                      Navigator.of(context)
                          .pushNamed(Searchuserinmeinebeitraege.route);
                    },
                  ),
                ],
                backgroundColor: Colors.transparent,
                elevation: 0.0,
              ),
              body: RefreshIndicator(
                onRefresh: _handleRefresh,
                color: Colors.black,
                strokeWidth: 4,
                child: ListView(
                  children: [
                    Column(children: <Widget>[
                      SizedBox(
                        height: 5,
                      ),
                      StreamBuilder(
                          stream: myVideos,
                          builder: (context, snapshot) {
                            if (snapshot.connectionState ==
                                ConnectionState.waiting) {
                              return Center(child: CircularProgressIndicator());
                            }

                            if (videos > 0) {
                              return StaggeredGridView.countBuilder(
                                scrollDirection: Axis.vertical,
                                shrinkWrap: true,
                                physics: ScrollPhysics(),
                                crossAxisCount: 3,
                                itemCount: snapshot.data.docs.length,
                                itemBuilder: (context, index) {
                                  DocumentSnapshot video =
                                      snapshot.data.docs[index];
                                  return InkWell(
                                    onTap: () {
                                      NavigationService.instance
                                          .navigateToRoute(MaterialPageRoute(
                                              builder: (context) {
                                        return VideoPage(
                                          video.data()['videourl'],
                                          video.data()['uid'],
                                          video.id,
                                        );
                                      }));
                                    },
                                    child: Card(
                                      elevation: 0.0,
                                      child: ClipRRect(
                                        borderRadius: BorderRadius.circular(25),
                                        clipBehavior:
                                            Clip.antiAliasWithSaveLayer,
                                        child: Image.network(
                                          video.data()['previewimage'],
                                          fit: BoxFit.cover,
                                        ),
                                      ),

                                      //imageData: searchImages[index],
                                    ),
                                  );
                                },
                                staggeredTileBuilder: (index) =>
                                    StaggeredTile.count(
                                        (index % 7 == 0) ? 2 : 1,
                                        (index % 7 == 0) ? 2 : 1),
                                mainAxisSpacing: 8.0,
                                crossAxisSpacing: 4.0,
                              );
                            } else {
                              return Center(
                                child: Padding(
                                  padding:
                                      const EdgeInsets.fromLTRB(0, 100, 0, 0),
                                  child: Container(
                                    child: Text(
                                      "No Videos Yet",
                                      style: TextStyle(
                                          fontSize: 18, color: Colors.black),
                                    ),
                                  ),
                                ),
                              );
                            }
                          }),
                    ]),
                  ],
                ),
              ),
            ),
          ]);
  }

Так что использовать streambuilder сейчас или еще в будущем?

0 ответов

Другие вопросы по тегам