fix(player): 移除详情暂停重复按钮
This commit is contained in:
1 parent
c82502559b
commit
f0c53542ef
2 files changed
+73
-1
No files matched your search
@@ -29,6 +29,16 @@ import 'widgets/seek_progress_bar.dart';
|
|||||||
import '../../core/data/repositories/watch_history_repository.dart';
|
import '../../core/data/repositories/watch_history_repository.dart';
|
||||||
import '../../core/data/repositories/playback_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 {
|
class PlayerPage extends StatefulWidget {
|
||||||
const PlayerPage({
|
const PlayerPage({
|
||||||
super.key,
|
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(
|
const Center(
|
||||||
|
key: Key('home-feed-center-play'),
|
||||||
child: IgnorePointer(
|
child: IgnorePointer(
|
||||||
child: DecoratedBox(
|
child: DecoratedBox(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import 'package:fruitshorts/app.dart';
|
|||||||
import 'package:fruitshorts/core/data/repositories/favorite_repository.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/playback_repository.dart';
|
||||||
import 'package:fruitshorts/core/data/repositories/watch_history_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_catalog.dart';
|
||||||
import '../support/fake_category.dart';
|
import '../support/fake_category.dart';
|
||||||
@@ -67,6 +68,60 @@ void main() {
|
|||||||
);
|
);
|
||||||
expect(tester.takeException(), isNull);
|
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() {
|
void _expectFullscreenOverlay() {
|
||||||
|
|||||||
Reference in new issue
Block a user