import 'package:flutter/material.dart'; import 'package:hmg_qline/config/routes.dart'; import 'package:hmg_qline/utilities/extensions.dart'; import 'package:hmg_qline/view_models/queuing_view_model.dart'; import 'package:hmg_qline/view_models/screen_config_view_model.dart'; import 'package:provider/provider.dart'; import 'package:hmg_qline/utilities/enums.dart'; import 'dart:developer'; class SplashScreen extends StatelessWidget { const SplashScreen({super.key}); Future _loadData(BuildContext context) async { final screenConfigViewModel = context.read(); final queuingViewModel = context.read(); await screenConfigViewModel.waitForIPAndInitializeConfigVM(); await queuingViewModel.initializeQueueingVM(); } static Future? _initializationFuture; @override Widget build(BuildContext context) { _initializationFuture ??= _loadData(context); return FutureBuilder( future: _initializationFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Scaffold( body: Center( child: CircularProgressIndicator(), // Loading indicator ), ); } // If an error occurs if (snapshot.hasError) { return Scaffold( body: Center( child: Padding( padding: const EdgeInsets.all(12), child: Text('${snapshot.stackTrace}'), ), // Error message ), ); } // If the data is loaded successfully if (snapshot.connectionState == ConnectionState.done) { Future.delayed(const Duration(seconds: 1)).whenComplete(() { if (context.read().currentScreenTypeEnum == ScreenTypeEnum.kioskScreen) { context.navigateReplaceTo(AppRoutes.kioskMainScreen); } else { context.navigateReplaceTo(AppRoutes.mainQueueScreen); } }); } return const Scaffold( body: Center( child: CircularProgressIndicator(), // Loading indicator ), ); }, ); } }