Menu
CoddyTech

Przesuń, aby usunąć

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

W aplikacji pocztowej lub zakupowej usuwasz element, przesuwając go poza ekran. Owiń wiersz w Dismissible:

Dismissible(
  key: ValueKey(item),
  onDismissed: (direction) {
    setState(() {
      items.remove(item);
    });
  },
  child: ListTile(title: Text(item)),
)

Wiersz przesuwa się spod Twojego palca. Gdy zniknie, uruchamia się onDismissed, a Ty usuwasz element z listy w setState. Jeśli tego nie zrobisz, lista nadal będzie go zawierać, a Flutter zatrzyma działanie z błędem: wyrzucony wiersz wciąż znajduje się na liście.

key informuje Flutter, który wiersz jest którym, więc musi być inny dla każdego wiersza: ValueKey(item) używa samego elementu.

items jest final, a mimo to możesz z niego usuwać elementy: final oznacza, że zmienna zawsze przechowuje tę samą listę, a nie że lista nigdy się nie zmienia.

challenge icon

Wyzwanie

Łatwy

Pasek aplikacji zlicza elementy. Umożliw przesuwanie elementów listy zakupów: opakuj każdy ListTile w Dismissible, używając ValueKey(item) jako klucza, i usuń element z items, gdy zostanie przesunięty.

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)
            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