merge: 修复详情暂停重复按钮

This commit is contained in:
Zhou Weidong committed 2026-10-19 16:07:42 +08:00
commit 568f051b7a
2 files changed
+73 -1

No files matched your search

+18 -1
View File
@@ -29,6 +29,16 @@ import 'widgets/seek_progress_bar.dart';
import '../../core/data/repositories/watch_history_repository.dart';
import '../../core/data/repositories/playback_repository.dart';
/// The home feed has no overlay play button, so it keeps its own center hint.
/// Detail/series playback uses `_PlaybackOverlay.player-play-toggle` instead.
bool shouldShowFeedPauseIndicator({
required bool homeMode,
required bool selected,
required bool ready,
required bool playing,
required bool pip,
}) => homeMode && selected && ready && !playing && !pip;
class PlayerPage extends StatefulWidget {
const PlayerPage({
super.key,
@@ -301,8 +311,15 @@ class _PlayerPageState extends State<PlayerPage> with WidgetsBindingObserver {
),
),
),
if (selected && ready && !logic.session.userWantsPlay && !logic.pip)
if (shouldShowFeedPauseIndicator(
homeMode: widget.homeMode,
selected: selected,
ready: ready,
playing: logic.session.userWantsPlay,
pip: logic.pip,
))
const Center(
key: Key('home-feed-center-play'),
child: IgnorePointer(
child: DecoratedBox(
decoration: BoxDecoration(
+55
View File
@@ -9,6 +9,7 @@ import 'package:fruitshorts/app.dart';
import 'package:fruitshorts/core/data/repositories/favorite_repository.dart';
import 'package:fruitshorts/core/data/repositories/playback_repository.dart';
import 'package:fruitshorts/core/data/repositories/watch_history_repository.dart';
import 'package:fruitshorts/pages/player/player_view.dart';
import '../support/fake_catalog.dart';
import '../support/fake_category.dart';
@@ -67,6 +68,60 @@ void main() {
);
expect(tester.takeException(), isNull);
});
testWidgets('should_keep_single_pause_toggle_when_detail_player_is_paused', (
tester,
) async {
await _pumpApp(tester);
await tester.binding.handlePopRoute();
await tester.pumpAndSettle();
await tester.binding.handlePopRoute();
await tester.pumpAndSettle();
await tester.tap(find.byKey(const Key('drawer-open-series')));
await tester.pumpAndSettle();
await tester.tap(find.byKey(const Key('detail-cta')));
await tester.pumpAndSettle();
await tester.tap(find.byKey(const Key('player-play-toggle')));
await tester.pumpAndSettle();
expect(find.byKey(const Key('player-play-toggle')), findsOneWidget);
expect(find.byKey(const Key('home-feed-center-play')), findsNothing);
expect(find.byIcon(Icons.play_arrow_rounded), findsOneWidget);
});
test('should_only_show_feed_pause_indicator_in_home_mode', () {
expect(
shouldShowFeedPauseIndicator(
homeMode: true,
selected: true,
ready: true,
playing: false,
pip: false,
),
isTrue,
);
expect(
shouldShowFeedPauseIndicator(
homeMode: false,
selected: true,
ready: true,
playing: false,
pip: false,
),
isFalse,
);
expect(
shouldShowFeedPauseIndicator(
homeMode: true,
selected: true,
ready: true,
playing: true,
pip: false,
),
isFalse,
);
});
}
void _expectFullscreenOverlay() {