Show splash screen until 1st account logged in then allow rest to load while app in use.

merge-requests/67/merge
Hank Grabowski 2023-05-10 11:21:33 -04:00
rodzic 97f48240b3
commit 1978819c9e
6 zmienionych plików z 73 dodań i 5 usunięć

Wyświetl plik

@ -86,7 +86,7 @@ Future<void> dependencyInjectionInitialization() async {
if (serviceInit.isFailure) { if (serviceInit.isFailure) {
_logger.severe('Error initializing credentials'); _logger.severe('Error initializing credentials');
} else { } else {
await accountsService.initialize(); accountsService.initialize();
} }
getIt.registerSingleton<AccountsService>(accountsService); getIt.registerSingleton<AccountsService>(accountsService);
getIt<ActiveProfileSelector<IConnectionsRepo>>().subscribeToProfileSwaps(); getIt<ActiveProfileSelector<IConnectionsRepo>>().subscribeToProfileSwaps();

Wyświetl plik

@ -67,6 +67,11 @@ final appRouter = GoRouter(
refreshListenable: _authService, refreshListenable: _authService,
redirect: (context, state) async { redirect: (context, state) async {
final loggedIn = _authService.loggedIn; final loggedIn = _authService.loggedIn;
if (!loggedIn && _authService.initializing) {
return ScreenPaths.splash;
}
if (!loggedIn && !allowedLoggedOut.contains(state.location)) { if (!loggedIn && !allowedLoggedOut.contains(state.location)) {
return ScreenPaths.signin; return ScreenPaths.signin;
} }

Wyświetl plik

@ -1,4 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import '../controls/padding.dart';
import '../globals.dart';
import '../services/auth_service.dart';
class SplashScreen extends StatelessWidget { class SplashScreen extends StatelessWidget {
@override @override
@ -9,7 +14,18 @@ class SplashScreen extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
const Text('Relatica'), SvgPicture.asset('icon/relatica_logo.svg', width: 128),
const VerticalPadding(),
Text(
'Relatica',
style: Theme.of(context).textTheme.headlineLarge,
),
const VerticalPadding(),
if (getIt<AccountsService>().initializing) ...[
const CircularProgressIndicator(),
const VerticalPadding(),
const Text('Logging in accounts...'),
],
], ],
)), )),
); );

Wyświetl plik

@ -18,6 +18,7 @@ class AccountsService extends ChangeNotifier {
Profile? _currentProfile; Profile? _currentProfile;
final _loggedInProfiles = <Profile>{}; final _loggedInProfiles = <Profile>{};
final _loggedOutProfiles = <Profile>{}; final _loggedOutProfiles = <Profile>{};
var _initializing = false;
final SecretsService secretsService; final SecretsService secretsService;
@ -25,6 +26,8 @@ class AccountsService extends ChangeNotifier {
bool get loggedIn => _currentProfile != null; bool get loggedIn => _currentProfile != null;
bool get initializing => _initializing;
List<Profile> get loggedInProfiles => UnmodifiableListView(_loggedInProfiles); List<Profile> get loggedInProfiles => UnmodifiableListView(_loggedInProfiles);
List<Profile> get loggedOutProfiles => List<Profile> get loggedOutProfiles =>
@ -35,6 +38,7 @@ class AccountsService extends ChangeNotifier {
FutureResult<bool, ExecError> initialize() async { FutureResult<bool, ExecError> initialize() async {
final lastActiveProfile = await _getStoredLoginState(); final lastActiveProfile = await _getStoredLoginState();
_initializing = true;
final result = await runCatchingAsync(() async { final result = await runCatchingAsync(() async {
final initialProfiles = secretsService.profiles; final initialProfiles = secretsService.profiles;
for (final p in initialProfiles) { for (final p in initialProfiles) {
@ -60,9 +64,11 @@ class AccountsService extends ChangeNotifier {
await setActiveProfile(_loggedInProfiles.first); await setActiveProfile(_loggedInProfiles.first);
} }
notifyListeners();
return Result.ok(loggedIn); return Result.ok(loggedIn);
}); });
_initializing = false;
return result.execErrorCast(); return result.execErrorCast();
} }

Wyświetl plik

@ -451,6 +451,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.0" version: "2.0.0"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
sha256: f991fdb1533c3caeee0cdc14b04f50f0c3916f0dbcbc05237ccbe4e3c6b93f3f
url: "https://pub.dev"
source: hosted
version: "2.0.5"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@ -861,6 +869,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.2" version: "1.8.2"
path_parsing:
dependency: transitive
description:
name: path_parsing
sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
url: "https://pub.dev"
source: hosted
version: "1.0.1"
path_provider: path_provider:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1307,6 +1323,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.7" version: "3.0.7"
vector_graphics:
dependency: transitive
description:
name: vector_graphics
sha256: ea8d3fc7b2e0f35de38a7465063ecfcf03d8217f7962aa2a6717132cb5d43a79
url: "https://pub.dev"
source: hosted
version: "1.1.5"
vector_graphics_codec:
dependency: transitive
description:
name: vector_graphics_codec
sha256: a5eaa5d19e123ad4f61c3718ca1ed921c4e6254238d9145f82aa214955d9aced
url: "https://pub.dev"
source: hosted
version: "1.1.5"
vector_graphics_compiler:
dependency: transitive
description:
name: vector_graphics_compiler
sha256: "15edc42f7eaa478ce854eaf1fbb9062a899c0e4e56e775dd73b7f4709c97c4ca"
url: "https://pub.dev"
source: hosted
version: "1.1.5"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:

Wyświetl plik

@ -58,6 +58,7 @@ dependencies:
url_launcher: ^6.1.6 url_launcher: ^6.1.6
uuid: ^3.0.6 uuid: ^3.0.6
video_player: ^2.4.10 video_player: ^2.4.10
flutter_svg: ^2.0.5
dev_dependencies: dev_dependencies:
@ -69,9 +70,9 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
# assets: assets:
# Add assets from the images directory to the application. - icon/relatica_logo.svg
#- .env
parts: parts:
uet-lms: uet-lms:
source: . source: .