firebase - 如何在 Flutter 中手动分配 Listview.builder 的第一个元素?

标签 firebase flutter google-cloud-firestore android-listview stream-builder

我有一个 Flutter 应用程序,它在 Listview.builder 的卡片上显示事件(存储在 Cloud Firestore 中)。我有一个特定的事件,足球。它有自己的特殊卡片。列表中可以有多个常规赛事,但只有一个足球赛事。我想在列表的顶部显示此足球赛事,作为第一张卡片。我怎样才能做到这一点?

到目前为止我的代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:fociapp/model/events.dart';
import 'package:fociapp/ui/event_card.dart';

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
        stream: Firestore.instance.collection("events").snapshots(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          return snapshot.hasData
              ? Container(
                  color: Colors.grey[850],
                  child: ListView.builder(
                    itemCount: snapshot.data.documents.length,
                    itemBuilder: (BuildContext context, int index) {
                      DocumentSnapshot events = snapshot.data.documents[index];
                      Event event = Event(
                          events["eventName"],
                          events["startTime"],
                          events["coverImageUrl"],
                          events["location"],
                          events["description"]);

                      return EventCard(event);
                    },
                  ),
                )
              : Center(
                  child: CircularProgressIndicator(),
                );
        });
  }
}

Event 是来自 Firestore 的数据的模型类,EventCard 是小部件,它将数据显示在卡片中。

最佳答案

只需将 ItemCount 增加 1。
在您的 ItemBuilder 中,如果索引为 0,则返回足球卡,否则返回您的普通卡(索引 - 1)。
像这样:

ListView.builder(
    itemCount: snapshot.data.documents.length + 1,
    itemBuilder: (BuildContext context, int index) {
       if(index == 0) {
          // return Football-Card
       } else {
           DocumentSnapshot events = snapshot.data.documents[index - 1];
           Event event = Event(
               events["eventName"],
               events["startTime"],
               events["coverImageUrl"],
               events["location"],
               events["description"]);

            return EventCard(event);
        }
     },
),

关于firebase - 如何在 Flutter 中手动分配 Listview.builder 的第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63465433/

相关文章:

javascript - 如何在 Cloud Firestore 查询中加入多个文档?

android - 所有 gms/firebase 库必须使用完全相同的版本

javascript - Firebase:查询最佳匹配结果

javascript - 云函数速率限制器,不返回数据

flutter - 在导航中使用带有 GlobalKeys 的小部件

firebase - 如何向之前创建的文档添加字段?

swift - Firebase Firestore - 或查询替代方案

java - 在 Firebase URL 中使用 Firebase 服务器时间戳

android - 当我的列表为空时如何显示图像或文本?

iOS 15 beta 上带有 canvaskit 的 Flutter web