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.
Wyzwanie
ŚredniGdy 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)),
),
],
),
);
}
}
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