Я новичок во Флаттере, так что прости меня за недоразумение.
В конечном счете, я пытаюсь получить список фрагментов, каждый со списком виджетов (элементов), и этот список фрагментов может изменить, а также можно изменить каждый список предметов.
Что-то вроде:
et c, но я могу продолжать добавлять и удалять щепки и предметы по желанию. Мой наивный подход в основном заключается в следующем:
- В моей основной функции построения виджета создайте
CustomScrollView
. - Пусть эта
CustomScrollView
ссылается на список переменных элемента для его фрагментов. Аргумент. - Добавить кнопку для создания новых элементов (добавьте элемент в список элементов).
- Добавить кнопку для создания новых элементов (добавить элемент в список элементов).
- Вызовите
setState()
при добавлении элемента в (4).
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
final List<Widget> slivers = [];
final List<Text> items = [];
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
void _addSliver() {
widget.slivers.add(SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
return index < widget.items.length ? widget.items[index] : null;
})));
}
void _addToList() {
setState(() {
widget.items.add(Text('Item ${widget.items.length + 1}'));
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
actions: <Widget>[
IconButton(
icon: Icon(Icons.category),
onPressed: _addSliver,
),
IconButton(
icon: Icon(Icons.add),
onPressed: _addToList,
)
],
),
body: CustomScrollView(
slivers: widget.slivers,
),
);
}
}
Приведенный выше код предназначен только для проверки одного элемента и нескольких элементов в этом элементе. Во время отладки я заметил, что уже существующий осколок не перестраивается в функции _build
в sliver.dart
, потому что он уже существует на карте, поэтому мое понимание того, как этого можно достичь, неверно.
Мне просто нужно заставить его как-то перестраивать? Или есть гораздо более простой способ сделать это, которого мне не хватает?