From 3fefd544fb2312c1b03f6e296f0748ff624baf9e Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Tue, 20 Oct 2026 20:06:17 +0800 Subject: [PATCH] =?UTF-8?q?chore(cleanup):=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E4=BB=A3=E7=A0=81=E4=B8=8E=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/res/drawable-hdpi/splash_icon.png | Bin 13024 -> 0 bytes .../main/res/drawable-mdpi/splash_icon.png | Bin 7854 -> 0 bytes .../main/res/drawable-xhdpi/splash_icon.png | Bin 17879 -> 0 bytes .../main/res/drawable-xxhdpi/splash_icon.png | Bin 29014 -> 0 bytes .../main/res/drawable-xxxhdpi/splash_icon.png | Bin 39365 -> 0 bytes android/app/src/main/res/values/colors.xml | 1 - lib/core/widgets/library_drama_tile.dart | 74 --- lib/pages/auth/auth_binding.dart | 6 - lib/pages/discover/category_dramas_page.dart | 64 --- lib/pages/discover/widgets/category_grid.dart | 114 ----- .../discover/widgets/ranking_section.dart | 268 ----------- lib/pages/home/home_browse_logic.dart | 70 --- lib/pages/home/home_browse_view.dart | 451 ------------------ .../home/widgets/home_browse_header.dart | 137 ------ lib/pages/home/widgets/home_menu_sheet.dart | 228 --------- .../mine/widgets/continue_watching_card.dart | 131 ----- 16 files changed, 1544 deletions(-) delete mode 100644 android/app/src/main/res/drawable-hdpi/splash_icon.png delete mode 100644 android/app/src/main/res/drawable-mdpi/splash_icon.png delete mode 100644 android/app/src/main/res/drawable-xhdpi/splash_icon.png delete mode 100644 android/app/src/main/res/drawable-xxhdpi/splash_icon.png delete mode 100644 android/app/src/main/res/drawable-xxxhdpi/splash_icon.png delete mode 100644 lib/core/widgets/library_drama_tile.dart delete mode 100644 lib/pages/auth/auth_binding.dart delete mode 100644 lib/pages/discover/category_dramas_page.dart delete mode 100644 lib/pages/discover/widgets/category_grid.dart delete mode 100644 lib/pages/discover/widgets/ranking_section.dart delete mode 100644 lib/pages/home/home_browse_logic.dart delete mode 100644 lib/pages/home/home_browse_view.dart delete mode 100644 lib/pages/home/widgets/home_browse_header.dart delete mode 100644 lib/pages/home/widgets/home_menu_sheet.dart delete mode 100644 lib/pages/mine/widgets/continue_watching_card.dart diff --git a/android/app/src/main/res/drawable-hdpi/splash_icon.png b/android/app/src/main/res/drawable-hdpi/splash_icon.png deleted file mode 100644 index 2f2efcf07871a371d32fc4651104031fa87f996b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13024 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 M07*qoM6N<$f|lm?{r~^~ diff --git a/android/app/src/main/res/drawable-xhdpi/splash_icon.png b/android/app/src/main/res/drawable-xhdpi/splash_icon.png deleted file mode 100644 index f798d5875a7981f1c5235c0cacabf7096984c082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17879 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≺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 V<`f0Fk2(MV002ovPDHLkV1jUS0sH^} diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml index c6431cb..7ae7661 100644 --- a/android/app/src/main/res/values/colors.xml +++ b/android/app/src/main/res/values/colors.xml @@ -3,5 +3,4 @@ #1F1B16 - #FFF1E5 diff --git a/lib/core/widgets/library_drama_tile.dart b/lib/core/widgets/library_drama_tile.dart deleted file mode 100644 index 2c715ff..0000000 --- a/lib/core/widgets/library_drama_tile.dart +++ /dev/null @@ -1,74 +0,0 @@ -// Author: fruit.com.cn - -import 'package:flutter/material.dart'; - -import '../data/models/drama.dart'; -import '../theme/app_colors.dart'; -import '../theme/app_dimens.dart'; -import 'remote_image.dart'; - -/// 收藏等账号列表复用的剧集卡片,视觉与"我的"页列表保持一致。 -class LibraryDramaTile extends StatelessWidget { - const LibraryDramaTile({ - super.key, - required this.drama, - required this.onTap, - this.trailing, - }); - - final Drama drama; - final VoidCallback? onTap; - final Widget? trailing; - - @override - Widget build(BuildContext context) { - return Material( - color: AppColors.card, - borderRadius: BorderRadius.circular(AppDimens.innerRadius), - clipBehavior: Clip.antiAlias, - child: InkWell( - onTap: onTap, - child: Padding( - padding: const EdgeInsets.all(AppDimens.innerPadding), - child: Row( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(AppDimens.innerRadius), - child: RemoteImage(drama.posterUrl, width: 74, height: 103), - ), - const SizedBox(width: 11), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - drama.title, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: Colors.white, - fontSize: AppDimens.listTitle, - fontWeight: FontWeight.w700, - ), - ), - const SizedBox(height: 7), - Text( - drama.genre.isEmpty ? drama.category : drama.genre, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: AppColors.muted, - fontSize: AppDimens.caption, - ), - ), - ], - ), - ), - ?trailing, - ], - ), - ), - ), - ); - } -} diff --git a/lib/pages/auth/auth_binding.dart b/lib/pages/auth/auth_binding.dart deleted file mode 100644 index dbc17f7..0000000 --- a/lib/pages/auth/auth_binding.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'auth_logic.dart'; - -/// 与其它页保持一致的三层写法:binding 负责装配,logic 放状态与逻辑,view 只渲染。 -class AuthBinding { - AuthLogic create({bool signUpMode = false}) => AuthLogic(signUpMode: signUpMode); -} diff --git a/lib/pages/discover/category_dramas_page.dart b/lib/pages/discover/category_dramas_page.dart deleted file mode 100644 index 9b35069..0000000 --- a/lib/pages/discover/category_dramas_page.dart +++ /dev/null @@ -1,64 +0,0 @@ -// Author: fruit.com.cn - -import 'package:flutter/material.dart'; - -import '../../core/data/models/drama.dart'; -import '../../core/theme/app_theme.dart'; -import '../../core/widgets/empty_state.dart'; -import '../../core/widgets/plain_page_scaffold.dart'; -import '../../l10n/app_localizations.dart'; -import '../drama_detail/drama_detail_view.dart'; -import 'widgets/drama_grid.dart'; - -/// 从剧场分类九宫格进入的分类剧目列表。 -class CategoryDramasPage extends StatelessWidget { - const CategoryDramasPage({ - super.key, - required this.title, - required this.dramas, - this.onOpen, - }); - - final String title; - final List dramas; - final ValueChanged? onOpen; - - @override - Widget build(BuildContext context) { - final l10n = AppLocalizations.of(context)!; - return Theme( - data: AppTheme.light(), - child: PlainPageScaffold( - pageKey: const Key('category-dramas-page'), - backKey: const Key('category-dramas-back'), - title: title, - child: dramas.isEmpty - ? EmptyState( - key: const Key('category-dramas-empty'), - icon: Icons.movie_filter_outlined, - title: l10n.noCategoryDramas, - subtitle: l10n.emptyHint, - ) - : SingleChildScrollView( - padding: const EdgeInsets.only(top: 8, bottom: 28), - child: DramaGrid( - l10n: l10n, - dramas: dramas, - onOpen: (drama) => _open(context, drama), - ), - ), - ), - ); - } - - void _open(BuildContext context, Drama drama) { - final callback = onOpen; - if (callback != null) { - callback(drama); - return; - } - Navigator.of(context).push( - MaterialPageRoute(builder: (_) => DramaDetailPage(drama: drama)), - ); - } -} diff --git a/lib/pages/discover/widgets/category_grid.dart b/lib/pages/discover/widgets/category_grid.dart deleted file mode 100644 index 63ae42f..0000000 --- a/lib/pages/discover/widgets/category_grid.dart +++ /dev/null @@ -1,114 +0,0 @@ -// Author: fruit.com.cn - -import 'package:flutter/material.dart'; - -import '../../../core/data/models/content_category.dart'; -import '../../../core/theme/app_colors.dart'; - -const double _gridPadding = 14; -const double _tileSpacing = 8; -const double _tileAspectRatio = 1.1; -const int _columns = 3; -const List _icons = [ - Icons.favorite_rounded, - Icons.bolt_rounded, - Icons.theater_comedy_rounded, - Icons.auto_awesome_rounded, - Icons.psychology_alt_rounded, - Icons.local_fire_department_rounded, - Icons.family_restroom_rounded, - Icons.work_history_rounded, -]; - -/// 剧场顶部分类九宫格。 -class CategoryGrid extends StatelessWidget { - const CategoryGrid({ - super.key, - required this.categories, - required this.onTap, - }); - - final List categories; - final ValueChanged onTap; - - @override - Widget build(BuildContext context) { - if (categories.isEmpty) return const SizedBox.shrink(); - return GridView.builder( - key: const Key('discover-category-grid'), - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - padding: const EdgeInsets.symmetric(horizontal: _gridPadding), - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: _columns, - mainAxisSpacing: _tileSpacing, - crossAxisSpacing: _tileSpacing, - childAspectRatio: _tileAspectRatio, - ), - itemCount: categories.length, - itemBuilder: (context, index) { - final category = categories[index]; - return _CategoryTile( - category: category, - icon: _icons[index % _icons.length], - onTap: () => onTap(category), - ); - }, - ); - } -} - -class _CategoryTile extends StatelessWidget { - const _CategoryTile({ - required this.category, - required this.icon, - required this.onTap, - }); - - final ContentCategory category; - final IconData icon; - final VoidCallback onTap; - - @override - Widget build(BuildContext context) { - return Material( - key: Key('discover-category-${category.id}'), - color: AppColors.card, - borderRadius: BorderRadius.circular(12), - clipBehavior: Clip.antiAlias, - child: InkWell( - onTap: onTap, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 8), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - width: 30, - height: 30, - decoration: BoxDecoration( - color: AppColors.blueSoft.withValues(alpha: 0.16), - shape: BoxShape.circle, - ), - child: Icon(icon, color: AppColors.blueSoft, size: 16), - ), - const SizedBox(height: 5), - Text( - category.name, - maxLines: 2, - overflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, - style: const TextStyle( - color: AppColors.onSurface, - fontSize: 9, - fontWeight: FontWeight.w600, - height: 1.1, - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pages/discover/widgets/ranking_section.dart b/lib/pages/discover/widgets/ranking_section.dart deleted file mode 100644 index e3ade9d..0000000 --- a/lib/pages/discover/widgets/ranking_section.dart +++ /dev/null @@ -1,268 +0,0 @@ -// Author: fruit.com.cn - -import 'package:flutter/material.dart'; - -import '../../../core/data/models/drama.dart'; -import '../../../core/data/models/home_feed.dart'; -import '../../../core/theme/app_colors.dart'; -import '../../../core/widgets/empty_state.dart'; -import '../../../core/widgets/remote_image.dart'; -import '../../../l10n/app_localizations.dart'; -import '../ranking_logic.dart'; - -const int _topLimit = 5; -const double _rowHeight = 68; -const double _posterWidth = 40; -const double _posterHeight = 54; -const double _badgeSize = 24; - -/// 发现页内嵌榜单区块:热播/新剧切换 + 前 5 名。 -class RankingSection extends StatefulWidget { - const RankingSection({ - super.key, - required this.sections, - required this.fallback, - required this.onOpen, - }); - - final List sections; - final List fallback; - final ValueChanged onOpen; - - @override - State createState() => _RankingSectionState(); -} - -class _RankingSectionState extends State { - late final RankingLogic logic = RankingLogic( - sections: widget.sections, - fallback: widget.fallback, - ); - - @override - void didUpdateWidget(covariant RankingSection oldWidget) { - super.didUpdateWidget(oldWidget); - if (!identical(oldWidget.sections, widget.sections) || - !identical(oldWidget.fallback, widget.fallback)) { - logic.updateSources(sections: widget.sections, fallback: widget.fallback); - } - } - - @override - void dispose() { - logic.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) => ListenableBuilder( - listenable: logic, - builder: (context, _) => _content(context), - ); - - Widget _content(BuildContext context) { - final l10n = AppLocalizations.of(context)!; - final entries = logic.entries.take(_topLimit).toList(); - return Container( - key: const Key('discover-ranking-section'), - margin: const EdgeInsets.fromLTRB(14, 16, 14, 8), - padding: const EdgeInsets.fromLTRB(12, 12, 12, 8), - decoration: BoxDecoration( - color: AppColors.card, - borderRadius: BorderRadius.circular(14), - border: Border.all(color: AppColors.border), - ), - child: Column( - children: [ - _header(l10n), - const SizedBox(height: 8), - if (entries.isEmpty) - EmptyState( - key: const Key('ranking-empty'), - icon: Icons.leaderboard_outlined, - title: l10n.rankingEmptyTitle, - subtitle: l10n.rankingEmptyBody, - compact: true, - ) - else - for (final entry in entries) _row(entry, l10n), - ], - ), - ); - } - - Widget _header(AppLocalizations l10n) { - return Row( - children: [ - const Icon( - Icons.local_fire_department_rounded, - color: AppColors.blue, - size: 18, - ), - const SizedBox(width: 6), - Expanded( - child: Text( - l10n.rankingTitle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: AppColors.onSurface, - fontSize: 13, - fontWeight: FontWeight.w800, - ), - ), - ), - _boardChip( - key: const Key('ranking-tab-hot'), - label: l10n.rankingHot, - board: RankingBoard.hot, - ), - const SizedBox(width: 6), - _boardChip( - key: const Key('ranking-tab-new'), - label: l10n.rankingNew, - board: RankingBoard.newReleases, - ), - ], - ); - } - - Widget _boardChip({ - required Key key, - required String label, - required RankingBoard board, - }) { - final selected = logic.board == board; - return Material( - key: key, - color: selected ? AppColors.blue : AppColors.card, - borderRadius: BorderRadius.circular(999), - clipBehavior: Clip.antiAlias, - child: InkWell( - onTap: () => logic.select(board), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 9, vertical: 5), - child: Text( - label, - style: TextStyle( - color: selected ? AppColors.onPrimary : AppColors.onSurface, - fontSize: 9, - fontWeight: FontWeight.w700, - ), - ), - ), - ), - ); - } - - Widget _row(RankingEntry entry, AppLocalizations l10n) { - return _RankRow( - entry: entry, - subtitle: _subtitle(entry.drama, l10n), - onTap: () => widget.onOpen(entry.drama), - ); - } - - String _subtitle(Drama drama, AppLocalizations l10n) { - final genre = drama.genre.isNotEmpty ? drama.genre : drama.category; - final count = l10n.episodeCount(drama.episodeCount); - return genre.isEmpty ? count : '$genre · $count'; - } -} - -class _RankRow extends StatelessWidget { - const _RankRow({ - required this.entry, - required this.subtitle, - required this.onTap, - }); - - final RankingEntry entry; - final String subtitle; - final VoidCallback onTap; - - @override - Widget build(BuildContext context) { - final drama = entry.drama; - return Material( - key: Key('ranking-entry-${drama.id}'), - color: Colors.transparent, - child: InkWell( - onTap: onTap, - borderRadius: BorderRadius.circular(10), - child: SizedBox(height: _rowHeight, child: _content(drama)), - ), - ); - } - - Widget _content(Drama drama) { - return Row( - children: [ - _rankBadge(entry.rank), - const SizedBox(width: 8), - ClipRRect( - borderRadius: BorderRadius.circular(7), - child: RemoteImage( - drama.posterUrl, - width: _posterWidth, - height: _posterHeight, - ), - ), - const SizedBox(width: 10), - Expanded(child: _text(drama)), - const Icon( - Icons.chevron_right_rounded, - color: AppColors.subtle, - size: 18, - ), - ], - ); - } - - Widget _text(Drama drama) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - drama.title, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: AppColors.onSurface, - fontSize: 11, - fontWeight: FontWeight.w700, - ), - ), - const SizedBox(height: 3), - Text( - subtitle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle(color: AppColors.subtle, fontSize: 9), - ), - ], - ); - } - - Widget _rankBadge(int rank) { - final top = rank <= 3; - return Container( - width: _badgeSize, - height: _badgeSize, - alignment: Alignment.center, - decoration: BoxDecoration( - color: top ? AppColors.gold.withValues(alpha: 0.16) : AppColors.raised, - borderRadius: BorderRadius.circular(7), - ), - child: Text( - '$rank', - style: TextStyle( - color: top ? AppColors.gold : AppColors.muted, - fontSize: 11, - fontWeight: FontWeight.w900, - ), - ), - ); - } -} diff --git a/lib/pages/home/home_browse_logic.dart b/lib/pages/home/home_browse_logic.dart deleted file mode 100644 index 907c614..0000000 --- a/lib/pages/home/home_browse_logic.dart +++ /dev/null @@ -1,70 +0,0 @@ -// Author: fruit.com.cn - -import 'dart:async'; - -import 'package:flutter/foundation.dart'; - -import '../../core/data/models/watch_progress.dart'; -import '../../core/data/repositories/watch_history_repository.dart'; - -/// 首页频道,只依赖目录中已有数据排序或过滤。 -enum HomeChannel { hot, free, newReleases, ranking } - -/// 浏览型首页的本地 UI 状态。 -class HomeBrowseLogic extends ChangeNotifier { - HomeBrowseLogic({required this.history}) { - unawaited(refreshRecent()); - } - - static const int recentLimit = 20; - - final WatchHistoryRepository history; - HomeChannel channel = HomeChannel.hot; - List recent = const []; - bool loadingRecent = false; - bool _disposed = false; - - /// 第一条未完成且存在真实播放位置的记录。 - WatchProgress? get primaryRecord { - for (final record in recent) { - if (!record.finished && record.hasPosition) return record; - } - return null; - } - - /// 切换频道,不触发额外网络请求。 - void selectChannel(HomeChannel value) { - if (channel == value) return; - channel = value; - _notify(); - } - - /// 重新加载续看数据;未登录时返回空列表。 - Future refreshRecent() async { - loadingRecent = true; - _notify(); - try { - recent = await history.recent(limit: recentLimit); - } catch (_) { - recent = const []; - } finally { - loadingRecent = false; - _notify(); - } - } - - /// 首页重新可见时刷新续看数据。 - void syncPage({required bool active, required bool wasActive}) { - if (active && !wasActive) unawaited(refreshRecent()); - } - - void _notify() { - if (!_disposed) notifyListeners(); - } - - @override - void dispose() { - _disposed = true; - super.dispose(); - } -} diff --git a/lib/pages/home/home_browse_view.dart b/lib/pages/home/home_browse_view.dart deleted file mode 100644 index 7a13bf0..0000000 --- a/lib/pages/home/home_browse_view.dart +++ /dev/null @@ -1,451 +0,0 @@ -// Author: fruit.com.cn - -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -import '../../core/data/models/drama.dart'; -import '../../core/data/models/home_feed.dart'; -import '../../core/data/models/watch_progress.dart'; -import '../../core/data/repositories/watch_history_repository.dart'; -import '../../core/data/services/catalog_controller.dart'; -import '../../core/theme/app_colors.dart'; -import '../../core/theme/app_dimens.dart'; -import '../../core/widgets/app_pull_to_refresh.dart'; -import '../../core/widgets/empty_state.dart'; -import '../../l10n/app_localizations.dart'; -import '../discover/widgets/feed_banner_carousel.dart'; -import '../mine/widgets/continue_watching_card.dart'; -import 'home_browse_logic.dart'; -import 'widgets/home_browse_header.dart'; -import 'widgets/home_drama_grid.dart'; - -const double _channelRowHeight = 44; -const double _channelGap = 20; -const double _channelUnderlineWidth = 18; -const double _channelUnderlineHeight = 2; -const double _channelUnderlineGap = 4; -const double _channelFontSize = 15; -const List _channelTextShadows = [ - Shadow(color: Colors.black54, blurRadius: 5, offset: Offset(0, 1)), -]; - -/// 浏览型首页:频道、Hero、继续观看与剧目目录。 -class HomeBrowseView extends StatefulWidget { - const HomeBrowseView({ - super.key, - required this.active, - required this.onSearch, - required this.onProfile, - required this.onTheater, - required this.onHistory, - required this.onOpenDrama, - required this.onOpenContinue, - }); - - final bool active; - final VoidCallback onSearch; - final VoidCallback onProfile; - final VoidCallback onTheater; - final VoidCallback onHistory; - final Future Function(Drama drama) onOpenDrama; - final Future Function(Drama drama, WatchProgress record) onOpenContinue; - - @override - State createState() => _HomeBrowseViewState(); -} - -class _HomeBrowseViewState extends State { - late final HomeBrowseLogic logic; - final ScrollController _scroll = ScrollController(); - bool _channelsPinned = false; - - @override - void initState() { - super.initState(); - logic = HomeBrowseLogic(history: context.read()); - _scroll.addListener(_onScroll); - } - - @override - void didUpdateWidget(covariant HomeBrowseView oldWidget) { - super.didUpdateWidget(oldWidget); - logic.syncPage(active: widget.active, wasActive: oldWidget.active); - } - - @override - void dispose() { - _scroll.removeListener(_onScroll); - _scroll.dispose(); - logic.dispose(); - super.dispose(); - } - - /// 滚过 hero 后频道行切成吸顶态,未过阈值时仍叠在轮播图上。 - void _onScroll() { - if (!_scroll.hasClients) return; - final pinned = - _scroll.offset >= AppDimens.heroBannerHeight - _channelRowHeight; - if (pinned != _channelsPinned) { - setState(() => _channelsPinned = pinned); - } - } - - /// 频道行只横向滚动,纵向拖动转交给页面列表,避免挡住上滑。 - void _scrollPageBy(DragUpdateDetails details) { - if (!_scroll.hasClients) return; - final position = _scroll.position; - _scroll.jumpTo( - (_scroll.offset - details.delta.dy) - .clamp(position.minScrollExtent, position.maxScrollExtent) - .toDouble(), - ); - } - - @override - Widget build(BuildContext context) { - return ListenableBuilder( - listenable: logic, - builder: (context, _) => _page(context), - ); - } - - Widget _page(BuildContext context) { - final l10n = AppLocalizations.of(context)!; - final catalog = context.watch(); - return SafeArea( - bottom: false, - child: Column( - children: [ - HomeBrowseHeader( - onSearch: widget.onSearch, - onProfile: widget.onProfile, - ), - Expanded(child: _body(l10n, catalog)), - ], - ), - ); - } - - Widget _body(AppLocalizations l10n, CatalogController catalog) { - final source = catalog.dramas; - final banners = catalog.banners.isEmpty - ? _fallbackBanners(source) - : catalog.banners; - final hasBanner = banners.isNotEmpty; - final pinned = !hasBanner || _channelsPinned; - return Stack( - children: [ - Positioned.fill( - child: AppPullToRefresh( - key: const Key('home-refresh'), - onRefresh: () async { - await Future.wait([catalog.load(), logic.refreshRecent()]); - }, - child: ListView( - key: const Key('home-browse-page'), - controller: _scroll, - physics: AppPullToRefresh.physics, - padding: const EdgeInsets.only(bottom: AppDimens.spaceXl), - children: _sections(l10n, catalog), - ), - ), - ), - Positioned( - top: 0, - left: 0, - right: 0, - child: _channelBar( - l10n, - pinned: pinned, - overImage: hasBanner && !pinned, - ), - ), - ], - ); - } - - Widget _channelBar( - AppLocalizations l10n, { - required bool pinned, - required bool overImage, - }) { - final content = GestureDetector( - behavior: HitTestBehavior.opaque, - onVerticalDragUpdate: _scrollPageBy, - child: _channels(l10n, overImage: overImage), - ); - if (!pinned) return content; - return DecoratedBox( - key: const Key('home-channels-pinned'), - decoration: const BoxDecoration( - color: AppColors.ink, - border: Border(bottom: BorderSide(color: AppColors.border)), - ), - child: content, - ); - } - - List _sections(AppLocalizations l10n, CatalogController catalog) { - final source = catalog.dramas; - final dramas = _channelDramas(source, logic.channel); - final continueItem = _continueItem(logic.recent, catalog.dramas); - final banners = catalog.banners.isEmpty - ? _fallbackBanners(source) - : catalog.banners; - return [ - if (banners.isNotEmpty) _hero(banners, source), - if (continueItem != null) ...[ - _continueHeader(l10n), - ContinueWatchingCard( - cardKey: const Key('home-continue-watching'), - playButtonKey: Key('home-continue-play-${continueItem.drama.id}'), - progressKey: Key('home-continue-progress-${continueItem.drama.id}'), - showRemaining: true, - drama: continueItem.drama, - record: continueItem.record, - onResume: () => unawaited( - widget.onOpenContinue(continueItem.drama, continueItem.record), - ), - ), - ], - _channelHeader(l10n), - if (dramas.isEmpty) - _empty() - else - HomeDramaGrid( - l10n: l10n, - dramas: dramas, - onOpen: (drama) => unawaited(widget.onOpenDrama(drama)), - ), - ]; - } - - List _fallbackBanners(List dramas) { - if (dramas.isEmpty) return const []; - final drama = dramas.first; - return [ - FeedBanner( - id: 'home-fallback-${drama.id}', - imageUrl: drama.posterUrl, - linkType: 'DRAMA', - linkValue: drama.id, - ), - ]; - } - - Widget _continueHeader(AppLocalizations l10n) => _sectionHeader( - l10n.continueWatching, - actionKey: const Key('home-continue-all'), - actionLabel: l10n.seeAll, - onAction: widget.onHistory, - ); - - Widget _channelHeader(AppLocalizations l10n) => _sectionHeader( - _channelTitle(l10n), - actionKey: const Key('home-popular-more'), - actionLabel: l10n.seeAll, - onAction: widget.onTheater, - ); - - Widget _empty() => Padding( - padding: const EdgeInsets.symmetric(vertical: AppDimens.spaceXl), - child: EmptyState( - key: const Key('home-browse-empty'), - icon: Icons.movie_filter_outlined, - title: AppLocalizations.of(context)!.noStories, - subtitle: AppLocalizations.of(context)!.emptyHint, - compact: true, - ), - ); - - Widget _channels(AppLocalizations l10n, {bool overImage = false}) { - final entries = [ - (HomeChannel.hot, l10n.hot), - (HomeChannel.free, l10n.free), - (HomeChannel.newReleases, l10n.newDramas), - (HomeChannel.ranking, l10n.rankingTab), - ]; - return SizedBox( - key: const Key('home-channels'), - height: _channelRowHeight, - child: ListView.separated( - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.symmetric( - horizontal: AppDimens.pageHorizontal, - ), - itemCount: entries.length, - separatorBuilder: (_, _) => const SizedBox(width: _channelGap), - itemBuilder: (context, index) { - final entry = entries[index]; - final selected = logic.channel == entry.$1; - return _channelItem( - entry.$1, - entry.$2, - selected: selected, - overImage: overImage, - ); - }, - ), - ); - } - - Widget _channelItem( - HomeChannel channel, - String label, { - required bool selected, - required bool overImage, - }) { - final color = selected - ? AppColors.blue - : (overImage ? Colors.white70 : AppColors.muted); - final underlineColor = selected ? AppColors.blue : Colors.transparent; - return Semantics( - button: true, - selected: selected, - child: GestureDetector( - key: Key('home-channel-${channel.name}'), - behavior: HitTestBehavior.opaque, - onTap: () => logic.selectChannel(channel), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - label, - maxLines: 1, - style: TextStyle( - color: color, - fontSize: _channelFontSize, - fontWeight: selected ? FontWeight.w800 : FontWeight.w600, - shadows: overImage ? _channelTextShadows : null, - ), - ), - const SizedBox(height: _channelUnderlineGap), - Container( - key: Key('home-channel-underline-${channel.name}'), - width: _channelUnderlineWidth, - height: _channelUnderlineHeight, - decoration: BoxDecoration( - color: underlineColor, - borderRadius: BorderRadius.circular( - _channelUnderlineHeight / 2, - ), - ), - ), - ], - ), - ), - ); - } - - Widget _hero(List banners, List dramas) { - return FeedBannerCarousel( - key: const Key('home-hero-banner'), - banners: banners, - active: widget.active, - flush: true, - dramaFor: (banner) => _dramaForBanner(banner, dramas), - onOpen: (banner) { - final drama = _dramaForBanner(banner, dramas); - if (drama != null) unawaited(widget.onOpenDrama(drama)); - }, - ); - } - - Widget _sectionHeader( - String title, { - required Key actionKey, - required String actionLabel, - required VoidCallback onAction, - }) { - return Padding( - padding: const EdgeInsets.fromLTRB( - AppDimens.pageHorizontal, - AppDimens.spaceLg, - AppDimens.spaceSm, - AppDimens.spaceSm, - ), - child: Row( - children: [ - Expanded( - child: Text( - title, - style: const TextStyle( - fontFamily: 'Outfit', - color: AppColors.onSurface, - fontSize: AppDimens.sectionTitle, - fontWeight: FontWeight.w800, - ), - ), - ), - TextButton( - key: actionKey, - onPressed: onAction, - style: TextButton.styleFrom( - foregroundColor: AppColors.accent, - minimumSize: const Size(AppDimens.tapTarget, AppDimens.tapTarget), - ), - child: Text(actionLabel), - ), - ], - ), - ); - } - - String _channelTitle(AppLocalizations l10n) { - return switch (logic.channel) { - HomeChannel.hot => l10n.trendingMicroDramas, - HomeChannel.free => l10n.free, - HomeChannel.newReleases => l10n.newDramas, - HomeChannel.ranking => l10n.rankingTitle, - }; - } - - List _channelDramas(List source, HomeChannel channel) { - final dramas = List.of(source); - switch (channel) { - case HomeChannel.hot: - dramas.sort((a, b) { - final hot = (b.isHot ? 1 : 0).compareTo(a.isHot ? 1 : 0); - return hot != 0 ? hot : b.viewCount.compareTo(a.viewCount); - }); - case HomeChannel.free: - return dramas.where(_isFree).toList(); - case HomeChannel.newReleases: - return dramas; - case HomeChannel.ranking: - dramas.sort((a, b) => b.viewCount.compareTo(a.viewCount)); - } - return dramas; - } - - bool _isFree(Drama drama) { - return drama.freeEpisodes > 0 || - drama.episodes.any((episode) => episode.isFree); - } - - Drama? _dramaForBanner(FeedBanner banner, List dramas) { - final id = banner.dramaId; - if (id == null) return null; - for (final drama in dramas) { - if (drama.id == id) return drama; - } - return null; - } - - ({Drama drama, WatchProgress record})? _continueItem( - List records, - List dramas, - ) { - for (final record in records) { - if (record.finished || !record.hasPosition) continue; - for (final drama in dramas) { - if (drama.id == record.dramaId) { - return (drama: drama, record: record); - } - } - } - return null; - } -} diff --git a/lib/pages/home/widgets/home_browse_header.dart b/lib/pages/home/widgets/home_browse_header.dart deleted file mode 100644 index e6554a4..0000000 --- a/lib/pages/home/widgets/home_browse_header.dart +++ /dev/null @@ -1,137 +0,0 @@ -// Author: fruit.com.cn - -import 'package:flutter/material.dart'; - -import '../../../core/theme/app_colors.dart'; -import '../../../core/theme/app_dimens.dart'; -import '../../../l10n/app_localizations.dart'; -import '../../notices/notices_page.dart'; - -const double _searchHeight = 36; - -/// 首页固定顶栏:搜索、通知与头像入口。 -class HomeBrowseHeader extends StatelessWidget { - const HomeBrowseHeader({ - 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: AppDimens.contentHeaderHeight, - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: AppDimens.pageHorizontal, - ), - child: Row( - children: [ - Expanded(child: _search(l10n, onSearch)), - const SizedBox(width: AppDimens.spaceSm), - _notifications(context, l10n), - const SizedBox(width: AppDimens.spaceSm), - _profile(l10n), - ], - ), - ), - ); - } - - Widget _search(AppLocalizations l10n, VoidCallback onTap) { - return Semantics( - button: true, - label: l10n.search, - child: InkWell( - key: const Key('home-search'), - onTap: onTap, - borderRadius: BorderRadius.circular(AppDimens.pillRadius), - child: Container( - height: _searchHeight, - padding: const EdgeInsets.symmetric(horizontal: AppDimens.spaceMd), - decoration: BoxDecoration( - color: AppColors.input, - borderRadius: BorderRadius.circular(AppDimens.pillRadius), - ), - child: Row( - children: [ - const Icon( - Icons.search_rounded, - color: AppColors.subtle, - size: 17, - ), - const SizedBox(width: AppDimens.spaceSm), - Expanded( - child: Text( - l10n.searchDiscover, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: AppColors.subtle, - fontSize: AppDimens.caption, - ), - ), - ), - ], - ), - ), - ), - ); - } - - Widget _notifications(BuildContext context, AppLocalizations l10n) { - return Semantics( - button: true, - label: l10n.notices, - child: InkWell( - key: const Key('home-notifications'), - customBorder: const CircleBorder(), - onTap: () => Navigator.of( - context, - ).push(MaterialPageRoute(builder: (_) => const NoticesPage())), - child: Container( - width: AppDimens.tapTarget, - height: AppDimens.tapTarget, - decoration: const BoxDecoration( - color: AppColors.card, - shape: BoxShape.circle, - ), - child: const Icon( - Icons.notifications_none_rounded, - color: AppColors.onSurface, - size: AppDimens.accountIcon, - ), - ), - ), - ); - } - - Widget _profile(AppLocalizations l10n) { - return Semantics( - button: true, - label: l10n.myTab, - child: InkWell( - key: const Key('home-profile'), - customBorder: const CircleBorder(), - onTap: onProfile, - child: Container( - width: AppDimens.tapTarget, - height: AppDimens.tapTarget, - decoration: const BoxDecoration( - color: AppColors.card, - shape: BoxShape.circle, - ), - child: const Icon( - Icons.person_rounded, - color: AppColors.onSurface, - size: AppDimens.accountIcon, - ), - ), - ), - ); - } -} diff --git a/lib/pages/home/widgets/home_menu_sheet.dart b/lib/pages/home/widgets/home_menu_sheet.dart deleted file mode 100644 index 0a255b3..0000000 --- a/lib/pages/home/widgets/home_menu_sheet.dart +++ /dev/null @@ -1,228 +0,0 @@ -// Author: fruit.com.cn - -import 'package:flutter/material.dart'; - -import '../../../core/data/models/drama.dart'; -import '../../../core/formatting/localized_content.dart'; -import '../../../core/theme/app_colors.dart'; -import '../../../core/widgets/remote_image.dart'; -import '../../../l10n/app_localizations.dart'; - -/// 播放页快捷菜单:当前剧、发现、追剧与历史。 -class HomeMenuSheet extends StatelessWidget { - const HomeMenuSheet({ - super.key, - required this.drama, - required this.onOpenSeries, - required this.onDiscover, - required this.onHistory, - required this.onWatchlist, - }); - - final Drama drama; - final VoidCallback onOpenSeries; - final VoidCallback onDiscover; - final VoidCallback onHistory; - final VoidCallback onWatchlist; - - @override - Widget build(BuildContext context) { - final l10n = AppLocalizations.of(context)!; - void closeThen(VoidCallback action) { - Navigator.pop(context); - action(); - } - - return SafeArea( - child: SingleChildScrollView( - padding: const EdgeInsets.fromLTRB(16, 4, 16, 20), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - _DramaSummary( - drama: drama, - l10n: l10n, - onOpenSeries: () => closeThen(onOpenSeries), - ), - const SizedBox(height: 14), - _quickAccess(l10n, closeThen), - ], - ), - ), - ); - } - - Widget _quickAccess( - AppLocalizations l10n, - void Function(VoidCallback) closeThen, - ) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - l10n.quickAccess, - style: const TextStyle( - color: AppColors.onSurface, - fontSize: 13, - fontWeight: FontWeight.w800, - ), - ), - const SizedBox(height: 8), - Row( - children: [ - _item( - key: const Key('drawer-discover'), - icon: Icons.explore_outlined, - label: l10n.discoverTab, - onTap: () => closeThen(onDiscover), - ), - _item( - key: const Key('drawer-watchlist'), - icon: Icons.bookmark_border_rounded, - label: l10n.watchlist, - onTap: () => closeThen(onWatchlist), - ), - _item( - key: const Key('drawer-history'), - icon: Icons.history_rounded, - label: l10n.history, - onTap: () => closeThen(onHistory), - ), - ], - ), - ], - ); - } - - Widget _item({ - required Key key, - required IconData icon, - required String label, - required VoidCallback onTap, - }) { - return Expanded( - child: Padding( - padding: const EdgeInsets.only(right: 8), - child: _MenuTile(key: key, icon: icon, label: label, onTap: onTap), - ), - ); - } -} - -class _DramaSummary extends StatelessWidget { - const _DramaSummary({ - required this.drama, - required this.l10n, - required this.onOpenSeries, - }); - - final Drama drama; - final AppLocalizations l10n; - final VoidCallback onOpenSeries; - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: AppColors.cardAlt, - borderRadius: BorderRadius.circular(12), - ), - child: Row( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(10), - child: RemoteImage(drama.posterUrl, width: 64, height: 86), - ), - const SizedBox(width: 10), - Expanded(child: _details()), - ], - ), - ); - } - - Widget _details() { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - localizedDramaTitle(l10n, drama), - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: AppColors.onSurface, - fontSize: 15, - fontWeight: FontWeight.w800, - ), - ), - const SizedBox(height: 4), - Text( - l10n.episodeCount(drama.episodeCount), - style: const TextStyle(color: AppColors.muted, fontSize: 9), - ), - const SizedBox(height: 8), - _button(), - ], - ); - } - - Widget _button() { - return SizedBox( - height: 34, - child: FilledButton.icon( - key: const Key('drawer-open-series'), - onPressed: onOpenSeries, - style: FilledButton.styleFrom( - backgroundColor: AppColors.blue, - foregroundColor: AppColors.onPrimary, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(9)), - textStyle: const TextStyle(fontSize: 11), - ), - icon: const Icon(Icons.play_arrow_rounded, size: 15), - label: Text(l10n.exploreSeries), - ), - ); - } -} - -class _MenuTile extends StatelessWidget { - const _MenuTile({ - super.key, - required this.icon, - required this.label, - required this.onTap, - }); - - final IconData icon; - final String label; - final VoidCallback onTap; - - @override - Widget build(BuildContext context) { - return Material( - color: AppColors.quick, - borderRadius: BorderRadius.circular(12), - clipBehavior: Clip.antiAlias, - child: InkWell( - onTap: onTap, - child: SizedBox( - height: 58, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(icon, color: AppColors.secondary, size: 16), - const SizedBox(height: 4), - Text( - label, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle(color: AppColors.muted, fontSize: 9), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pages/mine/widgets/continue_watching_card.dart b/lib/pages/mine/widgets/continue_watching_card.dart deleted file mode 100644 index 6e17981..0000000 --- a/lib/pages/mine/widgets/continue_watching_card.dart +++ /dev/null @@ -1,131 +0,0 @@ -// Author: fruit.com.cn - -import 'package:flutter/material.dart'; - -import '../../../core/data/models/drama.dart'; -import '../../../core/data/models/watch_progress.dart'; -import '../../../core/theme/app_colors.dart'; -import '../../../core/widgets/remote_image.dart'; -import '../../../l10n/app_localizations.dart'; - -/// 「我的」页唯一保留的续看入口。 -class ContinueWatchingCard extends StatelessWidget { - const ContinueWatchingCard({ - super.key, - required this.drama, - required this.record, - required this.onResume, - this.cardKey = const Key('mine-continue-watching'), - this.playButtonKey = const Key('mine-continue-play'), - this.progressKey, - this.showRemaining = false, - }); - - final Drama drama; - final WatchProgress record; - final VoidCallback onResume; - final Key cardKey; - final Key playButtonKey; - final Key? progressKey; - final bool showRemaining; - - @override - Widget build(BuildContext context) { - final l10n = AppLocalizations.of(context)!; - return Container( - key: cardKey, - margin: const EdgeInsets.symmetric(horizontal: 14), - padding: const EdgeInsets.all(9), - decoration: BoxDecoration( - color: AppColors.card, - borderRadius: BorderRadius.circular(12), - ), - child: Row( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(7), - child: RemoteImage(drama.posterUrl, width: 50, height: 64), - ), - const SizedBox(width: 9), - Expanded(child: _info(l10n)), - const SizedBox(width: 8), - SizedBox( - width: 60, - height: 28, - child: FilledButton( - key: playButtonKey, - onPressed: onResume, - style: FilledButton.styleFrom( - backgroundColor: AppColors.blue, - foregroundColor: AppColors.onPrimary, - padding: EdgeInsets.zero, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(9), - ), - textStyle: const TextStyle(fontSize: 10), - ), - child: Text(l10n.resume), - ), - ), - ], - ), - ); - } - - Widget _info(AppLocalizations l10n) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - l10n.continueWatching, - style: const TextStyle( - color: AppColors.accent, - fontSize: 9, - fontWeight: FontWeight.w800, - ), - ), - const SizedBox(height: 2), - Text( - drama.title, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: AppColors.onSurface, - fontSize: 12, - fontWeight: FontWeight.w800, - ), - ), - const SizedBox(height: 2), - Text( - _progressText(l10n), - key: progressKey, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle(color: AppColors.muted, fontSize: 9), - ), - ], - ); - } - - String _progressText(AppLocalizations l10n) { - final episode = drama.episodes.where((item) => item.id == record.episodeId); - if (showRemaining) { - final number = episode.isEmpty ? 1 : episode.first.number; - final remaining = record.duration - record.position; - final minutes = remaining.inSeconds <= 0 - ? 0 - : (remaining.inSeconds / Duration.secondsPerMinute).ceil(); - return l10n.episodeRemaining(number, minutes); - } - final label = episode.isEmpty - ? l10n.episodeCount(drama.episodeCount) - : l10n.episodeOfTotal(episode.first.number, drama.episodeCount); - return '$label · ${_clock(record.position)} / ${_clock(record.duration)}'; - } -} - -String _clock(Duration value) { - final minutes = value.inMinutes.remainder(60).toString().padLeft(2, '0'); - final seconds = value.inSeconds.remainder(60).toString().padLeft(2, '0'); - return '$minutes:$seconds'; -}