Добавить статические элементы в ListView.builder, сгенерированный из данных базы данных - PullRequest
0 голосов
/ 02 мая 2019

Я получаю из базы данных пожарного магазина некоторые данные, на этих данных я создаю ListView, который показывает мои данные.

Я хочу добавить в конец этого списка 3 статических элемента, которые отличаются от сгенерированныхиз них.

мой код для построения списка:

child: StreamBuilder<QuerySnapshot>(
  stream: Firestore.instance
      .collection('users').document(userAdminId)
      .collection('events')
        .where('operatore', isEqualTo: _user)
      .snapshots(),
  builder: (BuildContext context,
      AsyncSnapshot<QuerySnapshot> snapshot) {
    if (snapshot.hasError)
      return Text('Error: ${snapshot.error}');
    switch (snapshot.data) {
      case null:
        return Container();
      default:
        return ListView.builder(
          itemCount: snapshot.data.documents.length,
          itemBuilder: (context, index) {
            final item = snapshot.data.documents[index];
            final itemID =
                snapshot.data.documents[index].documentID;
            final list =
                snapshot.data.documents;
            return Card(
                         ...

                        },
                      );
                  }
                },
              ),

теперь он генерирует 2 карты, потому что я получаю 2 события из базы данных

Что я хочу сделатьэто добавить еще 3 карты внизу этого списка,

, которые все более и менее похожи на это:

Card(
  child: Row(
    children: <Widget>[
      Icon(
        Icons.camera_alt
      ),
      Text('Camera')
    ],
  ),
)

Card(
  child: Row(
    children: <Widget>[
      Icon(
        Icons.folder
      ),
      Text('Media')
    ],
  ),
)

Card(
  child: Row(
    children: <Widget>[
      Icon(
        Icons.users
      ),
      Text('Friends')
    ],
  ),
)

независимо от того, сколько элементов он генерирует из базы данных, я хочудобавить эти 3 карты внизу

пример:

если я получу 3 события, мой список должен быть:

[event1]
[event2]
[event3]
[camera]
[media]
[friends]

, если я получу только одно событие:


[event1]
[camera]
[media]
[friends]

1 Ответ

0 голосов
/ 13 мая 2019

Я решил эту проблему с помощью виджета SliverList

этот код является примером:

Widget buildGridFilesToExport() {
  return new StreamBuilder(
    stream: Firestore.instance
        .collection('users')
        .document(dataUserGlobal.userAdminId)
        .collection('events')
        .document(dataUserGlobal.eventId)
        .snapshots(),
    builder: (context, snapshot) {
      print(snapshot);
      if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
      switch (snapshot.connectionState) {
        case ConnectionState.waiting:
          return dataUserGlobal.showLoading(dataUserGlobal.purple);
        default:
          List videosList = snapshot.data['thumbnailsUrl'];
          return videosList != null ?

          CustomScrollView(
            slivers: [
              SliverGrid(
                gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                  maxCrossAxisExtent: 200.0,
                  mainAxisSpacing: 10.0,
                  crossAxisSpacing: 10.0,
                  childAspectRatio: 1,
                ),
                delegate: SliverChildBuilderDelegate((context, index) {
                  return Container(
                      padding: EdgeInsets.all(5.0),
                      child: Column(
                        children: <Widget>[
                          Expanded(
                              flex: 7,
                              child: Stack(
                                children: <Widget>[
                                  Container(
                                    margin:
                                    EdgeInsets.only(bottom: 2.0),
                                    decoration: BoxDecoration(
                                      borderRadius: BorderRadius.all(
                                          Radius.circular(5.0)),
                                      image: DecorationImage(
                                        image: NetworkImage(snapshot
                                            .data['thumbnailsUrl']
                                        [index]),
                                        fit: BoxFit.cover,
                                      ),
                                    ),
                                  ),

                                ],
                              )),

                        ],
                      ));
                }, childCount: snapshot.data['thumbnailsUrl'].length),
              ),
              SliverList(
                delegate: SliverChildListDelegate([
                  closeEvent(),
                ]),
              )
            ],
          )
              :
          Center(
              child: Container(
                width: 250,
                child: Text(
                  'Ancora nessun video!\nCarica i video dalla sezione media, oppure vai nella sezione amici e seleziona i video da spostare qui!',
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontFamily: 'acumin-pro',
                    fontSize: 22,
                  ),
                ),
              )
          );
      }
    },
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...