// Author: fruit.com.cn // 剧场页筛选、排行、新剧、预约四个入口。 import 'package:flutter/material.dart'; import '../../../core/theme/app_colors.dart'; import '../../../l10n/app_localizations.dart'; import '../../filter/filter_page.dart'; import '../../new_releases/new_releases_page.dart'; import '../../ranking/ranking_page.dart'; import '../../reserve/reserve_page.dart'; const double _toolbarHeight = 36; const double _toolbarGap = 10; const double _toolbarRadius = 10; const Color _filterIconColor = AppColors.blueSoft; const Color _newIconColor = AppColors.blueSoft; /// 剧场工具条。点按后由调用方打开对应页面。 class DiscoverToolbar extends StatelessWidget { const DiscoverToolbar({super.key, required this.onOpen}); final void Function(Widget page) onOpen; @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; return Padding( padding: const EdgeInsets.fromLTRB(14, 2, 14, 12), child: Row( children: [ Expanded( child: _button( key: const Key('theater-toolbar-filter'), icon: Icons.tune_rounded, color: _filterIconColor, label: l10n.filter, onTap: () => onOpen(const FilterPage()), ), ), const SizedBox(width: _toolbarGap), Expanded( child: _button( key: const Key('theater-toolbar-ranking'), icon: Icons.local_fire_department_rounded, color: AppColors.blue, label: l10n.rankingTab, onTap: () => onOpen(const RankingPage()), ), ), const SizedBox(width: _toolbarGap), Expanded( child: _button( key: const Key('theater-toolbar-new'), icon: Icons.play_circle_fill_rounded, color: _newIconColor, label: l10n.newDramas, onTap: () => onOpen(const NewReleasesPage()), ), ), const SizedBox(width: _toolbarGap), Expanded( child: _button( key: const Key('theater-toolbar-reserve'), icon: Icons.calendar_month_rounded, color: AppColors.blue, label: l10n.reserve, onTap: () => onOpen(const ReservePage()), ), ), ], ), ); } Widget _button({ required Key key, required IconData icon, required Color color, required String label, required VoidCallback onTap, }) { return Material( color: AppColors.card, borderRadius: BorderRadius.circular(_toolbarRadius), child: InkWell( key: key, onTap: onTap, borderRadius: BorderRadius.circular(_toolbarRadius), child: Container( height: _toolbarHeight, decoration: BoxDecoration( borderRadius: BorderRadius.circular(_toolbarRadius), border: Border.all(color: AppColors.border), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(icon, size: 16, color: color), const SizedBox(width: 4), Flexible( child: Text( label, maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle( color: AppColors.onSurface, fontSize: 13, fontWeight: FontWeight.w600, ), ), ), ], ), ), ), ); } }