Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗flPmMuDs 89 of 125 menu
◀ ▶

Удаление строки свайпом Dismissible в Flutter

Удаление с жестом «смахнуть» делают виджетом Dismissible. Он оборачивает строку списка. Когда пользователь уводит её достаточно далеко, вызывается onDismissed - там убирают элемент из данных и вызывают setState.

У каждого Dismissible обязан быть уникальный ValueKey (или другой Key), привязанный к данным строки. Без ключа Flutter может перепутать анимацию и состояние соседних элементов после удаления:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: HomePage())); } class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { final items = <String>['Letter 1', 'Letter 2', 'Letter 3']; @override Widget build(BuildContext context) { return Scaffold( body: ListView.builder( itemCount: items.length, itemBuilder: (context, index) { final title = items[index]; return Dismissible( key: ValueKey(title), direction: DismissDirection.endToStart, background: Container( color: Colors.red.shade300, alignment: Alignment.centerRight, padding: const EdgeInsets.only(right: 20), child: const Icon(Icons.delete, color: Colors.white), ), onDismissed: (direction) { setState(() { items.removeAt(index); // index still points at this row }); }, child: ListTile(title: Text(title)), ); }, ), ); } }

Список из пяти заметок. Каждая в Dismissible с ValueKey по тексту заметки. Свайп влево удаляет пункт из списка. Фон при свайпе - красный с иконкой удаления.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить