61 lines
2.0 KiB
Dart
61 lines
2.0 KiB
Dart
import 'package:flutter/material.dart';
|
||
import '../constants/app_constants.dart';
|
||
|
||
/// 时间: 2026-03-22
|
||
/// 功能: 主导航内「标题 + Tab」共用 AppBar 构造
|
||
/// 介绍: 压缩工具栏与 Tab 行高度,关闭 M3 卷动 surface tint,统一收藏页与发现页顶部观感
|
||
/// 最新变化: 初始提取,减少两页相同结构的顶部留白
|
||
|
||
/// 主导航子页(IndexedStack 内)带 [TabBar] 的页面共用 [AppBar] 配置
|
||
class TabbedNavAppBar {
|
||
TabbedNavAppBar._();
|
||
|
||
static AppBar build({
|
||
required String title,
|
||
required TabController tabController,
|
||
required List<String> tabLabels,
|
||
List<Widget>? actions,
|
||
Widget? leading,
|
||
bool tabBarScrollable = false,
|
||
EdgeInsetsGeometry? tabPadding,
|
||
EdgeInsetsGeometry? tabLabelPadding,
|
||
}) {
|
||
return AppBar(
|
||
title: Text(
|
||
title,
|
||
style: const TextStyle(
|
||
fontWeight: FontWeight.bold,
|
||
fontSize: 18,
|
||
color: Colors.black87,
|
||
),
|
||
),
|
||
backgroundColor: Colors.white,
|
||
foregroundColor: Colors.black87,
|
||
iconTheme: const IconThemeData(color: Colors.black87),
|
||
elevation: 0,
|
||
scrolledUnderElevation: 0,
|
||
surfaceTintColor: Colors.transparent,
|
||
shadowColor: Colors.transparent,
|
||
centerTitle: true,
|
||
leading: leading,
|
||
actions: actions,
|
||
bottom: TabBar(
|
||
controller: tabController,
|
||
isScrollable: tabBarScrollable,
|
||
padding: tabPadding,
|
||
labelPadding: tabLabelPadding,
|
||
tabAlignment: tabBarScrollable ? TabAlignment.start : null,
|
||
dividerHeight: 0,
|
||
dividerColor: Colors.transparent,
|
||
tabs: tabLabels.map((String e) => Tab(text: e)).toList(),
|
||
labelColor: AppConstants.primaryColor,
|
||
unselectedLabelColor: Colors.grey[600],
|
||
indicator: UnderlineTabIndicator(
|
||
borderSide: BorderSide(color: AppConstants.primaryColor, width: 3),
|
||
),
|
||
labelStyle: const TextStyle(fontWeight: FontWeight.bold),
|
||
),
|
||
);
|
||
}
|
||
}
|