code final

 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';


void main() {

  runApp(const FatheduApp());

}


class FatheduApp extends StatelessWidget {

  const FatheduApp({super.key});


  @override

  Widget build(BuildContext context) {

    return const MaterialApp(

      debugShowCheckedModeBanner: false,

      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;

  bool webViewInitialized = false;


  @override

  void initState() {

    super.initState();

    _initializeApp();

  }


  Future<void> _initializeApp() async {

    _videoController = VideoPlayerController.asset('assets/intro.mp4');

    await _videoController.initialize();

    setState(() {});

    _videoController.play();

    _videoController.setLooping(false);


    // Preload WebView in background

    _preloadController = WebViewController()

      ..setJavaScriptMode(JavaScriptMode.unrestricted)

      ..loadRequest(Uri.parse('https://fathedu.com/dashboard/'));

    webViewInitialized = true;


    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: (_) => FatheduHomePage(preloadedController: _preloadController),

        ),

      );

    });

  }


  void _showRestartDialog() {

    showDialog(

      context: context,

      barrierDismissible: false,

      builder: (_) => AlertDialog(

        title: const Text('இணையம் தேவை'),

        content: const Text(

            'பயன்பாட்டை தொடங்க, இணைய இணைப்பு தேவை.\nதயவுசெய்து இணையம் இணைத்து, App ஐ மீண்டும் துவக்கவும்.'),

        actions: [

          TextButton(

            onPressed: () {

              Navigator.of(context).pop();

            },

            child: const Text('சரி'),

          ),

        ],

      ),

    );

  }


  @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 FatheduHomePage extends StatefulWidget {

  final WebViewController? preloadedController;

  const FatheduHomePage({super.key, this.preloadedController});


  @override

  State<FatheduHomePage> createState() => _FatheduHomePageState();

}


class _FatheduHomePageState extends State<FatheduHomePage> {

  bool isOffline = false;

  late final WebViewController _controller;


  @override

  void initState() {

    super.initState();


    Connectivity().checkConnectivity().then((result) {

      setState(() {

        isOffline = result == ConnectivityResult.none;

      });

    });


    Connectivity().onConnectivityChanged.listen((result) {

      setState(() {

        isOffline = result == ConnectivityResult.none;

      });

    });


    // Use preloaded WebView if available

    _controller = widget.preloadedController ??

        (WebViewController()

          ..setJavaScriptMode(JavaScriptMode.unrestricted)

          ..loadRequest(Uri.parse('https://fathedu.com/dashboard/')));

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      body: SafeArea(

        child: isOffline

            ? Image.asset(

                'assets/images/offline.png',

                fit: BoxFit.cover,

                width: double.infinity,

                height: double.infinity,

              )

            : WebViewWidget(controller: _controller),

      ),

    );

  }

}


Post a Comment

0 Comments