diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-21 08:25:16 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-21 08:25:16 +0300 |
| commit | 09f0ee28b6a7b7fc588a8a4e387d94ffb6848af3 (patch) | |
| tree | 4850136006f64f1938dc2a9fae2bde7a28c4f8b7 /player-android/lib/screens/video_player_screen.dart | |
| parent | 63fc4369917ab548c5cdc4dddccf0ad4ded11a2f (diff) | |
Add video/audio player packages, routes, and placeholder screens (task xa)
- pubspec.yaml: add video_player ^2.9.2, chewie ^1.8.5, just_audio ^0.9.42,
audio_service ^0.18.15 with descriptive comments explaining each package's role.
- AndroidManifest.xml: add FOREGROUND_SERVICE, FOREGROUND_SERVICE_MEDIA_PLAYBACK,
and WAKE_LOCK permissions; declare AudioService with foregroundServiceType=
mediaPlayback and MediaButtonReceiver for hardware media button support.
INTERNET was already present — not duplicated.
- app_routes.dart: add videoPlayer (/video/:mediaId) and audioPlayer
(/audio/:mediaId) route constants plus videoPlayerPath/audioPlayerPath helpers.
- router.dart: wire GoRoutes for the two new paths, forwarding mediaId from
path params and optional mediaUrl from route extra.
- screens/video_player_screen.dart: placeholder VideoPlayerScreen accepting
mediaId + mediaUrl, importing chewie and video_player for resolution check.
- screens/audio_player_screen.dart: placeholder AudioPlayerScreen accepting
mediaId + mediaUrl, importing just_audio and audio_service for resolution check.
flutter pub get and flutter analyze both pass clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'player-android/lib/screens/video_player_screen.dart')
| -rw-r--r-- | player-android/lib/screens/video_player_screen.dart | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/player-android/lib/screens/video_player_screen.dart b/player-android/lib/screens/video_player_screen.dart new file mode 100644 index 0000000..280a4b9 --- /dev/null +++ b/player-android/lib/screens/video_player_screen.dart @@ -0,0 +1,56 @@ +// ignore_for_file: unused_import +// The chewie and video_player imports are intentionally present even in this +// placeholder so that package resolution is verified at analysis time and the +// import graph is established before feature implementation begins. +import 'package:chewie/chewie.dart'; +import 'package:flutter/material.dart'; +import 'package:video_player/video_player.dart'; + +/// Placeholder video player screen — full implementation is deferred. +/// +/// Accepts [mediaId] (the route path parameter) and [mediaUrl] (the resolved +/// stream URL, passed as route extra) so the router wiring is established and +/// the package imports are verified before feature work begins. +/// +/// TODO(video-player): Convert to [StatefulWidget]. In [State.initState] +/// create [VideoPlayerController.networkUrl] from [mediaUrl], then wrap it +/// in a [ChewieController] with `aspectRatio`, `autoPlay`, etc. Dispose +/// both controllers in [State.dispose]. +/// See: https://pub.dev/packages/chewie +/// https://pub.dev/packages/video_player +class VideoPlayerScreen extends StatelessWidget { + const VideoPlayerScreen({ + super.key, + required this.mediaId, + this.mediaUrl, + }); + + /// The media item identifier extracted from the '/video/:mediaId' route path. + final String mediaId; + + /// The resolved HLS/direct stream URL, optionally provided as a route extra. + /// Will be required once real playback is wired up. + final String? mediaUrl; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Video – $mediaId')), + body: const Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.videocam_outlined, size: 64), + SizedBox(height: 16), + Text('Video player TODO', style: TextStyle(fontSize: 18)), + SizedBox(height: 8), + Text( + 'Will use video_player + chewie for playback controls.', + textAlign: TextAlign.center, + ), + ], + ), + ), + ); + } +} |
