简体   繁体   中英

How to add notch to TabBar to place FloatingActionButton in it

I would like to create a notch inside the TabBar to place the FloatingActionBottom in it but I don't know how to do that.

I found nothing in the documentations or on the internet.

BottomNavigationBar 上的 FloatingActionButton

You can use the Bottom App Bar for this kind of User Interface The hasNotch property of the BottomAppBar must be true.

This would get you what I am upto

Widget build(BuildContext context) {
  return new Scaffold(
    appBar: AppBar(title: const Text('Bottom App Bar')),
    floatingActionButtonLocation: 
      FloatingActionButtonLocation.centerDocked,
    floatingActionButton: FloatingActionButton(
      child: const Icon(Icons.add), onPressed: () {},),
    bottomNavigationBar: BottomAppBar(
      hasNotch: true,
      child: new Row(
        mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: <Widget>[
          IconButton(icon: Icon(Icons.menu), onPressed: () {},),
          IconButton(icon: Icon(Icons.search), onPressed: () {},),
        ],
      ),
    ),
  );
}

Thank You!

Try implementing this revised version of the code. The FAB should persist across the three tabs

class BarTab extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
  home: DefaultTabController(
    length: 3,
    child: Scaffold(
      appBar: AppBar(
        bottom: TabBar(
          tabs: [
            Tab(icon: Icon(Icons.directions_car)),
            Tab(icon: Icon(Icons.directions_transit)),
            Tab(icon: Icon(Icons.directions_bike)),
          ],
        ),
        title: Text('Tabs Demo'),
      ),
      body: TabBarView(
        children: [
          Icon(Icons.audio),
          Icon(Icons.play),
          Icon(Icons.maps),
        ],
      ),

 floatingActionButton: FloatingActionButton(
 onpressed:(){},
 child: Icon(Icons.add),
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar:BottomAppBar(
 color:Colors.blue,
 hasNotch: true,
 child:Container(
height:50.0
child:Row(
  children: <Widget>[
    IconButton(
      icon: Icon(Icons.menu),
      onPressed: (){})
  ]
)
)

    ),
  ),
);
}

2020 solution:

hasNotch property is no more in BottomAppBar, however, you can do this in Scaffold

 bottomNavigationBar: BottomAppBar(
    shape: CircularNotchedRectangle(), //this is what creates the notch 
    color: Colors.blue,
    child: SizedBox(
      height: height * 0.1,
      width: width,
    ),
  ),
  floatingActionButton: Container(
    margin: EdgeInsets.all(10),
    width: 80.0,
    height: 80.0,
    child: FloatingActionButton(
      onPressed: () {},
      child: Icon(
        Icons.add,
        size: 25.0,
      ),
    ),
  ),
  floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked

output :

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM