7

I just need the the label in my BottomNavigationBarItem's but I cant find a way to remove them.
You can hide the labels with showSelectedLabels and showUnselectedLabels set to false but there are no equivalent for Icons.

Constructor:

BottomNavigationBar({
    Key key,
    @required this.items,
    this.onTap,
    this.currentIndex = 0,
    this.elevation = 8.0,
    BottomNavigationBarType type,
    Color fixedColor,
    this.backgroundColor,
    this.iconSize = 24.0,
    Color selectedItemColor,
    this.unselectedItemColor,
    this.selectedIconTheme = const IconThemeData(),
    this.unselectedIconTheme = const IconThemeData(),
    this.selectedFontSize = 14.0,
    this.unselectedFontSize = 12.0,
    this.selectedLabelStyle,
    this.unselectedLabelStyle,
    this.showSelectedLabels = true,
    bool showUnselectedLabels,
  })
Joel Broström
  • 3,530
  • 1
  • 34
  • 61

3 Answers3

11

The key to this problem is to look at the individual BottomNavigationBarItem().

If you insert a Container with a height of 0.0 as the title you get all the vertical space of the item for your icon or activeIcon. And since the BottomNavigationBarItem accepts any widget as icon or activeIcon you're pretty much free to use whatever you want.

In your case probably just a Text() widget like so:

BottomNavigationBarItem(
  icon: Text("My Item"),
  activeIcon: Text("My Item"),
  title: Container(
    height: 0.0,
  ),
)
Robin Reiter
  • 2,281
  • 15
  • 24
  • Your right! It feels kind of 'hacky' but if it works it works. – Joel Broström Feb 05 '20 at 16:42
  • Also just used this implementation to hide the icon and change it for a centered FloatingActionButton, it really feels hacky and I'll probably try to find a better solution some day, but for now it works like a charm. THANKS! – Wicked Gummy Bear Jan 05 '21 at 11:16
  • This is a solid answer and I have used it with great success, but the new answer is less hacky and requires less mental work to understand so I'll change it to the correct answer. – Joel Broström Jun 09 '21 at 11:20
  • 1
    Not sure if/when the definition changed, but I'm using Dart 2.18.0 and `BottomNavigationBarItem` doesn't have a `title` field, it only has a `label` field which only accepts a `String`. – ubiquibacon Sep 16 '22 at 08:01
5

A better way I think is to configure the BottomNavigationBar. Just add this line and it will work fine. No need to add lines to each item

    selectedIconTheme: IconThemeData(opacity: 0.0, size: 0),
    unselectedIconTheme: IconThemeData(opacity: 0.0, size: 0),

ex.

bottomNavigationBar: BottomNavigationBar(
    items: const <BottomNavigationBarItem>[
      BottomNavigationBarItem(
        icon: Icon(Icons.home),
        label: 'Home',
      ),
      BottomNavigationBarItem(
        icon: Icon(Icons.business),
        label: 'Business',
      ),
    ],
    currentIndex: _selectedIndex,
    selectedIconTheme: IconThemeData(opacity: 0.0, size: 0),
    unselectedIconTheme: IconThemeData(opacity: 0.0, size: 0),
    selectedItemColor: Colors.amber[800],
    onTap: _onItemTapped,
Turvy
  • 882
  • 1
  • 8
  • 23
  • This seams like another solid approach. Probably more straight forward then the currently selected answer, so I'll change it to this instead. – Joel Broström Jun 09 '21 at 11:18
0

You can use 2 params with showSelectedLabels: false, showUnselectedLabels: false,

  BottomNavigationBar(
    items: const <BottomNavigationBarItem>[
      BottomNavigationBarItem(
        label: '',
        icon: Text("Menu 1"),
      ),
      BottomNavigationBarItem(
        label: '',
        icon: Text("Menu 2"),
      ),
    ],
    currentIndex: _selectedIndex,
    selectedItemColor: Colors.green[800],
    showSelectedLabels: false,
    showUnselectedLabels: false,
    onTap: _onItemTapped,
  )
Bauroziq
  • 951
  • 9
  • 14
  • I think you read the question wrong. I need the label to stay but the icon to be removed. "You can hide the labels with showSelectedLabels and showUnselectedLabels set to false but there are no equivalent for Icons." – Joel Broström Jul 19 '22 at 11:35