Как скрыть один элемент от построителя потока - PullRequest
0 голосов
/ 21 апреля 2020

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

bool visibility = true;

  Widget _dataList() {
    if (data != null) {
      return StreamBuilder(
          stream: data,
          builder: (context, snapshot) {
            return ListView.builder(
              itemCount: snapshot.data.documents.length,
              padding: EdgeInsets.all(5.0),
              itemBuilder: (context, i) {
                return visibility == true
                    ? new Container(
                        child: Padding(
                            padding: EdgeInsets.only(top: 5, right: 5, left: 5),
                            child: Material(
                              borderRadius: BorderRadius.circular(20),
                              elevation: 9,
                              color:
                                  Theme.of(context).cardColor.withOpacity(.95),
                              shadowColor:
                                  Theme.of(context).accentColor.withOpacity(.5),
                              child: Container(
                                padding: EdgeInsets.only(
                                    bottom: 10, right: 10, left: 10, top: 15),
                                height: 210,
                                decoration: BoxDecoration(
                                    color: Color(0xFF0B0F1B),
                                    borderRadius: BorderRadius.circular(20),
                                    border: Border.all(
                                        width: 1,
                                        color: Colors.grey.withOpacity(0.5))),
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.center,
                                  children: <Widget>[
                                    
                                    Padding(
                                      padding: const EdgeInsets.all(4.0),
                                      child: Text(
                                        'Number Of Participants :-' +
                                            snapshot.data.documents[i]
                                                .data['numberOfParticipants'],
                                        style: TextStyle(
                                            color: Colors.white, fontSize: 15),
                                      ),
                                    ),
                                    Padding(
                                      padding: const EdgeInsets.only(top: 7.0),
                                      child: Row(
                                        mainAxisAlignment:
                                            MainAxisAlignment.center,
                                        children: <Widget>[
                                          SizedBox(
                                            height: 40,
                                          ),
                                          Material(
                                            borderRadius:
                                                BorderRadius.circular(20),
                                            elevation: 26,
                                            color: Color(0xFF0B0F1B),
                                            child: Container(
                                              height: 30,
                                              width: 120,
                                              decoration: BoxDecoration(
                                                  color: Color(0xFF0B0F1B),
                                                  borderRadius:
                                                      BorderRadius.circular(20),
                                                  border: Border.all(
                                                      width: 1,
                                                      color: Colors.grey
                                                          .withOpacity(0.5))),
                                              child: InkWell(
                                                splashColor: Colors.redAccent,
                                                borderRadius:
                                                    BorderRadius.circular(20),
                                                child: Center(
                                                    child: Text(
                                                  'View',
                                                  style: TextStyle(
                                                      color: Color(0xFFC77AF3),
                                                      fontSize: 18),
                                                )),
                                                onTap: () {
                                                  int currentval = int.parse(
                                                      snapshot.data.documents[i]
                                                              .data[
                                                          'numberOfParticipants']);
                                                  setState(
                                                    () {
                                                      currentval--;
                                                      snapshot.data.documents[i]
                                                                  .data[
                                                              'numberOfParticipants'] =
                                                          currentval.toString();
                                                      if (currentval == 0) {
                                                        visibility = false;
                                                      }
                                                    },
                                                  );
                                                },
                                              ),
                                            ),
                                          ),
                                          SizedBox(
                                            width: 85,
                                          ),
                                          Material(
                                            borderRadius:
                                                BorderRadius.circular(20),
                                            elevation: 26,
                                            color: Color(0xFF0B0F1B),
                                            child: Container(
                                              height: 30,
                                              width: 120,
                                              decoration: BoxDecoration(
                                                  color: Color(0xFF0B0F1B),
                                                  borderRadius:
                                                      BorderRadius.circular(20),
                                                  border: Border.all(
                                                      width: 1,
                                                      color: Colors.grey
                                                          .withOpacity(0.5))),
                                              child: InkWell(
                                                splashColor: Colors.greenAccent,
                                                borderRadius:
                                                    BorderRadius.circular(20),
                                                child: Center(
                                                    child: Text(
                                                  'Join',
                                                  style: TextStyle(
                                                      color: Colors.greenAccent,
                                                      fontSize: 18),
                                                )),
                                                onTap: () {
                                                  setState(
                                                    () {},
                                                  );
                                                },
                                              ),
                                            ),
                                          ),
                                        ],
                                      ),
                                    ),
                                  ],
                                ),
                              ),
                            ),
                         ),
                      )
                    : new Container();
              },
            );
          });
    } else {
      return Center(child: Text('Nothing yet'));
    }
  }

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

1 Ответ

0 голосов
/ 21 апреля 2020

Вы можете использовать Непрозрачность с непрозрачностью: 0,0, чтобы нарисовать элемент, который скрыт, но все еще занимает пространство.

Чтобы он не занимал пространство, замените его пустым Контейнером ().

РЕДАКТИРОВАТЬ: Чтобы обернуть его в объект непрозрачности, выполните следующие действия:

 new Opacity(opacity: 0.0, child: new Padding(
      padding: const EdgeInsets.only(
        left: 16.0,
      ),
      child: new Icon(pencil, color: CupertinoColors.activeBlue),
    ))

Краткое руководство для разработчиков Google по непрозрачности: https://youtu.be/9hltevOHQBw

, вы также можете попробуйте

Visibility(
      visible: false,
      child: child
      )
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...