Ricevi un risultato
Fa parte della sezione Elenchi e schermate del percorso Flutter di Coddy. Lezione 22 di 33.
Alcune schermate servono per porre una domanda: scegli un colore, scegli una data. La risposta deve tornare alla schermata che ha posto la domanda. Navigator.pop può trasportarla:
Navigator.pop(context, 'Green');Dall'altra parte, Navigator.push restituisce un Future: un valore che arriva più tardi, quando la schermata aperta viene chiusa. await lo attende e la funzione che attende è contrassegnata con async:
onPressed: () async {
final String? color = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => const ColorScreen()),
);
if (color != null) {
setState(() {
chosen = color;
});
}
},Il risultato è una String?: quando qualcuno esce con la freccia indietro, non viene inviato nulla e color è null. In quel caso, if mantiene la scelta precedente. Una sezione successiva spiega per intero Future e await.
Sfida
MedioLa scelta di un colore chiude la schermata dei colori, ma la schermata iniziale non ne viene mai informata. Fai in modo che la scelta venga restituita:
- nella schermata dei colori, chiudi la schermata restituendo il colore:
Navigator.pop(context, color) - nella schermata iniziale, usa
awaitcon la chiamata push e, quando viene restituito un colore, mostraYour color: Green(con il colore scelto) - uscendo con la freccia indietro, il testo precedente rimane invariato
Provalo tu
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> {
String chosen = 'none';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Paint')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('Your color: $chosen', style: const TextStyle(fontSize: 24)),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const ColorScreen()),
);
},
child: const Text('Choose a color'),
),
],
),
),
);
}
}
class ColorScreen extends StatelessWidget {
const ColorScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Pick a color')),
body: ListView(
children: [
for (String color in ['Red', 'Green', 'Blue'])
ListTile(
title: Text(color),
onTap: () {
Navigator.pop(context);
},
),
],
),
);
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Elenchi e schermate
1Elenchi scorrevoli
Un elenco scorrevoleElementi dell’elencoInizio e fineTocca un elemento dell’elencoSeparare le righe5Più di una schermata
Apri una nuova schermataLa freccia IndietroTorna indietro con un pulsanteInvia dati a una schermataRicevi un risultatoEsercitati da solo: Compilatore Flutter online