Menu
CoddyTech

Cofnij przesunięcie

Część sekcji Listy i ekrany ścieżki Flutter w Coddy. Lekcja 27 z 33.

Przesunięcie łatwo wykonać przez przypadek, dlatego dobre aplikacje oferują możliwość cofnięcia tej czynności: SnackBar, który informuje, co usunięto, i zawiera przycisk cofania. SnackBarAction to właśnie ten przycisk:

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

Aby przywrócić element na poprzednie miejsce, zapamiętaj jego pozycję przed usunięciem. items.indexOf(item) zwraca jego pozycję, items.removeAt(index) go usuwa, a items.insert(index, item) przywraca go na tę samą pozycję.

items.add(item) również przywróciłoby element, ale na końcu listy.

challenge icon

Wyzwanie

Średni

Gdy element zostanie usunięty przesunięciem, wyświetl SnackBar z komunikatem Milk removed (z nazwą elementu) i akcją Undo, która przywróci element na to samo miejsce.

Spróbuj swoich sił

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Listy i ekrany

Poćwicz samodzielnie: Kompilator Flutter online