FLUTTER: Как вернуть только то, что я хочу в gridview? - PullRequest
0 голосов
/ 15 января 2020

Я использую GridView и пытаюсь что-то вернуть, только если условие истинно, но когда оно ложно, возвращается CircularProgressIndicator, если я удаляю CircularProgressIndicator, у меня белый экран. Знаете ли вы, как я могу печатать в GridView только то, что хочу?

Это мой код:

return new GridView.count(
    crossAxisCount: 2,
    children: snapshot.data.documents
        .map((DocumentSnapshot document) {
      if (document['id'] == nomines[0] ||
          document['id'] == nomines[1])
        return Container(
          child: InkWell(
            onTap: () {
              vote(document['id']).then((a) {
                Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) =>
                          Waitresults(),
                    ));
              });
            },
            child: OvalPic(
                document['photo'], document['couleur']),
          ),
        ); else
        return CircularProgressIndicator();
    }).toList());

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Я полагаю, вы получаете snapshot от FutureBuilder, попробуйте это,

FutureBuilder(
  future: ...,
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting)
      return Center(child: CircularProgressIndicator());
    else if (snapshot.hasError)
      return Center(child: Text("ERROR: ${snapshot.error}"));
    else {
      final children = <Widget>[];
      snapshot.data.documents.forEach((doc) {
        if (document['id'] == nomines[0] ||
            document['id'] == nomines[1])
          children.add(
            Container(
              child: InkWell(
                onTap: () {
                  vote(document['id']).then((a) {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) =>
                            Waitresults(),
                      ),
                    );
                  });
                },
                child: OvalPic(document['photo'], document['couleur']),
              ),
            ),
          );
      });
      return new GridView.count(
        crossAxisCount: 2,
        children: children,
      );
    }
  },
);
0 голосов
/ 15 января 2020

Вы можете сделать что-то вроде этого:

snapshot.data.documents.map(
    (d) => condition ? Container() : null
).toList()
..removeWhere((el) => el == null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...