Как получить список значений из ListView - PullRequest
0 голосов
/ 12 апреля 2020

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

class MaterialScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    List<Map<String, dynamic>> list = [
      {'id': 1, 'name': 'name1'},
      {'id': 2, 'name': 'name2'}
    ];
    return Scaffold(
      body: Column(
        children: <Widget>[
          Expanded(
            child: ListView.builder(
              itemCount: list.length,
              itemBuilder: (BuildContext context, int index) => ListTile(
                title: Text(list[index]['name']),
              ),
            ),
          ),
          FlatButton(
            child: Text('Print all ids'),
            onPressed: () {print();}, //<-- how to get all list ids displayed in ListView
          )
        ],
      ),
    );
  }
}

1 Ответ

1 голос
/ 12 апреля 2020

Вы можете создать новую переменную списка и добавить идентификаторы в список при построении списка.

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

Следующий код поможет вам лучше понять.

 List<Map<String, dynamic>> list = [
    {'id': 1, 'name': 'name1'},
    {'id': 2, 'name': 'name2'}
  ];
  List<int> _ids = [];

  @override
  Widget build(BuildContext context) {
    _ids.clear();
    return Scaffold(
      body: Column(
        children: <Widget>[
          Expanded(
            child: ListView.builder(
                itemCount: list.length,
                itemBuilder: (BuildContext context, int index) {
                  _ids.add(list[index]['id']);
                  return ListTile(
                    title: Text(list[index]['name']),
                  );
                }),
          ),
          FlatButton(
            child: Text('Print all ids'),
            onPressed: () {
              print(_ids.toString());
            },
          )
        ],
      ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...