首页 > 解决方案 > StreamBuilder 未显示来自 firestore 的数据

问题描述

我正在使用 streambuilder 来显示快照数据,但它没有显示。屏幕只是空白,但是当我使用带有 get() 方法的未来构建器时,它会显示数据,但我想要实时更改。我是新手,请帮我解决这个问题。这是代码。

class TalentScreen2 extends StatelessWidget {
  final Query _fetchFavUser = FirebaseRepo.instance.fetchFavUsers();

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Column(
          children: [
            Text('Talent Screen 2(Favourites)'),
            Expanded(child: _retrieveData(context))
          ],
        ),
      ),
    );
  }

  Widget _retrieveData(BuildContext context) => StreamBuilder<QuerySnapshot>(
      stream: _fetchFavUser.snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) return const Text('Something went wrong');
        if (!snapshot.hasData) return const Text('Alas! No data found');
        if (snapshot.connectionState == ConnectionState.waiting)
          return Center(
              child: CircularProgressIndicator(
            strokeWidth: 2.0,
          ));
        if (snapshot.connectionState == ConnectionState.done)
          return theUserInfo(snapshot.data.docs);

        return Container();
      });

  Widget theUserInfo(List<QueryDocumentSnapshot> data) {
    return ListView.builder(
        shrinkWrap: true,
        itemCount: data.length,
        itemBuilder: (BuildContext context, int index) {
          var uid = data[index]['uid'];
          TalentHireFavModel userData = TalentHireFavModel.fromMap(
            data[index].data(),
          );

          return Card(
            child: Column(
              children: <Widget>[
                Text(data[index]['orderBy']),
                //  Text(userData.name ?? ''),
                Text(userData.categories),
                Text(userData.skills),
                //   Text(userData.country ?? ''),
                Text(userData.phoneNo),
                Text(userData.hourlyRate),
                Text(userData.professionalOverview),
                Text(userData.skills),
                Text(userData.expert),
                //   Text(userData.createdAt ?? ''),
                _iconButton(userData.uid, context),
              ],
            ),
          );
        });
  }

  Future<DocumentSnapshot> fetch(data) async =>
      await FirebaseRepo.instance.fetchWorkerUserData(data);

  Widget _iconButton(uid, context) {
    return IconButton(
        icon: Icon(Icons.favorite),
        onPressed: () {
          BlocProvider.of<TalentFavCubit>(context).removeTalentFav(uid);
        });
  }
}

这是firestore查询方法,我只是应用简单的查询来获取所有文档并显示它们。我想要实时更改

Query fetchFavUsers() {
    var data = _firestore
        .collection('workerField')
        .doc(getCurrentUser().uid)
        .collection('favourites')
        //   .where('uid', isNotEqualTo: getCurrentUser().uid)
        .orderBy('orderBy', descending: true);
    return data;
  }

标签: fluttergoogle-cloud-firestorestreamfuturestream-builder

解决方案


解决方案是只返回函数。从 if 语句中获取该方法并将其放在 return 语句中。


推荐阅读