diff --git a/example/integration_test/plugin_integration_test.dart b/example/integration_test/plugin_integration_test.dart index f0fec09..5795f6d 100644 --- a/example/integration_test/plugin_integration_test.dart +++ b/example/integration_test/plugin_integration_test.dart @@ -33,7 +33,7 @@ void main() { (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), nextScreen: const Scaffold(), onVideoComplete: () {}, @@ -51,7 +51,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, nextScreen: const Scaffold(), @@ -69,7 +69,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, onVideoComplete: () {}, @@ -87,7 +87,7 @@ void main() { (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/invalid/nonexistent.mp4'), nextScreen: const Scaffold(), ), @@ -108,7 +108,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/invalid/nonexistent.mp4'), onVideoError: (error) { capturedError = error; @@ -130,7 +130,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: NetworkFileSource('https://invalid.example.com/video.mp4'), onVideoError: (e) => error = e, ), @@ -148,7 +148,7 @@ void main() { testWidgets('renders title widget overlay', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), titleWidget: const Text('Welcome'), onVideoError: (_) {}, @@ -163,7 +163,7 @@ void main() { testWidgets('renders footer widget overlay', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), footerWidget: const Text('Loading...'), onVideoError: (_) {}, @@ -179,7 +179,7 @@ void main() { (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), overlayBuilder: (context) => const Text('Custom Overlay'), onVideoError: (_) {}, @@ -194,7 +194,7 @@ void main() { testWidgets('renders all overlays together', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), titleWidget: const Text('Title'), footerWidget: const Text('Footer'), @@ -219,7 +219,7 @@ void main() { await tester.pumpWidget( MaterialApp( home: Builder( - builder: (context) => SplashVideoPage( + builder: (context) => SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, footerWidget: ElevatedButton( @@ -253,7 +253,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, onVideoError: (_) {}, @@ -282,7 +282,7 @@ void main() { (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), onVideoError: (_) {}, ), @@ -291,14 +291,14 @@ void main() { await tester.pump(); // Widget should be created without exceptions - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); }); testWidgets('NetworkFileSource accepts valid URL', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: NetworkFileSource('https://example.com/video.mp4'), onVideoError: (_) {}, ), @@ -306,14 +306,14 @@ void main() { ); await tester.pump(); - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); }); testWidgets('DeviceFileSource accepts file path', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: DeviceFileSource('/path/to/video.mp4'), onVideoError: (_) {}, ), @@ -321,7 +321,7 @@ void main() { ); await tester.pump(); - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); }); }); @@ -330,7 +330,7 @@ void main() { (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), videoConfig: const VideoConfig(useSafeArea: true), onVideoError: (_) {}, @@ -339,7 +339,7 @@ void main() { ); await tester.pump(); - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); }); testWidgets('supports different visibility modes', @@ -347,7 +347,7 @@ void main() { for (final mode in VisibilityEnum.values) { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), videoConfig: VideoConfig(videoVisibilityEnum: mode), onVideoError: (_) {}, @@ -356,7 +356,7 @@ void main() { ); await tester.pump(); - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); // Clean up for next iteration await tester.pumpWidget(Container()); diff --git a/example/lib/diagnostic_main.dart b/example/lib/diagnostic_main.dart index 2e45bfc..07b315c 100644 --- a/example/lib/diagnostic_main.dart +++ b/example/lib/diagnostic_main.dart @@ -14,9 +14,9 @@ void main() async { debugPrint('========================================'); // Initialize and run the app - SplashVideoPage.initialize(); + SplashVideo.initialize(); - final mediaKitWorking = await SplashVideoPage.testMediaKit(); + final mediaKitWorking = await SplashVideo.testMediaKit(); if (!mediaKitWorking) { debugPrint(''); @@ -80,7 +80,7 @@ class _DiagnosticPageState extends State { body: Stack( children: [ // The splash video - SplashVideoPage( + SplashVideo( source: AssetSource('assets/splash.mp4'), backgroundColor: Colors.black, onVideoError: (error) { diff --git a/example/lib/main.dart b/example/lib/main.dart index ba5165e..1b906f9 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -6,7 +6,7 @@ void main() { // Initialize SplashVideo: defer first frame & setup MediaKit // This is safe because our first screen IS a SplashVideoPage - SplashVideoPage.initialize(); + SplashVideo.initialize(); runApp(const MyApp()); } @@ -56,7 +56,7 @@ class InitialSplashExample extends StatelessWidget { @override Widget build(BuildContext context) { - return SplashVideoPage( + return SplashVideo( source: AssetSource(ExampleSelector.kFilePath), backgroundColor: Colors.black, nextScreen: const ExampleSelector(), @@ -289,7 +289,7 @@ class AutoNavigateExample extends StatelessWidget { @override Widget build(BuildContext context) { - return SplashVideoPage( + return SplashVideo( source: AssetSource(ExampleSelector.kFilePath), nextScreen: const HomeScreen(title: 'Auto-Navigate Example'), backgroundColor: Colors.black, @@ -314,7 +314,7 @@ class ManualControlExample extends StatelessWidget { @override Widget build(BuildContext context) { - return SplashVideoPage( + return SplashVideo( source: AssetSource(ExampleSelector.kFilePath), backgroundColor: Colors.black, onVideoError: (error) { @@ -374,7 +374,7 @@ class _LoopingExampleState extends State { @override Widget build(BuildContext context) { - return SplashVideoPage( + return SplashVideo( source: AssetSource(ExampleSelector.kFilePath), controller: controller, backgroundColor: Colors.black, @@ -435,7 +435,7 @@ class OverlayExample extends StatelessWidget { @override Widget build(BuildContext context) { - return SplashVideoPage( + return SplashVideo( source: AssetSource(ExampleSelector.kFilePath), nextScreen: const HomeScreen(title: 'Overlay Example'), backgroundColor: Colors.black, diff --git a/lib/splash_video.dart b/lib/splash_video.dart index d8728c6..e5de5b4 100644 --- a/lib/splash_video.dart +++ b/lib/splash_video.dart @@ -23,7 +23,7 @@ library; // Main widget -export 'widgets/splash_video_page_w.dart'; +export 'widgets/splash_video_w.dart'; // Controller export 'splash_video_controller.dart'; diff --git a/lib/widgets/splash_video_page_w.dart b/lib/widgets/splash_video_w.dart similarity index 97% rename from lib/widgets/splash_video_page_w.dart rename to lib/widgets/splash_video_w.dart index 6a3b356..df04755 100644 --- a/lib/widgets/splash_video_page_w.dart +++ b/lib/widgets/splash_video_w.dart @@ -35,14 +35,14 @@ import 'package:splash_video/widgets/splash_video_player_w.dart'; /// /// This widget handles video playback, overlays, navigation, and lifecycle management. /// It provides a smooth transition from native splash screen to video splash. -class SplashVideoPage extends StatefulWidget { +class SplashVideo extends StatefulWidget { /// Creates a SplashVideo widget /// /// [source] is required and specifies the video source /// [controller] is required when using looping videos /// /// Throws [AssertionError] if validation rules are violated - const SplashVideoPage({ + const SplashVideo({ super.key, required this.source, this.controller, @@ -185,10 +185,10 @@ class SplashVideoPage extends StatefulWidget { } @override - State createState() => _SplashVideoPageState(); + State createState() => _SplashVideoState(); } -class _SplashVideoPageState extends State { +class _SplashVideoState extends State { Timer? _completionTimer; StreamSubscription? _skipSubscription; @@ -201,7 +201,7 @@ class _SplashVideoPageState extends State { // Validate configuration _validateConfiguration(); - onSourceLoaded = widget.onSourceLoaded ?? SplashVideoPage.resume; + onSourceLoaded = widget.onSourceLoaded ?? SplashVideo.resume; // Listen for skip requests if controller provided if (widget.controller != null) { diff --git a/test/splash_video_page_test.dart b/test/splash_video_page_test.dart index 14aae45..a94522c 100644 --- a/test/splash_video_page_test.dart +++ b/test/splash_video_page_test.dart @@ -32,21 +32,21 @@ void main() { (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), onVideoError: (_) {}, // Suppress errors in test ), ), ); - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); }); testWidgets('validates conflicting nextScreen and onVideoComplete', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), nextScreen: const Scaffold(body: Text('Next')), onVideoComplete: () {}, @@ -64,7 +64,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, nextScreen: const Scaffold(), @@ -82,7 +82,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, onVideoComplete: () {}, @@ -100,7 +100,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, onVideoError: (_) {}, @@ -110,7 +110,7 @@ void main() { // Should not throw expect(tester.takeException(), isNull); - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); controller.dispose(); }); @@ -118,7 +118,7 @@ void main() { testWidgets('renders with backgroundColor', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), backgroundColor: Colors.red, onVideoError: (_) {}, @@ -127,13 +127,13 @@ void main() { ); await tester.pump(); - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); }); testWidgets('renders with title overlay', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), titleWidget: const Text('App Title'), onVideoError: (_) {}, @@ -148,7 +148,7 @@ void main() { testWidgets('renders with footer overlay', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), footerWidget: const CircularProgressIndicator(), onVideoError: (_) {}, @@ -164,7 +164,7 @@ void main() { (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), overlayBuilder: (context) => const Positioned( top: 20, @@ -183,7 +183,7 @@ void main() { testWidgets('renders all overlays together', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), titleWidget: const Text('Title'), footerWidget: const Text('Footer'), @@ -204,7 +204,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/invalid.mp4'), onVideoError: (error) { errorMessage = error; @@ -224,7 +224,7 @@ void main() { (WidgetTester tester) async { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/invalid.mp4'), ), ), @@ -241,8 +241,8 @@ void main() { group('SplashVideoPage Static Methods', () { testWidgets('initialize and resume work', (WidgetTester tester) async { // These methods affect WidgetsBinding, so we just verify they don't throw - SplashVideoPage.initialize(); - SplashVideoPage.resume(); + SplashVideo.initialize(); + SplashVideo.resume(); // Should not throw expect(true, isTrue); @@ -255,7 +255,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, onVideoError: (_) {}, @@ -263,7 +263,7 @@ void main() { ), ); - expect(find.byType(SplashVideoPage), findsOneWidget); + expect(find.byType(SplashVideo), findsOneWidget); controller.dispose(); }); @@ -272,7 +272,7 @@ void main() { await tester.pumpWidget( MaterialApp( - home: SplashVideoPage( + home: SplashVideo( source: AssetSource('assets/videos/splash.mp4'), controller: controller, onVideoError: (_) {},