アプリの下部にナビゲーションを設定するには、BottomNavigationBarを使います。

まずは、ナビゲーションによって切り替わる画面を簡単に作成します。

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const List<Widget> _pages = <Widget>[
    Text('Home'),
    Text('Settings'),
    Text('Account'),
  ];

    int _selectedValue = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: _pages.elementAt(_selectedValue),
      ),
    );
  }
}

ScaffoldbottomNavigationBarを設定します。

bottomNavigationBarには、BottomNavigationBarを指定します。

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: _pages.elementAt(_selectedValue),
    ),
    bottomNavigationBar: BottomNavigationBar(),
  );
}

BottomNavigationBarBottomNavigationBarItemでナビゲーションボタンを設定します。

bottomNavigationBar: BottomNavigationBar(
  items: const <BottomNavigationBarItem>[
    BottomNavigationBarItem(
        icon: Icon(Icons.home_rounded), label: "HOME"),
    BottomNavigationBarItem(
        icon: Icon(Icons.settings_rounded), label: "SETTINGS"),
    BottomNavigationBarItem(
        icon: Icon(Icons.person_rounded), label: "ACCOUNT"),
  ],
),

背景を白にしましょう。

bottomNavigationBar: BottomNavigationBar(
  backgroundColor: Colors.white,
  items: const <BottomNavigationBarItem>[
    BottomNavigationBarItem(
        icon: Icon(Icons.home_rounded), label: "HOME"),
    BottomNavigationBarItem(
        icon: Icon(Icons.settings_rounded), label: "SETTINGS"),
    BottomNavigationBarItem(
        icon: Icon(Icons.person_rounded), label: "ACCOUNT"),
  ],
),

現在、どのナビゲーションに該当しているか、currentIndexで指定します。

bottomNavigationBar: BottomNavigationBar(
  backgroundColor: Colors.white,
  items: const <BottomNavigationBarItem>[
    BottomNavigationBarItem(
        icon: Icon(Icons.home_rounded), label: "HOME"),
    BottomNavigationBarItem(
        icon: Icon(Icons.settings_rounded), label: "SETTINGS"),
    BottomNavigationBarItem(
        icon: Icon(Icons.person_rounded), label: "ACCOUNT"),
  ],
  currentIndex: _selectedValue,
),

ボタンをタップすると切り替わるように、onTapを設定します。

動作は、_selectedValueをボタンを押した場所のindexに上書きするようにします。

void _onTapped(int index) {
  setState(() {
    _selectedValue = index;
  });
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: _pages.elementAt(_selectedValue),
    ),
    bottomNavigationBar: BottomNavigationBar(
      backgroundColor: Colors.white,
      items: const <BottomNavigationBarItem>[
        BottomNavigationBarItem(
            icon: Icon(Icons.home_rounded), label: "HOME"),
        BottomNavigationBarItem(
            icon: Icon(Icons.settings_rounded), label: "SETTINGS"),
        BottomNavigationBarItem(
            icon: Icon(Icons.person_rounded), label: "ACCOUNT"),
      ],
      currentIndex: _selectedValue,
      onTap: _onTapped,
    ),
  );
}

一通り完成したので、動作確認します。

image2

SETTINGSのアイコンをタップすると、

image3

Settings画面になり、アイコンの色も変わりました。

ACCOUNTをタップしてみましょう。

image4

Account画面に切り替わることができました。

ブログ一覧