TuterMaxLearn main.dart (final Updated code) Work YouTube embedded files

 


import 'dart:async';
import 'package:flutter/material.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:video_player/video_player.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_android/webview_flutter_android.dart';
import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart';

void main() {
  runApp(const TutorMaxLearnApp());
}

class TutorMaxLearnApp extends StatelessWidget {
  const TutorMaxLearnApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Tutor Max Learn',
      home: SplashScreen(),
    );
  }
}

class SplashScreen extends StatefulWidget {
  const SplashScreen({super.key});

  @override
  State<SplashScreen> createState() => _SplashScreenState();
}

class _SplashScreenState extends State<SplashScreen> {
  late VideoPlayerController _videoController;
  late final WebViewController _preloadController;

  @override
  void initState() {
    super.initState();
    _initializeApp();
  }

  Future<void> _initializeApp() async {
    // Intro video
    _videoController = VideoPlayerController.asset('assets/intro.mp4');
    await _videoController.initialize();
    setState(() {});
    _videoController.play();
    _videoController.setLooping(false);

    // Platform-specific WebViewController params
    final PlatformWebViewControllerCreationParams params;
    if (WebViewPlatform.instance is WebKitWebViewPlatform) {
      params = WebKitWebViewControllerCreationParams(
        allowsInlineMediaPlayback: true,
        mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
      );
    } else {
      params = const PlatformWebViewControllerCreationParams();
    }

    final controller = WebViewController.fromPlatformCreationParams(params)
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setBackgroundColor(Colors.white)
      ..loadRequest(Uri.parse('https://ictbysathith.cloud/'));

    // Android-specific autoplay fix
    if (controller.platform is AndroidWebViewController) {
      (controller.platform as AndroidWebViewController)
          .setMediaPlaybackRequiresUserGesture(false);
    }

    _preloadController = controller;

    // Splash timer -> move to Home
    Timer(const Duration(seconds: 3), () async {
      final connectivity = await Connectivity().checkConnectivity();
      final isOffline = connectivity == ConnectivityResult.none;

      if (isOffline) {
        _showRestartDialog();
        return;
      }

      Navigator.of(context).pushReplacement(
        MaterialPageRoute(
          builder: (_) =>
              TutorMaxHomePage(preloadedController: _preloadController),
        ),
      );
    });
  }

  void _showRestartDialog() {
    showDialog(
      context: context,
      barrierDismissible: false,
      builder: (_) => AlertDialog(
        title: const Text('No Internet'),
        content:
            const Text('Please connect to the internet and restart the App.'),
        actions: [
          TextButton(
            onPressed: () {
              Navigator.of(context).pop();
            },
            child: const Text('Close'),
          ),
        ],
      ),
    );
  }

  @override
  void dispose() {
    _videoController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _videoController.value.isInitialized
          ? SizedBox.expand(
              child: FittedBox(
                fit: BoxFit.cover,
                child: SizedBox(
                  width: _videoController.value.size.width,
                  height: _videoController.value.size.height,
                  child: VideoPlayer(_videoController),
                ),
              ),
            )
          : const Center(child: CircularProgressIndicator()),
    );
  }
}

class TutorMaxHomePage extends StatefulWidget {
  final WebViewController preloadedController;
  const TutorMaxHomePage({super.key, required this.preloadedController});

  @override
  State<TutorMaxHomePage> createState() => _TutorMaxHomePageState();
}

class _TutorMaxHomePageState extends State<TutorMaxHomePage> {
  bool isOffline = false;

  @override
  void initState() {
    super.initState();

    Connectivity().checkConnectivity().then((result) {
      setState(() {
        isOffline = result == ConnectivityResult.none;
      });
    });

    Connectivity().onConnectivityChanged.listen((result) {
      setState(() {
        isOffline = result == ConnectivityResult.none;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: isOffline
            ? Image.asset(
                'assets/offline.png',
                fit: BoxFit.cover,
                width: double.infinity,
                height: double.infinity,
              )
            : WebViewWidget(controller: widget.preloadedController),
     ),
);
}
}




pubspec.yaml


Post a Comment

0 Comments