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.
Wyzwanie
ŁatwyPasek 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)),
],
),
);
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Listy i ekrany
1Przewijane listy
Lista z przewijaniemElementy listyPoczątek i koniecDotknij elementu listySeparatory między wierszami5Więcej niż jeden ekran
Otwórz nowy ekranStrzałka wsteczWróć za pomocą przyciskuPrześlij dane do ekranuOdbierz wynik6Karty, szuflady i gesty przesunięcia
Karty z paskiem nawigacyjnymWypełnione ikony dla otwartej kartyBoczna szufladaPrzesuń, aby usunąćCofnij przesunięciePoćwicz samodzielnie: Kompilator Flutter online