fix(flutter): 首页 feed 顶栏固定悬浮

This commit is contained in:
Zhou Weidong committed 2026-10-20 14:46:08 +08:00
1 parent 1cb4c56261
commit 9175a7f253
6 files changed
+341 -345

No files matched your search

+4 -59
View File
@@ -15,6 +15,7 @@ import 'package:fruitshorts/core/data/repositories/playback_repository.dart';
import 'package:fruitshorts/core/data/repositories/watch_history_repository.dart';
import 'package:fruitshorts/core/theme/app_theme.dart';
import 'package:fruitshorts/l10n/app_localizations.dart';
import 'package:fruitshorts/pages/player/widgets/home_feed_header.dart';
import 'package:fruitshorts/pages/player/widgets/home_feed_overlay.dart';
import 'package:video_player/video_player.dart';
@@ -118,13 +119,8 @@ void main() {
onSave: () {},
onComments: () {},
onShare: () {},
onEpisodes: () {},
onDetail: () {},
onOpenFullPlayer: () {},
onRefreshFeed: () async => true,
onDownload: () {},
onClear: () {},
onSearch: () {},
onMore: () {},
),
),
@@ -156,10 +152,7 @@ void main() {
);
});
testWidgets('should_refresh_seek_and_open_player_from_feed_actions', (
tester,
) async {
var refreshed = 0;
testWidgets('should_seek_and_open_player_from_feed_actions', (tester) async {
var opened = 0;
Duration? seeked;
final controller = ValueNotifier<VideoPlayerValue>(
@@ -206,16 +199,8 @@ void main() {
onSave: () {},
onComments: () {},
onShare: () {},
onEpisodes: () {},
onDetail: () {},
onOpenFullPlayer: () => opened++,
onRefreshFeed: () async {
refreshed++;
return true;
},
onDownload: () {},
onClear: () {},
onSearch: () {},
onMore: () {},
onScrubStart: () {},
onSeek: (value) => seeked = value,
@@ -260,10 +245,6 @@ void main() {
),
);
await tester.tap(find.byKey(const Key('home-feed-refresh')));
await tester.pump();
expect(refreshed, 1);
final gesture = await tester.startGesture(
tester.getCenter(find.byKey(const Key('home-feed-progress'))),
);
@@ -321,42 +302,12 @@ void main() {
localizationsDelegates: AppLocalizations.localizationsDelegates,
home: Builder(
builder: (context) => Scaffold(
body: HomeFeedOverlay(
body: HomeFeedHeader(
l10n: AppLocalizations.of(context)!,
drama: const Drama(
id: 'refresh-drama',
title: 'Refresh Drama',
synopsis: 'synopsis',
posterUrl: '',
totalEpisodes: 8,
),
episode: const Episode(
id: 'refresh-episode',
number: 1,
title: 'Episode 1',
isFree: true,
),
controller: null,
liked: false,
saved: false,
visible: true,
boosting: false,
onTogglePlay: () {},
onBoostStart: () {},
onBoostEnd: () {},
onLike: () {},
onSave: () {},
onComments: () {},
onShare: () {},
onEpisodes: () {},
onDetail: () {},
onOpenFullPlayer: () {},
onRefreshFeed: () {
onRefresh: () {
calls++;
return completer.future;
},
onDownload: () {},
onClear: () {},
onSearch: () {},
onMore: () {},
),
@@ -427,13 +378,8 @@ void main() {
onSave: () {},
onComments: () {},
onShare: () {},
onEpisodes: () {},
onDetail: () {},
onOpenFullPlayer: () {},
onRefreshFeed: () async => true,
onDownload: () {},
onClear: () {},
onSearch: () {},
onMore: () {},
onScrubStart: () {},
onSeek: (value) => seeked = value,
@@ -444,7 +390,6 @@ void main() {
);
await tester.pumpAndSettle();
expect(find.byKey(const Key('home-feed-refresh')), findsOneWidget);
expect(find.byKey(const Key('home-feed-full-series')), findsOneWidget);
expect(find.byKey(const Key('home-feed-progress')), findsOneWidget);
+15
View File
@@ -170,12 +170,14 @@ void main() {
expect(find.byKey(const Key('home-feed-full-series')), findsOneWidget);
expect(find.byKey(const Key('home-feed-title')), findsNothing);
expect(find.byKey(const Key('rail-save')), findsNothing);
expect(find.byKey(const Key('home-feed-search')), findsNothing);
await gesture.up();
await tester.pumpAndSettle();
expect(find.byKey(const Key('home-feed-speed-boost-hint')), findsNothing);
expect(find.byKey(const Key('home-feed-title')), findsOneWidget);
expect(find.byKey(const Key('rail-save')), findsOneWidget);
expect(find.byKey(const Key('home-feed-search')), findsOneWidget);
});
testWidgets('should_resume_playback_when_boosting_while_paused', (
@@ -243,6 +245,19 @@ void main() {
expect(after, isNot(before));
});
testWidgets('should_keep_feed_header_fixed_when_swiping', (tester) async {
await _pumpApp(tester);
final before = tester.getRect(find.byKey(const Key('home-feed-search')));
await tester.drag(find.byType(PageView).first, const Offset(0, -600));
await tester.pumpAndSettle();
final after = tester.getRect(find.byKey(const Key('home-feed-search')));
expect(after.top, closeTo(before.top, 0.5));
expect(find.byKey(const Key('home-feed-tab-recommend')), findsOneWidget);
expect(find.byKey(const Key('home-feed-refresh')), findsOneWidget);
});
testWidgets('should_resume_feed_after_returning_from_full_player', (
tester,
) async {