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 _webViewController;
bool _webViewReady = false;
@override
void initState() {
super.initState();
// Initialize WebView early
_webViewController = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..loadRequest(Uri.parse('https://fathedu.com/dashboard/'))
..setNavigationDelegate(
NavigationDelegate(
onPageFinished: (_) {
setState(() {
_webViewReady = true;
});
},
),
);
// Initialize and play video
_videoController = VideoPlayerController.asset('assets/intro.mp4')
..initialize().then((_) {
setState(() {});
_videoController.play();
_videoController.setLooping(false);
// Navigate after video ends (or 3 seconds)
Timer(const Duration(seconds: 3), () {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (_) => FatheduHomePage(controller: _webViewController),
),
);
});
});
}
@override
void dispose() {
_videoController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _videoController.value.isInitialized
? Stack(
children: [
SizedBox.expand(
child: FittedBox(
fit: BoxFit.cover,
child: SizedBox(
width: _videoController.value.size.width,
height: _videoController.value.size.height,
child: VideoPlayer(_videoController),
),
),
),
// Optional: show loading spinner for webview init (invisible to user)
if (!_webViewReady)
const Positioned(
bottom: 20,
left: 0,
right: 0,
child: Center(
child: CircularProgressIndicator(color: Colors.white),
),
),
],
)
: const Center(child: CircularProgressIndicator()),
);
}
}
class FatheduHomePage extends StatefulWidget {
final WebViewController controller;
const FatheduHomePage({super.key, required this.controller});
@override
State<FatheduHomePage> createState() => _FatheduHomePageState();
}
class _FatheduHomePageState extends State<FatheduHomePage> {
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/images/offline.png',
fit: BoxFit.cover,
width: double.infinity,
height: double.infinity,
)
: WebViewWidget(controller: widget.controller),
),
);
}
}
0 Comments