Menu
CoddyTech

Deshacer un deslizamiento

Parte de la sección Listas y pantallas del Journey de Flutter de Coddy. Lección 27 de 33.

Es fácil deslizar por accidente, así que las buenas aplicaciones ofrecen una forma de deshacerlo: un SnackBar que indica qué se eliminó, con un botón para deshacer. Un SnackBarAction es ese botón:

SnackBar(
  content: Text('$item removed'),
  action: SnackBarAction(
    label: 'Undo',
    onPressed: () {
      setState(() {
        items.insert(index, item);
      });
    },
  ),
)

Para volver a colocar el elemento donde estaba, recuerda su posición antes de eliminarlo. items.indexOf(item) es su posición, items.removeAt(index) lo elimina y items.insert(index, item) lo vuelve a colocar en esa misma posición.

items.add(item) también lo volvería a añadir, pero al final de la lista.

challenge icon

Desafío

Intermedio

Cuando se deslice un elemento para quitarlo, muestra un SnackBar que diga Milk removed (con el nombre del elemento) y una acción Undo que vuelva a poner el elemento en el mismo lugar.

Pruébalo tú mismo

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final List<String> items = ['Milk', 'Bread', 'Eggs', 'Apples', 'Cheese'];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('${items.length} items')),
      body: ListView(
        children: [
          for (String item in items)
            Dismissible(
              key: ValueKey(item),
              onDismissed: (direction) {
                setState(() {
                  items.remove(item);
                });
              },
              child: ListTile(title: Text(item)),
            ),
        ],
      ),
    );
  }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Listas y pantallas

Practica por tu cuenta: Compilador de Flutter online