@@ -4,6 +4,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
44import 'package:flutter_zustand/flutter_zustand.dart' ;
55import 'package:iris/hooks/use_fvp_player.dart' ;
66import 'package:iris/hooks/use_media_kit_player.dart' ;
7+ import 'package:iris/models/player.dart' ;
78import 'package:iris/models/store/app_state.dart' ;
89import 'package:iris/pages/player/iris_player.dart' ;
910import 'package:iris/store/use_app_store.dart' ;
@@ -16,28 +17,68 @@ class Home extends HookWidget {
1617 final playerBackend =
1718 useAppStore ().select (context, (state) => state.playerBackend);
1819
19- final player = () {
20- switch (playerBackend) {
21- case PlayerBackend .mediaKit:
22- return IrisPlayer (
23- key: const ValueKey ('media-kit' ),
24- playerHooks: useMediaKitPlayer,
25- );
26- case PlayerBackend .fvp:
27- return IrisPlayer (
28- key: const ValueKey ('fvp' ),
29- playerHooks: useFvpPlayer,
30- );
31- }
32- }();
20+ final playerState = useState <MediaPlayer ?>(null );
21+
22+ void handlePlayerCreated (MediaPlayer player) {
23+ WidgetsBinding .instance.addPostFrameCallback ((_) {
24+ if (context.mounted) {
25+ playerState.value = player;
26+ }
27+ });
28+ }
29+
30+ final Widget playerHost;
31+ switch (playerBackend) {
32+ case PlayerBackend .mediaKit:
33+ playerHost = _MediaKitPlayerHost (onPlayerCreated: handlePlayerCreated);
34+ break ;
35+ case PlayerBackend .fvp:
36+ playerHost = _FvpPlayerHost (onPlayerCreated: handlePlayerCreated);
37+ break ;
38+ }
3339
3440 return AnnotatedRegion (
3541 value: const SystemUiOverlayStyle (
3642 statusBarIconBrightness: Brightness .light,
3743 statusBarColor: Colors .transparent,
3844 systemNavigationBarColor: Colors .transparent,
3945 ),
40- child: Scaffold (body: player),
46+ child: Scaffold (
47+ backgroundColor: Color (0xFF2f2f2f ),
48+ body: Stack (
49+ children: [
50+ playerHost,
51+ if (playerState.value != null )
52+ IrisPlayer (player: playerState.value! )
53+ ],
54+ ),
55+ ),
4156 );
4257 }
4358}
59+
60+ class _MediaKitPlayerHost extends HookWidget {
61+ final ValueChanged <MediaPlayer > onPlayerCreated;
62+
63+ const _MediaKitPlayerHost ({required this .onPlayerCreated});
64+
65+ @override
66+ Widget build (BuildContext context) {
67+ final player = useMediaKitPlayer (context);
68+ onPlayerCreated (player);
69+ return Container (); // Doesn't build any UI itself.
70+ }
71+ }
72+
73+ class _FvpPlayerHost extends HookWidget {
74+ final ValueChanged <MediaPlayer > onPlayerCreated;
75+
76+ const _FvpPlayerHost ({required this .onPlayerCreated});
77+
78+ @override
79+ Widget build (BuildContext context) {
80+ final player = useFvpPlayer (context);
81+ onPlayerCreated (player);
82+ return Container (); // Doesn't build any UI itself.
83+ }
84+ }
0 commit comments