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),
),
);
}
}
0 Comments