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:ansu_ui/extension/string_extension.dart'; /// ## 安速Tabbar /// /// [items] /// /// [controller] see more TabController class ASTabBar extends StatefulWidget implements PreferredSizeWidget { ///items final List items; final List tabItems; /// TabController final TabController controller; ///可滚动 final bool isScrollable; ASTabBar( {Key key, @required this.items, @required this.controller, this.isScrollable = false}) : 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}) : items = null, super(key: key); @override _ASTabBarState createState() => _ASTabBarState(); @override Size get preferredSize => Size.fromHeight(46); } class _ASTabBarState extends State { bool get isTag => widget.items?.isEmpty ?? true; @override Widget build(BuildContext context) { return Align( alignment: Alignment.center, child: TabBar( isScrollable: widget.isScrollable, controller: widget.controller, tabs: isTag ? widget.tabItems.map((e) { return Tab( child: ASBadge( child: e.title.text, tag: e.tag, ), ); }).toList() : widget.items .map((e) => Tab( child: e.text, )) .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(), ), ); } }