Условное отображение / скрытие флажков внутри плиток в Flutter

#flutter #dart #flutter-layout

#flutter #dart #flutter-layout

Вопрос:

У меня есть список плиток, динамически генерируемых из вызова API. У меня есть кнопка «Поделиться» на панели приложений, при нажатии на которую я хотел бы, чтобы флажки отображались как конечное свойство в плитке списка. пример:

 ListTile(
  title: Text('fetchedData.title'),
  trailing: Checkbox()
)
 

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

Что-то еще, что я пробовал, — это создание вспомогательных функций для построения листов списка для меня, но не уверен, что он должен возвращать, если у вас есть какие-либо советы о том, как сделать эти функции сортировки, пожалуйста, включите это!

Это мой код:

 body: Center(
        child: FutureBuilder(
          future: pdfSnippets(),
          builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(
                // will have to hide the eccess snippet with overflow
                //  and have a max width to fit the trailing checkbox
                itemCount: snippets.length,
                itemBuilder: (BuildContext context, int index) {
                  // if you don't like card view, remove Card and just return ListTile
                  return checkboxStatus ? 
                  Card (
                    child: ListTile(
                      // not referencing properly
                      title: Text('${snapshot[index].body}'),
                      subtitle: Text('${snapshot[index].title}'),
                      trailing: Checkbox(
                        value: false,
                      )
                    )
                  ) : 
                  Card (  
                    child: ListTile(
                    // not referencing properly
                    title: Text('${snapshot[index].body}'),
                    subtitle: Text('${snapshot[index].title}'),
                    onLongPress: () => setCheckboxStatus(),
                    )
                  );
                }
              );
            } else {
              throw('nothing to see here');
            }
          },
        ),
      ),
 

Ответ №1:

Вы можете просто сделать CheckBox условие таким образом, чтобы ваш код выглядел проще:

 ListTile(
// not referencing properly
title: Text('body'),
subtitle: Text('title'),
trailing: checkboxStatus
    ? Checkbox(
        value: false,
      )
    : null,
)