#flutter #dart
Вопрос:
- когда я пытаюсь удалить первый элемент, поменяв его местами, диалоговое окно предупреждения отображается так, как я его закодировал, но в нем говорится: «вы хотите удалить элемент номер 2», и это не номер 2, а номер 1.
- после того, как я нажму кнопку «отменить» в предупреждении, он удалит первый элемент и добавит «элемент номер 2», и теперь у меня есть два элемента под названием «элемент номер 2».
- когда я пытаюсь поменять местами «пункт номер 2», программа выходит из строя и выдает мне эту ошибку
«Отклоненный недопустимый виджет по-прежнему является частью дерева. Убедитесь, что реализован обработчик onDismissed, и немедленно удалите Недопустимый виджет из приложения после запуска этого обработчика».
import 'package:flutter/material.dart'; class DismissibleList extends StatefulWidget { const DismissibleList({Key? key}) : super(key: key); @override _DismissibleListState createState() => _DismissibleListState(); } class _DismissibleListState extends State<DismissibleList> { final List item = List.generate(20, (index) => 'item num ${index 1}'); @override Widget build(BuildContext context) { return Scaffold( body: ListView.builder( itemCount: item.length, itemBuilder: (context, index) { return Dismissible( key: Key(item[index]), background: Container( color: Colors.teal, ), secondaryBackground: Container( color: Colors.red, ), onDismissed: (dr) { setState(() { item.removeAt(index); }); print(item[index]); showDialog( context: context, builder: (BuildContext ctx) { return AlertDialog( content: Text('you want to delete ${item[index]}'), actions: [ TextButton( onPressed: () { print(item[index]); setState(() { item.insert(index, item[index]); Navigator.of(context).pop(); }); }, child: Text('Undo'), ), ], ); }); }, child: ListTile( title: Center( child: Text(item[index]), ), ), ); }, ), ); } }