// 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. import 'package:flutter/material.dart'; /// Flutter code sample for [BottomNavigationBar]. void main() => runApp(const BottomNavigationBarExampleApp()); class BottomNavigationBarExampleApp extends StatelessWidget { const BottomNavigationBarExampleApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp(home: BottomNavigationBarExample()); } } class BottomNavigationBarExample extends StatefulWidget { const BottomNavigationBarExample({super.key}); @override State createState() => _BottomNavigationBarExampleState(); } class _BottomNavigationBarExampleState extends State { 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(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( onPressed: () { Navigator.pop(context); }, child: const Text('Close'), ), ], ), ); } }