import 'package:flutter/material.dart';
import 'package:extended_tabs/extended_tabs.dart';
class ExtendedTabPage extends StatefulWidget {
const ExtendedTabPage({Key? key}) : super(key: key);
@override
State<ExtendedTabPage> createState() => _ExtendedTabPageState();
}
class _ExtendedTabPageState extends State<ExtendedTabPage> with SingleTickerProviderStateMixin {
late TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: 3, vsync: this);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
// 测试参数
var textDirection = TextDirection.ltr;
var isScrollable = false;
var labelPadding = EdgeInsets.symmetric(horizontal: 16);
var indicatorSize = TabBarIndicatorSize.label;
var mainAxisAlignment = null;
// 固定参数
final indicator = BoxDecoration(
borderRadius: BorderRadius.circular(26),
color: Colors.blue,
);
final labelColor = Colors.black;
final unselectedLabelColor = Colors.black54;
final labelStyle = TextStyle(fontSize: 14, fontWeight: FontWeight.bold);
final unselectedLabelStyle = TextStyle(fontSize: 14);
return Scaffold(
appBar: AppBar(
title: const Text('Extended Tab Page'),
),
body: Directionality(
textDirection: textDirection,
child: Column(
children: [
TabBar(
controller: _tabController,
isScrollable: isScrollable,
labelPadding: labelPadding,
indicatorSize: indicatorSize,
indicator: indicator,
labelColor: labelColor,
unselectedLabelColor: unselectedLabelColor,
labelStyle: labelStyle,
unselectedLabelStyle: unselectedLabelStyle,
tabs: const [
Tab(text: 'F Tab 1'),
Tab(text: 'F Tab 2'),
Tab(text: 'F Tab 3'),
],
),
Container(height: 16, color: Colors.black12,),
ExtendedTabBar(
controller: _tabController,
isScrollable: isScrollable,
labelPadding: labelPadding,
indicatorSize: indicatorSize,
indicator: indicator,
labelColor: labelColor,
unselectedLabelColor: unselectedLabelColor,
labelStyle: labelStyle,
unselectedLabelStyle: unselectedLabelStyle,
mainAxisAlignment: mainAxisAlignment,
tabs: const [
Tab(text: 'E Tab 1'),
Tab(text: 'E Tab 2'),
Tab(text: 'E Tab 3'),
],
),
Expanded(
child: ExtendedTabBarView(
controller: _tabController,
children: [
for (var i = 1; i <= 3; i++)
buildPage(i, textDirection, isScrollable, labelPadding, indicatorSize, mainAxisAlignment),
],
),
),
],
),
),
);
}
Widget buildPage(
int id,
TextDirection textDirection,
bool isScrollable,
EdgeInsetsGeometry? labelPadding,
TabBarIndicatorSize indicatorSize,
MainAxisAlignment? mainAxisAlignment,
) {
return Container(
color: Colors.black12,
alignment: Alignment.center,
child: Text(
'Page $id\n\n'
'textDirection: $textDirection\n'
'labelPadding: $labelPadding\n'
'isScrollable: $isScrollable\n'
'indicatorSize: $indicatorSize\n'
'mainAxisAlignment: $mainAxisAlignment',
),
);
}
}