Виджет ReorderableListView
Виджет ReorderableListView принимает children с ключами или builder. Колбэк onReorder сообщает новые индексы.
Синтаксис
ReorderableListView(
children: [ListTile(key: ValueKey(0), title: Text('abcde'))],
onReorder: (old, neu) {},
)
Параметры
| Параметр | Описание |
|---|---|
children |
Пункты списка, у каждого нужен Key.
|
onReorder |
Вызывается после перестановки. Обязательный параметр. |
Методы
| Метод | Описание |
|---|---|
builder |
ReorderableListView. Давайте разберём вызов на примерах.
|
Пример
Давайте переставим два пункта:
import 'package:flutter/material.dart';
class ReorderDemo extends StatefulWidget
{
@override
State<ReorderDemo> createState() => _ReorderDemoState();
}
class _ReorderDemoState extends State<ReorderDemo>
{
final items = ['abcde', '12345'];
@override
Widget build(BuildContext context)
{
return ReorderableListView(
onReorder: (oldIndex, newIndex)
{
setState(()
{
final item = items.removeAt(oldIndex);
items.insert(newIndex, item);
});
},
children: [
for (final t in items)
ListTile(key: ValueKey(t), title: Text(t)),
],
);
}
}
void main()
{
runApp(MaterialApp(home: Scaffold(body: ReorderDemo())));
}
На экране два пункта, их можно перетаскивать за длинное нажатие.
Пример
Давайте добавим третий пункт:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: ReorderableListView(
onReorder: (a, b) {},
children: [
ListTile(key: ValueKey(1), title: Text('abcde')),
ListTile(key: ValueKey(2), title: Text('12345')),
ListTile(key: ValueKey(3), title: Text('abcde')),
],
),
),
),
);
}
На экране три строки с разными ключами.
Смотрите также
-
виджет
RefreshIndicator,
который часто ставят рядом в прокручиваемых экранах -
метод
builder,
который дополняет работу с прокруткой -
виджет
Scrollbar,
который помогает собрать сложный список -
виджет
ReorderableDragStartListener,
который задаёт поведение или данные прокрутки