diff --git a/app/assets/images/onboarding/1.gif b/app/assets/images/onboarding/1.gif deleted file mode 100644 index 37971a991..000000000 Binary files a/app/assets/images/onboarding/1.gif and /dev/null differ diff --git a/app/assets/images/onboarding/1.png b/app/assets/images/onboarding/1.png new file mode 100644 index 000000000..5483ad9d4 Binary files /dev/null and b/app/assets/images/onboarding/1.png differ diff --git a/app/assets/images/onboarding/2.gif b/app/assets/images/onboarding/2.gif deleted file mode 100644 index de2ca8168..000000000 Binary files a/app/assets/images/onboarding/2.gif and /dev/null differ diff --git a/app/assets/images/onboarding/2.png b/app/assets/images/onboarding/2.png new file mode 100644 index 000000000..d91a4f6ac Binary files /dev/null and b/app/assets/images/onboarding/2.png differ diff --git a/app/assets/images/onboarding/3.gif b/app/assets/images/onboarding/3.gif deleted file mode 100644 index ea0910371..000000000 Binary files a/app/assets/images/onboarding/3.gif and /dev/null differ diff --git a/app/assets/images/onboarding/3.png b/app/assets/images/onboarding/3.png new file mode 100644 index 000000000..734b3be6a Binary files /dev/null and b/app/assets/images/onboarding/3.png differ diff --git a/app/assets/images/onboarding/4.gif b/app/assets/images/onboarding/4.gif deleted file mode 100644 index 855819e8b..000000000 Binary files a/app/assets/images/onboarding/4.gif and /dev/null differ diff --git a/app/assets/images/onboarding/4.png b/app/assets/images/onboarding/4.png new file mode 100644 index 000000000..be48658e5 Binary files /dev/null and b/app/assets/images/onboarding/4.png differ diff --git a/app/assets/images/onboarding/5.gif b/app/assets/images/onboarding/5.gif deleted file mode 100644 index a1b2319af..000000000 Binary files a/app/assets/images/onboarding/5.gif and /dev/null differ diff --git a/app/assets/images/onboarding/5.png b/app/assets/images/onboarding/5.png new file mode 100644 index 000000000..296932ac7 Binary files /dev/null and b/app/assets/images/onboarding/5.png differ diff --git a/app/assets/images/onboarding/svg/2.svg b/app/assets/images/onboarding/svg/2.svg new file mode 100644 index 000000000..347eb1fac --- /dev/null +++ b/app/assets/images/onboarding/svg/2.svg @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/assets/images/onboarding/svg/3.svg b/app/assets/images/onboarding/svg/3.svg new file mode 100644 index 000000000..e8fbf60f0 --- /dev/null +++ b/app/assets/images/onboarding/svg/3.svg @@ -0,0 +1,1332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/assets/images/onboarding/svg/4.svg b/app/assets/images/onboarding/svg/4.svg new file mode 100644 index 000000000..ed7dc6a3e --- /dev/null +++ b/app/assets/images/onboarding/svg/4.svg @@ -0,0 +1,466 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ? + + + + diff --git a/app/assets/images/onboarding/svg/5.svg b/app/assets/images/onboarding/svg/5.svg new file mode 100644 index 000000000..52727758d --- /dev/null +++ b/app/assets/images/onboarding/svg/5.svg @@ -0,0 +1,725 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/ios/Podfile.lock b/app/ios/Podfile.lock index 7698af205..2642d9b56 100644 --- a/app/ios/Podfile.lock +++ b/app/ios/Podfile.lock @@ -60,7 +60,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec flutter_share: 4be0208963c60b537e6255ed2ce1faae61cd9ac2 flutter_web_auth: 09a0abd245f1a07a3ff4dcf1247a048d89ee12a9 @@ -73,4 +73,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 -COCOAPODS: 1.11.3 +COCOAPODS: 1.10.0 diff --git a/app/lib/common/theme.dart b/app/lib/common/theme.dart index c8afc6ac7..e354ced8c 100644 --- a/app/lib/common/theme.dart +++ b/app/lib/common/theme.dart @@ -70,6 +70,8 @@ class PharMeTheme { static const backgroundColor = Colors.white; static const errorColor = Color(0xccf52a2a); static final borderColor = Colors.black.withOpacity(.2); + + static const mediumSpace = 16.0; } extension WarningLevelColor on WarningLevel { diff --git a/app/lib/l10n/app_en.arb b/app/lib/l10n/app_en.arb index ca32974a9..93a3d3805 100644 --- a/app/lib/l10n/app_en.arb +++ b/app/lib/l10n/app_en.arb @@ -2,7 +2,7 @@ "action_cancel": "Cancel", "action_continue": "Continue", - "auth_choose_lab": "Please select your lab", + "auth_choose_lab": "Please select your data provider", "auth_sign_in": "Sign in", "auth_success": "Successfully imported data", @@ -104,6 +104,7 @@ "onboarding_get_started": "Get started", "onboarding_next": "Next", + "onboarding_prev": "Back", "onboarding_1_header": "Welcome to PharMe", "onboarding_1_text": "Your genome has more influence on your life than you might think!\nMore than 90% of people are vulnerable to unintended drug reactions.\n\nUse PharMe to find out about yours.", "onboarding_2_header": "One size does not fit all", diff --git a/app/lib/login/models/lab.dart b/app/lib/login/models/lab.dart index ae90fcbc7..fe1f3b819 100644 --- a/app/lib/login/models/lab.dart +++ b/app/lib/login/models/lab.dart @@ -16,13 +16,7 @@ class Lab { final labs = [ Lab( - name: 'Illumina Solutions Center Berlin', - authUrl: keycloakUrl('/realms/pharme/protocol/openid-connect/auth'), - tokenUrl: keycloakUrl('/realms/pharme/protocol/openid-connect/token'), - starAllelesUrl: labServerUrl('/star-alleles'), - ), - Lab( - name: 'Mount Sinai Hospital (NYC)', + name: 'Mount Sinai Health System', authUrl: keycloakUrl('/realms/pharme/protocol/openid-connect/auth'), tokenUrl: keycloakUrl('/realms/pharme/protocol/openid-connect/token'), starAllelesUrl: labServerUrl('/star-alleles'), diff --git a/app/lib/login/pages/login.dart b/app/lib/login/pages/login.dart index faa65a175..845de67f7 100644 --- a/app/lib/login/pages/login.dart +++ b/app/lib/login/pages/login.dart @@ -74,6 +74,11 @@ class LoginPage extends HookWidget { action: action, actionText: context.l10n.auth_sign_in, children: [ + Text( + context.l10n.auth_choose_lab, + style: PharMeTheme.textTheme.titleLarge, + ), + SizedBox(height: PharMeTheme.mediumSpace), DropdownButtonHideUnderline( child: DropdownButton2( isExpanded: true, @@ -113,7 +118,7 @@ class LoginPage extends HookWidget { color: PharMeTheme.primaryColor, size: 96, ), - SizedBox(height: 16), + SizedBox(height: PharMeTheme.mediumSpace), Text( context.l10n.auth_success, style: context.textTheme.headline6, @@ -133,7 +138,7 @@ class LoginPage extends HookWidget { color: PharMeTheme.errorColor, size: 96, ), - SizedBox(height: 16), + SizedBox(height: PharMeTheme.mediumSpace), Text( message, style: context.textTheme.headline6, @@ -152,7 +157,7 @@ class LoginPage extends HookWidget { mainAxisSize: MainAxisSize.min, children: [ ...children, - SizedBox(height: 16), + SizedBox(height: PharMeTheme.mediumSpace), SizedBox( width: double.infinity, child: ElevatedButton( diff --git a/app/lib/onboarding/pages/onboarding.dart b/app/lib/onboarding/pages/onboarding.dart index 7be0d2802..761726b9a 100644 --- a/app/lib/onboarding/pages/onboarding.dart +++ b/app/lib/onboarding/pages/onboarding.dart @@ -6,19 +6,19 @@ import '../../../common/module.dart' hide MetaData; class OnboardingPage extends HookWidget { final _pages = [ OnboardingSubPage( - illustrationPath: 'assets/images/onboarding/1.gif', + illustrationPath: 'assets/images/onboarding/1.png', getHeader: (context) => context.l10n.onboarding_1_header, getText: (context) => context.l10n.onboarding_1_text, color: Color(0xFFFF7E41), ), OnboardingSubPage( - illustrationPath: 'assets/images/onboarding/2.gif', + illustrationPath: 'assets/images/onboarding/2.png', getHeader: (context) => context.l10n.onboarding_2_header, getText: (context) => context.l10n.onboarding_2_text, color: Color(0xCCCC0700), ), OnboardingSubPage( - illustrationPath: 'assets/images/onboarding/3.gif', + illustrationPath: 'assets/images/onboarding/3.png', getHeader: (context) => context.l10n.onboarding_3_header, getText: (context) => context.l10n.onboarding_3_text, color: Color(0xCC359600), @@ -28,7 +28,7 @@ class OnboardingPage extends HookWidget { ), ), OnboardingSubPage( - illustrationPath: 'assets/images/onboarding/4.gif', + illustrationPath: 'assets/images/onboarding/4.png', getHeader: (context) => context.l10n.onboarding_4_header, getText: (context) => context.l10n.onboarding_4_text, color: Color(0xFF00B9FA), @@ -42,7 +42,7 @@ class OnboardingPage extends HookWidget { ), ), OnboardingSubPage( - illustrationPath: 'assets/images/onboarding/5.gif', + illustrationPath: 'assets/images/onboarding/5.png', getHeader: (context) => context.l10n.onboarding_5_header, getText: (context) => context.l10n.onboarding_5_text, color: Color(0xFF0A64BC), @@ -113,6 +113,15 @@ class OnboardingPage extends HookWidget { currentPage.value == _pages.length - 1, ), ), + Positioned( + bottom: 16, + left: 16, + child: _buildPrevButton( + context, + pageController, + currentPage.value == 0, + ), + ) ], ), ), @@ -180,6 +189,43 @@ class OnboardingPage extends HookWidget { ), ); } + + Widget _buildPrevButton( + BuildContext context, + PageController pageController, + bool isFirstPage, + ) { + if (!isFirstPage) { + return TextButton( + key: Key('prevButton'), + onPressed: () { + pageController.previousPage( + duration: Duration(milliseconds: 500), + curve: Curves.ease, + ); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.arrow_back_rounded, + color: Colors.white, + size: 32, + ), + SizedBox(width: 8), + Text( + context.l10n.onboarding_prev, + style: PharMeTheme.textTheme.headlineSmall! + .copyWith(color: Colors.white), + ), + ], + ), + ); + } else { + return SizedBox.shrink(); + } + } } class OnboardingSubPage extends StatelessWidget { @@ -205,9 +251,9 @@ class OnboardingSubPage extends StatelessWidget { padding: const EdgeInsets.fromLTRB(32, 16, 32, 0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.center, children: [ - SizedBox(height: 16), + SizedBox(height: PharMeTheme.mediumSpace), Center( child: FractionallySizedBox( alignment: Alignment.topCenter, @@ -218,6 +264,7 @@ class OnboardingSubPage extends StatelessWidget { ), ), ), + SizedBox(height: PharMeTheme.mediumSpace), Column(children: [ AutoSizeText( getHeader(context), @@ -226,14 +273,14 @@ class OnboardingSubPage extends StatelessWidget { ), maxLines: 2, ), - SizedBox(height: 8), + SizedBox(height: PharMeTheme.mediumSpace), Text( getText(context), - style: PharMeTheme.textTheme.bodyMedium!.copyWith( + style: PharMeTheme.textTheme.bodyLarge!.copyWith( color: Colors.white, ), ), - if (child != null) ...[SizedBox(height: 8), child!], + if (child != null) ...[SizedBox(height: PharMeTheme.mediumSpace), child!], ]), // Empty widget for spaceBetween in this column to work properly Container(), diff --git a/app/pubspec.lock b/app/pubspec.lock index fc2038de5..ae070c7a8 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -21,7 +21,7 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.3.0" + version: "3.1.11" args: dependency: transitive description: @@ -35,7 +35,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.9.0" + version: "2.8.2" auto_route: dependency: "direct main" description: @@ -154,7 +154,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.1" + version: "1.2.0" charcode: dependency: transitive description: @@ -175,7 +175,7 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.1.0" code_builder: dependency: transitive description: @@ -203,14 +203,14 @@ packages: name: coverage url: "https://pub.dartlang.org" source: hosted - version: "1.5.0" + version: "1.2.0" crypto: dependency: transitive description: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.0.1" csslib: dependency: transitive description: @@ -315,7 +315,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.3.1" + version: "1.3.0" ffi: dependency: transitive description: @@ -637,21 +637,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.12" + version: "0.12.11" material_color_utilities: dependency: transitive description: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.5" + version: "0.1.4" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.7.0" mime: dependency: transitive description: @@ -735,7 +735,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.2" + version: "1.8.1" path_drawing: dependency: transitive description: @@ -1027,7 +1027,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.9.0" + version: "1.8.2" stack_trace: dependency: transitive description: @@ -1055,49 +1055,49 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.1.0" sync_http: dependency: transitive description: name: sync_http url: "https://pub.dartlang.org" source: hosted - version: "0.3.1" + version: "0.3.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.1" + version: "1.2.0" test: dependency: transitive description: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.21.4" + version: "1.21.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.12" + version: "0.4.9" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.4.16" + version: "0.4.13" time: dependency: transitive description: name: time url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.2" timing: dependency: transitive description: @@ -1111,7 +1111,7 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.1" + version: "1.3.0" universal_html: dependency: transitive description: @@ -1195,7 +1195,7 @@ packages: name: vm_service url: "https://pub.dartlang.org" source: hosted - version: "9.0.0" + version: "8.2.2" watcher: dependency: transitive description: