Я пытаюсь создать TabBar с индикатором, но элемент вкладки не заполняет оставшееся пространство, поэтому индикатор просто переносит текст. Я хочу установить индикатор, чтобы заполнить оставшееся пространство.
Вот мой код
Container(
height: 45,
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.circular(
8,
),
),
child: TabBar(
indicator: BoxDecoration(
borderRadius: BorderRadius.circular(
8,
),
color: Colors.lightBlueAccent,
),
dividerColor: Colors.transparent,
tabAlignment: TabAlignment.fill,
labelColor: Colors.white,
unselectedLabelColor: Colors.white,
controller: tabController,
tabs: const [
Expanded(
child: Tab(
text: 'Upload Video Url',
),
),
Expanded(
child: Tab(
text: 'Upload File',
),
),
],
),
)
Результат выглядит так
Я пытаюсь создать панель вкладок из Flutter — Как создать собственную панель вкладок, но все равно не могу заполнить оставшееся пространство.
Я также пытаюсь использовать «Расширено на вкладке», но все равно не меняюсь.
TabBar(
indicator: BoxDecoration(
borderRadius: BorderRadius.circular(
8,
),
color: Colors.lightBlueAccent,
),
dividerColor: Colors.transparent,
tabAlignment: TabAlignment.fill,
labelColor: Colors.white,
unselectedLabelColor: Colors.white,
controller: tabController,
tabs: const [
Expanded(
child: Tab(
text: 'Upload Video Url',
),
),
Expanded(
child: Tab(
text: 'Upload File',
),
),
],
)
Вместо Tab
вы можете использовать Container
с пользовательской конфигурацией, также вам нужно установить labelPadding
на ноль следующим образом:
Container(
height: 45,
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(
8,
),
),
child: TabBar(
labelPadding: EdgeInsets.zero, // <=== add this
indicator: BoxDecoration(
borderRadius: BorderRadius.circular(
8,
),
color: Colors.lightBlueAccent,
),
dividerColor: Colors.transparent,
tabAlignment: TabAlignment.fill,
labelColor: Colors.white,
unselectedLabelColor: Colors.white,
controller: controller,
tabs: [
Expanded(
child: Container(// <=== add this
alignment: Alignment.center,
width: double.infinity,
height: double.infinity,
color: Colors.transparent,
margin: EdgeInsets.zero,
padding: EdgeInsets.symmetric(horizontal: 20),
child: Text('Upload Video Url'),
),
),
Expanded(
child: Container(// <=== add this
alignment: Alignment.center,
width: double.infinity,
height: double.infinity,
color: Colors.transparent,
margin: EdgeInsets.zero,
padding: EdgeInsets.symmetric(horizontal: 20),
child: Text('Upload File'),
),
),
],
),
)
Используйте индикаторSize: TabBarIndicatorSize.tab, свойство по умолчанию, которое заполняет оставшееся пространство.
TabBar(
indicator: BoxDecoration(
borderRadius: BorderRadius.circular(
8.0,
),
color: Colors.lightBlueAccent,
),
indicatorSize: TabBarIndicatorSize.tab, //this one is missing
dividerColor: Colors.transparent,
tabAlignment: TabAlignment.fill,
labelColor: Colors.black,
unselectedLabelColor: Colors.black,
controller: _tabController,
tabs: const [
Expanded(
child: Tab(
text: 'Upload Video Url',
),
),
Expanded(
child: Tab(
text: 'Upload File',
),
),
],
)
добавьте это свойство IndicatorSize: TabBarIndicatorSize.tab и удалите расширенный виджет.
TabBar(
indicator: BoxDecoration(
borderRadius: BorderRadius.circular(8,),
color: Colors.lightBlueAccent,
),
indicatorSize: TabBarIndicatorSize.tab,
dividerColor: Colors.transparent,
tabAlignment: TabAlignment.fill,
labelColor: Colors.white,
unselectedLabelColor: Colors.white,
controller: tabController,
tabs: const[
Tab(
text: 'Upload Video Url',
),
Tab(
text: 'Upload File',
),
],
),