Я пытаюсь создать страницу, на которой пользователи могут добавлять и удалять элементы из списка.Я борюсь с проблемой.Когда я удаляю элемент, модель обновляется корректно, а пользовательский интерфейс обновляется, но неправильно: удаляется только последний элемент списка.
Я использую Flutter 1.5.4.
Я уже использовал более простые элементы для списка, и я попытался создать новый проект только с этой страницей, чтобы удалить все возможные проблемы, но он все еще не работает правильно.
Я также попытался использовать столбецвместо списка, но результат всегда один и тот же.
main.dart:
import 'package:flutter/material.dart';
import './widget.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
appBar: AppBar(
title: Text('Hello'),
),
body: Center(
child: SectionWidget(),
),
),
);
}
}
widget.dart:
import 'package:flutter/material.dart';
class SectionWidget extends StatefulWidget {
_SectionWidgetState createState() => new _SectionWidgetState();
}
class _SectionWidgetState extends State<SectionWidget> {
List<String> _items = List<String>();
@override
Widget build(BuildContext context) {
List<Widget> children = [
ListTile(
title: Text(
"Strings",
style: TextStyle(fontWeight: FontWeight.bold),
),
trailing: IconButton(
icon: Icon(Icons.add_circle),
onPressed: () => setState(() {
_items.add('item ${_items.length}');
print("Adding "+ _items.last);
}),
),
),
];
children.addAll(_buildForms());
return ListView(
children: children,
);
}
List<Widget> _buildForms() {
List<Widget> forms = new List<Widget>();
print("Strings:" + _items.toString());
for (String item in _items) {
forms.add(
ListTile(
leading: Icon(Icons.person),
title: TextFormField(
initialValue: item,
),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () => setState(() {
print("Removing $item");
_items.remove(item);
}),
),
),
);
}
return forms;
}
}
Если я добавлю 4 элемента всписок и затем удалить «элемент 1», это вывод на консоль:
I/flutter ( 4192): Strings:[]
I/flutter ( 4192): Adding item 0
I/flutter ( 4192): Strings:[item 0]
I/flutter ( 4192): Adding item 1
I/flutter ( 4192): Strings:[item 0, item 1]
I/flutter ( 4192): Adding item 2
I/flutter ( 4192): Strings:[item 0, item 1, item 2]
I/flutter ( 4192): Adding item 3
I/flutter ( 4192): Strings:[item 0, item 1, item 2, item 3]
I/flutter ( 4192): Removing item 1
I/flutter ( 4192): Strings:[item 0, item 2, item 3]
Это правильно, так как «элемент 1» был удален из списка, но если я смотрю на пользовательский интерфейс,вот что я получаю:

Количество элементов в списке правильное, модель правильная, но показанные элементы неправильные.
Как это исправить?Я что-то не так делаю или это ошибка Флаттера?