main.dart A3 Code with offline restart noti... but bl src

 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;

  @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);

    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: (_) => const FatheduHomePage()),
      );
    });
  }

  void _showRestartDialog() {
    showDialog(
      context: context,
      barrierDismissible: false,
      builder: (_) => AlertDialog(
        title: const Text('No Internet'),
        content: const Text(
            'Looks like you are offline turn on your internet and restart the App'),
        actions: [
          TextButton(
            onPressed: () {
              Navigator.of(context).pop();
              // App frozen, can't proceed.
            },
            child: const Text('Restart'),
          ),
        ],
      ),
    );
  }

  @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 {
  const FatheduHomePage({super.key});

  @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;
      });
    });

    _controller = 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