Menu
CoddyTech

Schede con una barra di navigazione

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

Molte app organizzano le pagine principali in schede nella parte inferiore dello schermo. NavigationBar le disegna; la passi a Scaffold tramite bottomNavigationBar:.

NavigationBar(
  selectedIndex: index,
  onDestinationSelected: (int i) {
    setState(() {
      index = i;
    });
  },
  destinations: const [
    NavigationDestination(icon: Icon(Icons.home), label: 'Home'),
    NavigationDestination(icon: Icon(Icons.settings), label: 'Settings'),
  ],
)

Ogni NavigationDestination è una scheda, con un'icona e un'etichetta. selectedIndex indica quale scheda è evidenziata, contando da 0. Quando tocchi una scheda, onDestinationSelected riceve il suo indice.

La barra non memorizza da sola la scheda: mantieni index nel tuo stato e lo modifichi con setState. Il corpo mostra la pagina corrispondente a quell'indice, qui pages[index] da un elenco di widget.

challenge icon

Sfida

Facile

La barra ha tre schede, ma toccarle non produce alcun effetto. Aggiungi onDestinationSelected: in modo che la scheda toccata venga evidenziata e venga mostrata la relativa pagina: Favorites page per Favorites, Settings page per Settings.

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> {
  int index = 0;
  final List<Widget> pages = const [
    Center(child: Text('Home page')),
    Center(child: Text('Favorites page')),
    Center(child: Text('Settings page')),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('My App')),
      body: pages[index],
      bottomNavigationBar: NavigationBar(
        selectedIndex: index,
        destinations: const [
          NavigationDestination(icon: Icon(Icons.home), label: 'Home'),
          NavigationDestination(icon: Icon(Icons.favorite), label: 'Favorites'),
          NavigationDestination(icon: Icon(Icons.settings), label: 'Settings'),
        ],
      ),
    );
  }
}
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