Hi can we customize tabbar width in flutter ? my tabbar width is fixed in here so when i have long text in my tabbar it will not shown completetly, i want to make my tabbar width is flexible base on the content so when my text is just short text the tabbar width will be small and when the text is long text the tabbar width be bigger than the short text tab. I've been try search it on internet but i can't found any answer to fix my issues.
8 Answers
TabBar(isScrollable: true) Makes a scrollable tab bar. it's useful when your tab text content or number of your tabs doesn't fit into display size.
or maybe you can do something like this:
child: TabBar( tabs: [ Container( width: 30.0, child: Tab(text: 'hello'), ), Container( child: Tab(text: 'world'), ), ], ) 7 Comments
indicatorSize: TabBarIndicatorSize.label,here's how I solved this problem:
bottom: TabBar( isScrollable: true, controller: _tabController, indicatorColor: Colors.white, labelPadding: EdgeInsets.symmetric(horizontal: 10.0), tabs: <Widget>[ Tab( icon: Icon(Icons.camera_alt), ), Tab( text: "CONVERSAS", ), Tab( text: "STATUS", ), Tab( text: "CHAMADAS", ) ], ) Just use padding, I think it'll work for every screen size! ... and don't forget:
isScrollable: true Comments
double width = MediaQuery.of(context).size.width; double yourWidth = width / 5; bottom: TabBar( indicatorColor: Colors.white, indicatorSize: TabBarIndicatorSize.label, isScrollable: true, controller: _tabcontroller, tabs: <Widget>[ Container( width: 30, height: 50, alignment: Alignment.center, child: Icon( Icons.camera_alt, ), ), Container( width: yourWidth, height: 50, alignment: Alignment.center, child: Text("CHATS")), Container( width: yourWidth, height: 50, alignment: Alignment.center, child: Text("STATUS")), Container( width: yourWidth, height: 50, alignment: Alignment.center, child: Text("CALL")) ], ),` --------------- ` 3 Comments
You can add labelPadding to your TabBar Widget like so:
child: TabBar( indicatorColor: Colors.white, labelPadding: EdgeInsets.symmetric(horizontal: 2.0), .... tabs: <Tab>[ ...... ] ) ...... Or you can do this (I don't recommend it)
In the material/tabs.dart file, edit this line:
padding: widget.labelPadding ?? tabBarTheme.labelPadding ?? kTabLabelPadding, with something similar
padding: EdgeInsets.symmetric(horizontal: 2.0), By default flutter uses kTabLabelPadding for padding.
Flutter issue here
Comments
for different sized device:
double orjWidth = MediaQuery.of(context).size.width; double cameraWidth = orjWidth/24; double yourWidth = (orjWidth - cameraWidth)/5; bottom: TabBar( controller: _tabController, indicatorColor: Colors.white, labelPadding: EdgeInsets.symmetric(horizontal:(orjWidth - ( cameraWidth + yourWidth*3))/8), isScrollable: true, tabs: [ Container( child: Tab(icon: Icon(Icons.camera_alt)), width: cameraWidth, ), Container( child: Tab( text: "CHATS", ), width: yourWidth, ), Container( child: Tab( text: "STATUS", ), width: yourWidth, ), Container( child: Tab( text: "CALL", ), width: yourWidth, ), Comments
The tabbar widget adds by itself an adjusted horizontal Padding equal to 16.
adjustedPadding = const EdgeInsets.symmetric( vertical: verticalAdjustment, horizontal: 16.0); if u gave a label padding to the tabbar these 16 wont be added and then manually configure the padding of the other 3 tabs using a padding widget
