diff --git a/lib/pages/splash/splash.dart b/lib/pages/splash/splash.dart index 3ea027d..4486bec 100644 --- a/lib/pages/splash/splash.dart +++ b/lib/pages/splash/splash.dart @@ -10,10 +10,12 @@ import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/storage/storage.dart'; import 'package:didvan/utils/action_sheet.dart'; +import 'package:didvan/widgets/didvan/button.dart'; import 'package:didvan/widgets/logos/didvan_horizontal_logo.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:provider/provider.dart'; import 'package:universal_html/html.dart' as html; @@ -26,6 +28,7 @@ class Splash extends StatefulWidget { class _SplashState extends State { bool _isGettingThemeData = true; + bool _errorOccured = false; @override void initState() { @@ -51,40 +54,70 @@ class _SplashState extends State { alignment: Alignment.center, padding: const EdgeInsets.all(60), color: Theme.of(context).colorScheme.background, - child: const DidvanVerticalLogo(), + child: Column( + children: [ + const SizedBox(height: 70), + const Expanded( + child: DidvanVerticalLogo(), + ), + if (!_errorOccured) + SpinKitSpinningLines( + color: Theme.of(context).colorScheme.primary, + ), + if (_errorOccured) const SizedBox(height: 38), + if (_errorOccured) + DidvanButton( + width: 120, + height: 40, + title: 'تلاش مجدد', + onPressed: () { + setState(() { + _errorOccured = false; + }); + _initialize(); + }, + ), + ], + ), ), ), ); } Future _initialize() async { - ActionSheetUtils.context = navigatorKey.currentContext!; - if (kIsWeb) { - html.window.onBeforeUnload.listen((event) { - StorageService.webStorage - .removeWhere((key, value) => key == 'image-cache'); + try { + ActionSheetUtils.context = navigatorKey.currentContext!; + if (kIsWeb) { + html.window.onBeforeUnload.listen((event) { + StorageService.webStorage + .removeWhere((key, value) => key == 'image-cache'); + }); + } + await AppInitializer.setupServices(); + final ThemeMode themeMode = await AppInitializer.initilizeSettings(); + context.read().themeMode = themeMode; + await Future.delayed( + const Duration(milliseconds: 200), + () => setState(() { + _isGettingThemeData = false; + }), + ); + final userProvider = context.read(); + final String? token = await userProvider.setAndGetToken(); + if (token != null) { + log(token); + RequestService.token = token; + await userProvider.getUserInfo(); + await context.read().getData(); + } + Navigator.of(context).pushReplacementNamed( + token == null ? Routes.authenticaion : Routes.home, + arguments: token == null ? false : null, + ); + } catch (e) { + setState(() { + _errorOccured = true; }); } - await AppInitializer.setupServices(); - final ThemeMode themeMode = await AppInitializer.initilizeSettings(); - context.read().themeMode = themeMode; - await Future.delayed( - const Duration(milliseconds: 200), - () => setState(() { - _isGettingThemeData = false; - }), - ); - final userProvider = context.read(); - final String? token = await userProvider.setAndGetToken(); - if (token != null) { - log(token); - RequestService.token = token; - await userProvider.getUserInfo(); - await context.read().getData(); - } - Navigator.of(context).pushReplacementNamed( - token == null ? Routes.authenticaion : Routes.home, - arguments: token == null ? false : null, - ); } }