import 'package:ansu_ui/badge/as_badge.dart'; import 'package:ansu_ui/bar/as_tab_indicator.dart'; import 'package:ansu_ui/bar/as_tabbar_item.dart'; import 'package:flutter/material.dart'; import 'package:ansu_ui/styles/as_colors.dart'; import 'package:velocity_x/velocity_x.dart'; /// ## 安速Tabbar /// /// [items] /// /// [controller] see more TabController class ASTabBar extends StatelessWidget implements PreferredSizeWidget { ///items final List? items; final List? tabItems; /// TabController final TabController controller; ///可滚动 final bool isScrollable; final ValueChanged? onTap; ASTabBar({ Key? key, required this.items, required this.controller, this.isScrollable = false, this.onTap, }) : tabItems = null, super(key: key); /// ## TabBar with tag ///```dart /// ASTabBar.tag( /// isScrollable: true, /// tabItems: [ /// ASTabBarItem(title:'Tab1',tag:'12'), /// ASTabBarItem(title:'Tab2'), /// ], /// controller: _tabController4, /// ) ///``` /// ASTabBar.tag({ Key? key, required this.tabItems, required this.controller, this.isScrollable = false, this.onTap, }) : items = null, super(key: key); bool get isTag => items?.isEmpty ?? true; @override Widget build(BuildContext context) { return Align( alignment: Alignment.center, child: TabBar( isScrollable: isScrollable, controller: controller, onTap: onTap, tabs: isTag ? tabItems!.map((e) { return Tab( child: ASBadge( child: e.title!.text.make(), tag: e.tag, ), ); }).toList() : items! .map((e) => Tab( child: e.text.make(), )) .toList(), labelStyle: TextStyle( fontSize: 14, fontWeight: FontWeight.bold, ), unselectedLabelStyle: TextStyle( fontWeight: FontWeight.normal, ), labelColor: kTextColor, unselectedLabelColor: kTextSubColor, indicatorSize: TabBarIndicatorSize.label, indicatorPadding: EdgeInsets.zero, indicator: ASTabIndicator(), ), ); } @override Size get preferredSize => Size.fromHeight(46); }