TabBarList
import 'package:ZyFlutter/theme/font.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';/// 顶部tabBar
class TabBarList extends StatefulWidget {// 标题final Widget title;// 右侧功能区域final List actions;// 左侧区域final Widget leading;// 内容区域final List child;// tab列表final List tabs;TabBarList({Key key, this.title, this.actions, this.leading, this.child, this.tabs}): super(key: key);@override_TabBarListState createState() => _TabBarListState();
}class _TabBarListState extends Statewith SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin {// Tab控制器TabController _tabController;int _tabIndex = 0;List myTabs = [];// 初始化@overridevoid initState() {super.initState();_tabController = TabController(length: widget.tabs.length, vsync: this);setState(() {myTabs = widget.tabs;});}@overridevoid dispose() {super.dispose();_tabController.dispose();}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(leading: widget.leading,title: widget.title,actions: widget.actions,shadowColor: Colors.white,bottom: TabBar(indicator: BoxDecoration(border: Border(bottom: BorderSide(color: Theme.of(context).toggleableActiveColor,width: 3.sp,style: BorderStyle.solid),),),tabs: myTabs,indicatorSize: TabBarIndicatorSize.label,labelStyle: TextStyle(color: Theme.of(context).colorScheme.primary,fontSize: Font.firstLevelTitle,fontWeight: FontWeight.bold),unselectedLabelStyle: TextStyle(color: Theme.of(context).colorScheme.primaryVariant,fontSize: Font.secondaryTitle),controller: _tabController,),),body: TabBarView(controller: _tabController,children: widget.child,),);}@overridebool get wantKeepAlive => true;
}
使用
import 'package:ZyFlutter/components/TabBarList.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:tapped/tapped.dart';class Village extends StatefulWidget {@override_VillageState createState() => _VillageState();
}class _VillageState extends State {List list = [Tab(text: "精选",),Tab(text: "本村",),Tab(text: "关注",),];@overrideWidget build(BuildContext context) {return TabBarList(tabs: list,title: Center(child: Text("村里"),),child: [Text("123"), Text("999"), Text("123")],actions: [Padding(child: Tapped(child: Icon(Icons.camera_alt,color: Theme.of(context).colorScheme.primaryVariant,),),padding: EdgeInsets.only(right: 16.sp),)],);}
}