当应显示来自 firestore 的数据时,列表显示为空

Posted

技术标签:

【中文标题】当应显示来自 firestore 的数据时,列表显示为空【英文标题】:List is showing null when should show the data from firestore 【发布时间】:2020-08-23 16:59:00 【问题描述】:

我想在 Firestore 数据中搜索,但该列表未显示来自 Firestore 的数据。我想用 Firestore 数据返回我的列表,但它没有显示我,我想根据我的选择在列表数据中搜索。

请告诉我哪里错了?

class serachDeligat extends SearchDelegate<String> 
  Firestore _firestore = Firestore.instance;
  String ref = 'items';

  Future<List<DocumentSnapshot>> getSearch() async =>
      await _firestore.collection(ref).getDocuments().then((snaps) 
        return snaps.documents;
      );
  List<Map> search = <Map>[];
  Future getDocs() async 
    search = await (await getSearch()).map((item) => item.data).toList();
    return search;
  

  @override
  void initState() 
    getDocs();
  

  @override
  List<Widget> buildActions(BuildContext context) 
    // TODO: implement buildActions
    return [
      IconButton(
        icon: Icon(Icons.clear),
        onPressed: () 
          print('$search');
        ,
      ),
    ];
  

  @override
  Widget buildLeading(BuildContext context) 
    // TODO: implement buildLeading
    return IconButton(
      icon: Icon(Icons.arrow_back),
      onPressed: () 
        close(context, null);
      ,
    );
  

  @override
  Widget buildResults(BuildContext context) 
    return Container(
      child: Center(),
    );
  

  @override
  Widget buildSuggestions(BuildContext context) 
    return Container();
  

【问题讨论】:

【参考方案1】:

我将分享我在一个有同样问题的项目中所做的事情。我尝试了很多方法,但所有方法都以 null 结尾。然后我在 StreamSubscription 的帮助下更改了我的函数。这将更改数据即使在从 firestore 检索之后,因为它与 firestore 保持连接。我在 initstate 中加载了数据。

  StreamSubscription<QuerySnapshot> dailyTaskSubscription;
  ProgressDialog progressDialog;
  List<ScheduleTask> mondayTaskList = List();
  @override
  void initState() 
    super.initState();
      mondayTaskList = List();
      dailyTaskSubscription?.cancel();
      dailyTaskSubscription = scheduleService
          .getDailyTaskList(studentId, 'monday')
          .listen((QuerySnapshot snapshot) 
        final List<ScheduleTask> tasks = snapshot.documents
            .map((documentSnapshot) =>
                ScheduleTask.fromMap(documentSnapshot.data))
            .toList();
    );
  

【讨论】:

super.initState();在 SearchDelegate 类中不起作用【参考方案2】:

这是我的问题的答案 我应该在我的 onPressed 中使用 await

class serachDeligat extends SearchDelegate<String>
  Firestore _firestore = Firestore.instance;
  String ref = 'items';
  Future<List<DocumentSnapshot>> getSearch() async =>
      await _firestore.collection(ref).getDocuments().then((snaps) 
        return snaps.documents;
      );
  List<Map> search = <Map>[];
  Future getDocs() async 
    search=await
        (await getSearch()).map((item) => item.data).toList();
    return search;
  @override
  void initState() 
    getDocs();
    super.query;
  
  List<Map> searchAi = <Map>[];
  @override
  List<Widget> buildActions(BuildContext context) 
    // TODO: implement buildActions
    return[IconButton(
      icon: Icon(Icons.clear),
      onPressed: ()async 
        searchAi=await getDocs();

        print(searchAi);

      ,),];

  @override
  Widget buildLeading(BuildContext context) 
    // TODO: implement buildLeading
    return IconButton(
      icon: Icon(Icons.arrow_back),
      onPressed: ()
        close(context, null);
      ,
    );
  

  @override
  Widget buildResults(BuildContext context) 

    return Container(
      child: Center(),);

  @override
  Widget buildSuggestions(BuildContext context) 
    return Container();

【讨论】:

以上是关于当应显示来自 firestore 的数据时,列表显示为空的主要内容,如果未能解决你的问题,请参考以下文章

列表视图不显示来自流的数据

来自 Firebase Firestore 的 Android 反应式列表

Java Firestore Android 在查询中使用数组列表来显示来自关注用户的帖子

Java Firestore Android 在查询中使用数组列表来显示来自关注用户的帖子

如何在结构中正确显示来自 Firestore 的数据?

如何在 Flutter 中加入来自两个 Firestore 集合的数据?