Отображение списка просмотра данных Firebase Firestore в виде списка Flutter - PullRequest
0 голосов
/ 01 декабря 2018

В настоящее время я могу отображать ListView, заполненный данными из моей базы данных Firestore.Моя текущая проблема заключается в том, что я хочу сделать его недопустимым, поэтому мне нужно иметь возможность использовать такие функции, как:

  setState(() {
    items.removeAt(index);
  });

Теперь я прочитал о том, как создать список, но ни один изВ примерах упоминается FireBase Streambuilder, который я использую.Так что мне просто интересно, можно ли было сделать данные в виде списка?А если нет, то есть ли другие способы сделать списки списков пожарных хранилищ закрытыми?Вот как я в настоящее время получаю данные:

Container(
          child: StreamBuilder(
            stream: Firestore.instance.collection('users').snapshots(),
            builder: (context, snapshot) {
              if (!snapshot.hasData) {
                return Center(
                  child: CircularProgressIndicator(
                    valueColor: AlwaysStoppedAnimation<Color>(themeColor),
                  ),
                );
              } else {
                return ListView.builder(
                  scrollDirection: Axis.vertical,
                  padding: EdgeInsets.all(10.0),
                  itemBuilder: (context, index) => buildItem(context, snapshot.data.documents[index]),
                  itemCount: snapshot.data.documents.length,
                );
              }
            },
          ),
        ),

Заранее благодарен за любую помощь.

Builditem выглядит следующим образом:

  Widget buildItem(BuildContext context, DocumentSnapshot document) {
if (document['id'] == currentUserId || document['gender'] == null) {
  return Container();
}
if (currentUserPreference == 'male' && currentUserGender == 'male') {
  return showGayMales(document);
}

И ShowGayMalesМетод выглядит так:

 Widget showGayMales(DocumentSnapshot document) {      
   if (document['id'] == currentUserId || document['id'] == nopeId || ) {
     return Container();
   } else {
     return Container(
        child: Slidable(
          delegate: new SlidableScrollDelegate(),
          actionExtentRatio: 0.3,
        child: Card(
          child: Padding(
          padding:EdgeInsets.fromLTRB(20.0, 10.0, 25.0, 10.0),
          child: Row(
            children: <Widget>[
              Material(
                color: Colors.transparent,
                child: Icon(
                  FontAwesomeIcons.male,
                  color: textColor,
                ),
              ),
              new Flexible(
                child: Container(
                    child: new Column(
                      children: <Widget>[
                        new Container(
                          child: Text(
                      '${document['aboutMe']}',
                            style: TextStyle(color: textColor, fontSize: 30.0),
                        ),
                        alignment: Alignment.centerLeft,
                        margin: new EdgeInsets.fromLTRB(10.0, 0.0, 0.0, 5.0),
                      ),
                      new Container(
                        child: Row(
                          children: <Widget>[
                            Text(
                            '-'+'${document['nickname'] ?? 'Not available'}',
                            style: TextStyle(color: textColor, fontSize: 15.0, fontWeight: FontWeight.bold),
                            ),
                            Text(
                              ','+' ${document['age'] ?? ''}'
                            )
                          ],
                        ),
                        alignment: Alignment.centerLeft,
                        margin: new EdgeInsets.fromLTRB(10.0, 0.0, 0.0, 0.0),
                      )
                    ],
                  ),
                  margin: EdgeInsets.only(left: 20.0),
                ),
              ),
            ],
          ),
          ),
          shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
          ),
            actions: <Widget>[
             new IconSlideAction(
             caption: 'Not interested!',
             color: errorColor,
             icon: Icons.clear,
             onTap: () => notinterested('${document['id']}'),
             ),
            ],
            secondaryActions: <Widget>[
              new IconSlideAction(
              caption: "Interested!",
                color: primaryColor,
              icon: Icons.check,
              onTap: () => interested('${document['nickname']}', '${document['id']}', '${document['gender']}', '${document['aboutMe']}', '${document['age']}', '${document['preference']}'),
              ),
            ],
        ),
        margin: EdgeInsets.only(bottom: 10.0, left: 5.0, right: 5.0),
      );
   }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...