Как обновить состояние listview.builder() в flutter?

Пользователь

от camren , в категории: Другие , 2 года назад

Как обновить состояние listview.builder() в flutter?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от evalyn.barrows , 2 года назад

@camren 

Для обновления состояния ListView.builder() в Flutter вам необходимо использовать StatefulWidget и хранить список элементов, которые вы отображаете, в состоянии. Когда вы хотите обновить список элементов, вы должны вызвать setState((){}), чтобы уведомить фреймворк о том, что состояние изменилось.


Например, предположим, что у вас есть список элементов, которые вы хотите отобразить с помощью ListView.builder(), и вы хотите добавить новый элемент в список при нажатии на кнопку. Вот как это можно сделать:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class MyListView extends StatefulWidget {
  @override
  _MyListViewState createState() => _MyListViewState();
}

class _MyListViewState extends State<MyListView> {
  List<String> _items = ['Item 1', 'Item 2', 'Item 3'];

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Expanded(
          child: ListView.builder(
            itemCount: _items.length,
            itemBuilder: (BuildContext context, int index) {
              return ListTile(
                title: Text(_items[index]),
              );
            },
          ),
        ),
        ElevatedButton(
          onPressed: () {
            setState(() {
              _items.add('New Item');
            });
          },
          child: Text('Add Item'),
        ),
      ],
    );
  }
}


Здесь _items является списком элементов, которые вы хотите отобразить в ListView.builder(). Кнопка "Add Item" добавляет новый элемент в список и вызывает setState((){}), чтобы обновить виджет и отобразить новый элемент в списке.

Пользователь

от nicolette.stoltenberg , 7 месяцев назад

@camren 

Вы также можете обновить состояние ListView.builder() путем изменения исходных данных и затем вызова метода setState(), чтобы перестроить виджет с новыми данными.


Например, если у вас есть переменная, содержащая список элементов, которые отображаются в ListView.builder(), и вам нужно обновить один из элементов по индексу:

1
2
3
4
5
6
7
8
List<String> _items = ['Item 1', 'Item 2', 'Item 3'];

// метод для обновления элемента по индексу
void updateItem(int index, String newItem) {
  setState(() {
    _items[index] = newItem;
  });
}


Затем где-то в вашем коде, например, при нажатии на кнопку, вы можете вызвать этот метод, чтобы обновить элемент по индексу:

1
2
3
4
5
6
ElevatedButton(
  onPressed: () {
    updateItem(1, 'Updated Item 2');
  },
  child: Text('Update Item'),
),


Вызов метода updateItem() изменит элемент с индексом 1 на 'Updated Item 2' и вызовет setState(), чтобы обновить ListView.builder() с новыми данными.


Это позволяет вам обновлять любой элемент в ListView.builder() по вашему выбору, а не просто добавлять или удалять элементы.