Search code examples
androidflutterdartflutter-layout

Add bottom border of to tabs in Flutter


What I'm trying to do is adding a bottom border of tabBar, so it will be under tabs title and above the indicatorColor and for both active and Inactive tabs, just like the attached image.

Red line is what I am trying to add, green line is the indicatorColor.

Note, usually I do this for appBar using 'bottom' but here bottom is reserved to the TabBar.

Is this possible?

Thanks a lot

Flutter tabs screen


Solution

  • You can set the AppBar shape property as abdulrahmanAbdullah says. But if you strictly need the border above the indicator, you can put it inside of each tab bar item. Here's one take on it:

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(TabBarDemo());
    }
    
    
    
    class TabBarDemo extends StatelessWidget {
    
      Widget _createTab(String text) {
        return Tab(
          child: Row(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              Expanded(
                child: Container(
                  child: Center(child: Text(text)),
                  decoration: BoxDecoration(border: Border(bottom: BorderSide(color: Colors.black)))
                )
              ),
            ]
          ),
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData(
            primaryColor: Colors.white,
          ),
          home: DefaultTabController(
            length: 3,
            child: Scaffold(
              appBar: AppBar(
                elevation: 0,
                bottom: TabBar(
                  labelPadding: EdgeInsets.all(0),
                  tabs: [
                    _createTab("Tab 1"),
                    _createTab("Tab 2"),
                    _createTab("Tab 3"),
                  ],
                ),
                title: Text('Tabs Demo'),
              ),
              body: TabBarView(
                children: [
                  Icon(Icons.directions_car),
                  Icon(Icons.directions_transit),
                  Icon(Icons.directions_bike),
                ],
              ),
            ),
          ),
        );
      }
    }