From cda7cdb09e3e09353b4d6fd8b946a0d4d89f5711 Mon Sep 17 00:00:00 2001 From: Tamara Slosarek Date: Sat, 7 Sep 2024 11:51:09 +0200 Subject: [PATCH] feat(app): add loading messages to login --- app/integration_test/login_test.dart | 2 +- app/lib/l10n/app_en.arb | 2 ++ app/lib/login/cubit.dart | 15 +++++++++++++-- app/lib/login/pages/login.dart | 16 ++++++++++++++-- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/app/integration_test/login_test.dart b/app/integration_test/login_test.dart index 76f9dbbf..192f15bc 100644 --- a/app/integration_test/login_test.dart +++ b/app/integration_test/login_test.dart @@ -20,7 +20,7 @@ void main() { group('integration tests for the login page', () { testWidgets('test loading state', (tester) async { when(() => mockLoginCubit.state).thenReturn( - LoginState.loadingUserData(), + LoginState.loadingUserData(null), ); await tester.pumpWidget( diff --git a/app/lib/l10n/app_en.arb b/app/lib/l10n/app_en.arb index 71c39a91..51d7bfc0 100644 --- a/app/lib/l10n/app_en.arb +++ b/app/lib/l10n/app_en.arb @@ -25,6 +25,8 @@ "auth_choose_lab": "Please select your data provider", "auth_sign_in": "Get data", "auth_success": "Successfully imported data", + "auth_loading_data": "Loading your data, please do not close the app...", + "auth_updating_data": "Checking for updates, please do not close the app...", "drug_item_brand_names": "Brand names", diff --git a/app/lib/login/cubit.dart b/app/lib/login/cubit.dart index d8979083..016120d8 100644 --- a/app/lib/login/cubit.dart +++ b/app/lib/login/cubit.dart @@ -20,7 +20,7 @@ class LoginCubit extends Cubit { // signInAndLoadUserData authenticates a user with a Lab and fetches their // genomic data from it's endpoint. Future signInAndLoadUserData(BuildContext context, Lab lab) async { - emit(LoginState.loadingUserData()); + emit(LoginState.loadingUserData(null)); // authenticate String? token; @@ -46,11 +46,21 @@ class LoginCubit extends Cubit { } try { + final needNewDataLoad = + shouldFetchDiplotypes() || shouldUpdateGenotypeResults(); // get data + if (needNewDataLoad) { + // ignore: use_build_context_synchronously + emit(LoginState.loadingUserData(context.l10n.auth_loading_data)); + } await fetchAndSaveDiplotypesAndActiveDrugs( token, lab.starAllelesUrl.toString(), activeDrugs); await updateGenotypeResults(); + if (!needNewDataLoad) { + // ignore: use_build_context_synchronously + emit(LoginState.loadingUserData(context.l10n.auth_updating_data)); + } await updateCachedDrugs(); // login + fetching of data successful @@ -104,7 +114,8 @@ class LoginCubit extends Cubit { @freezed class LoginState with _$LoginState { const factory LoginState.initial() = _InitialState; - const factory LoginState.loadingUserData() = _LoadingUserDataState; + const factory LoginState.loadingUserData(String? loadingMessage) = + _LoadingUserDataState; const factory LoginState.loadedUserData() = _LoadedUserDataState; const factory LoginState.error(String string) = _ErrorState; } diff --git a/app/lib/login/pages/login.dart b/app/lib/login/pages/login.dart index bcfcc3db..da8a6a8b 100644 --- a/app/lib/login/pages/login.dart +++ b/app/lib/login/pages/login.dart @@ -27,9 +27,21 @@ class LoginPage extends HookWidget { child: state.when( initial: () => _buildInitialScreen(context, dropdownValue), - loadingUserData: () => Padding( + loadingUserData: (loadingMessage) => Padding( padding: EdgeInsets.all(PharMeTheme.largeSpace), - child: CircularProgressIndicator(), + child: Column( + children: [ + CircularProgressIndicator(), + if (loadingMessage != null) ...[ + SizedBox(height: PharMeTheme.largeSpace), + Text( + loadingMessage, + style: context.textTheme.titleLarge, + textAlign: TextAlign.center, + ), + ], + ], + ), ), loadedUserData: () => _buildLoadedScreen(context), error: (message) =>