// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flutter code sample for [BottomNavigationBar]. import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); static const String _title = 'Flutter Code Sample'; @override Widget build(BuildContext context) { return const MaterialApp( title: _title, home: MyStatefulWidget(), ); } } class MyStatefulWidget extends StatefulWidget { const MyStatefulWidget({super.key}); @override State<MyStatefulWidget> createState() => _MyStatefulWidgetState(); } class _MyStatefulWidgetState extends State<MyStatefulWidget> { int _selectedIndex = 0; final ScrollController _homeController = ScrollController(); Widget _listViewBody() { return ListView.separated( controller: _homeController, itemBuilder: (BuildContext context, int index) { return Center( child: Text( 'Item $index', ), ); }, separatorBuilder: (BuildContext context, int index) => const Divider( thickness: 1, ), itemCount: 50); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('BottomNavigationBar Sample'), ), body: _listViewBody(), bottomNavigationBar: BottomNavigationBar( items: const <BottomNavigationBarItem>[ BottomNavigationBarItem( icon: Icon(Icons.home), label: 'Home', ), BottomNavigationBarItem( icon: Icon(Icons.open_in_new_rounded), label: 'Open Dialog', ), ], currentIndex: _selectedIndex, selectedItemColor: Colors.amber[800], onTap: (int index) { switch (index) { case 0: // only scroll to top when current index is selected. if (_selectedIndex == index) { _homeController.animateTo( 0.0, duration: const Duration(milliseconds: 500), curve: Curves.easeOut, ); } case 1: showModal(context); } setState( () { _selectedIndex = index; }, ); }, ), ); } void showModal(BuildContext context) { showDialog( context: context, builder: (BuildContext context) => AlertDialog( content: const Text('Example Dialog'), actions: <TextButton>[ TextButton( onPressed: () { Navigator.pop(context); }, child: const Text('Close'), ) ], ), ); } }