// Author: fruit.com.cn import 'package:flutter/material.dart'; import '../../../core/theme/app_colors.dart'; import '../../../l10n/app_localizations.dart'; /// 剧场页页头:品牌、搜索与个人页入口。 class DiscoverHeader extends StatelessWidget { const DiscoverHeader({ super.key, required this.onSearch, required this.onProfile, }); final VoidCallback onSearch; final VoidCallback onProfile; @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; return SizedBox( height: 46, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 14), child: Row( children: [ _brand(l10n), const Spacer(), _HeaderIcon( key: const Key('discover-search-button'), icon: Icons.search_rounded, tooltip: l10n.search, onTap: onSearch, ), const SizedBox(width: 8), _profile(l10n), ], ), ), ); } Widget _brand(AppLocalizations l10n) { return Row( children: [ Container( width: 24, height: 24, alignment: Alignment.center, decoration: BoxDecoration( color: AppColors.blue, borderRadius: BorderRadius.circular(7), ), child: const Icon( Icons.play_arrow_rounded, color: AppColors.onPrimary, size: 16, ), ), const SizedBox(width: 8), Text( l10n.discoverTab, style: const TextStyle( fontFamily: 'Outfit', color: AppColors.onSurface, fontSize: 15, fontWeight: FontWeight.w800, ), ), ], ); } Widget _profile(AppLocalizations l10n) { return Semantics( button: true, label: l10n.myTab, child: InkWell( key: const Key('discover-profile'), customBorder: const CircleBorder(), onTap: onProfile, child: Container( width: 36, height: 36, decoration: const BoxDecoration( shape: BoxShape.circle, gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [Color(0xFF6A5CFF), AppColors.blue], ), ), child: const Icon( Icons.person_rounded, color: AppColors.onSurface, size: 18, ), ), ), ); } } class _HeaderIcon extends StatelessWidget { const _HeaderIcon({ super.key, required this.icon, required this.tooltip, required this.onTap, }); final IconData icon; final String tooltip; final VoidCallback onTap; @override Widget build(BuildContext context) { return SizedBox( width: 36, height: 36, child: IconButton( tooltip: tooltip, onPressed: onTap, padding: EdgeInsets.zero, style: IconButton.styleFrom( backgroundColor: const Color(0xFF2C2D33), foregroundColor: AppColors.onSurface, ), icon: Icon(icon, size: 18), ), ); } }