Menu
CoddyTech

Un cassetto laterale

Fa parte della sezione Elenchi e schermate del percorso Flutter di Coddy. Lezione 25 di 33.

Un Drawer è un pannello che scorre dal lato, pensato per le voci dell’app che non trovano posto nelle schede. Assegnalo a Scaffold:

Scaffold(
  appBar: AppBar(title: Text(folder)),
  drawer: Drawer(
    child: ListView(
      children: [
        const DrawerHeader(child: Text('Mail')),
        ListTile(
          title: const Text('Sent'),
          onTap: () {
            setState(() {
              folder = 'Sent';
            });
            Navigator.pop(context);
          },
        ),
      ],
    ),
  ),
)

Con un drawer, la barra dell’app mostra all’inizio un pulsante del menu con tre linee. Toccandolo o scorrendo dal bordo, si apre il drawer.

Il drawer rimane aperto finché qualcosa non lo chiude. Un drawer aperto è come una schermata sopra la pagina, quindi Navigator.pop(context) lo chiude. Chiamalo dopo aver toccato una riga, altrimenti il drawer copre la pagina che hai selezionato.

Un DrawerHeader è l’ampia area in alto, pensata per il nome dell’app o per l’account con cui hai effettuato l’accesso.

challenge icon

Sfida

Facile

Apri il cassetto con il pulsante del menu: contiene solo Inbox. Aggiungi altre due righe come quella di Inbox, impostando ciascuna folder e chiudendo il cassetto:

  • Sent, con Icons.send
  • Trash, con Icons.delete

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 folder = 'Inbox';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(folder)),
      body: Center(
        child: Text('No messages in $folder'),
      ),
      drawer: Drawer(
        child: ListView(
          children: [
            const DrawerHeader(
              child: Text('Mail', style: TextStyle(fontSize: 24)),
            ),
            ListTile(
              leading: const Icon(Icons.inbox),
              title: const Text('Inbox'),
              onTap: () {
                setState(() {
                  folder = 'Inbox';
                });
                Navigator.pop(context);
              },
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Elenchi e schermate

Esercitati da solo: Compilatore Flutter online