From 0c762dcb3374acacb49e818106e5b482573f8fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis-Philippe=20H=C3=A9on?= <83369199+LouisPhilippeHeon@users.noreply.github.com> Date: Mon, 8 Jul 2024 17:13:39 -0400 Subject: [PATCH] Outlined icons (#1011) * Outlined icons * [BOT] Applying version. * [BOT] Applying format. * [BOT] Update golden files * [BOT] Applying pod update. --------- Co-authored-by: LouisPhilippeHeon Co-authored-by: clubapplets-server --- ios/Podfile.lock | 24 +++++++++--------- lib/features/app/widgets/base_scaffold.dart | 2 +- lib/features/app/widgets/bottom_bar.dart | 10 ++++---- .../navigation_rail.dart | 10 ++++---- lib/features/more/feedback/feedback_view.dart | 4 +-- lib/features/more/more_view.dart | 16 +++++++----- lib/features/schedule/schedule_view.dart | 6 ++--- pubspec.yaml | 2 +- .../views/goldenFiles/newsDetailsView_1.png | Bin 5228 -> 5218 bytes test/ui/views/schedule_view_test.dart | 2 +- test/ui/widgets/bottom_bar_test.dart | 24 +++++++++--------- 11 files changed, 51 insertions(+), 49 deletions(-) rename lib/features/app/{navigation => widgets}/navigation_rail.dart (93%) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index a375ba373..e92643247 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -34,7 +34,7 @@ PODS: - Firebase/RemoteConfig (= 10.22.0) - firebase_core - Flutter - - FirebaseABTesting (10.28.0): + - FirebaseABTesting (10.29.0): - FirebaseCore (~> 10.0) - FirebaseAnalytics (10.22.0): - FirebaseAnalytics/AdIdSupport (= 10.22.0) @@ -58,9 +58,9 @@ PODS: - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.12) - GoogleUtilities/Logger (~> 7.12) - - FirebaseCoreExtension (10.28.0): + - FirebaseCoreExtension (10.29.0): - FirebaseCore (~> 10.0) - - FirebaseCoreInternal (10.28.0): + - FirebaseCoreInternal (10.29.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - FirebaseCrashlytics (10.22.0): - FirebaseCore (~> 10.5) @@ -70,7 +70,7 @@ PODS: - GoogleUtilities/Environment (~> 7.8) - nanopb (< 2.30911.0, >= 2.30908.0) - PromisesObjC (~> 2.1) - - FirebaseInstallations (10.28.0): + - FirebaseInstallations (10.29.0): - FirebaseCore (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/UserDefaults (~> 7.8) @@ -82,7 +82,7 @@ PODS: - FirebaseSharedSwift (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseSessions (10.28.0): + - FirebaseSessions (10.29.0): - FirebaseCore (~> 10.5) - FirebaseCoreExtension (~> 10.0) - FirebaseInstallations (~> 10.0) @@ -91,7 +91,7 @@ PODS: - GoogleUtilities/UserDefaults (~> 7.13) - nanopb (< 2.30911.0, >= 2.30908.0) - PromisesSwift (~> 2.1) - - FirebaseSharedSwift (10.28.0) + - FirebaseSharedSwift (10.29.0) - Flutter (1.0.0) - flutter_config (0.0.1): - Flutter @@ -308,16 +308,16 @@ SPEC CHECKSUMS: firebase_core: 100945864b4aedce3cfef0c62ab864858bf013cf firebase_crashlytics: 2b9ca6246501a03427eb43280be7615027e32142 firebase_remote_config: 5ebb1bf2503404f6b24e64f117dc6c22c0498d4c - FirebaseABTesting: 589bc28c0ab3e5554336895a34aa262e24276665 + FirebaseABTesting: d87f56707159bae64e269757a6e963d490f2eebe FirebaseAnalytics: 8d0ff929c63b7f72260f332b86ccf569776b75d3 FirebaseCore: 0326ec9b05fbed8f8716cddbf0e36894a13837f7 - FirebaseCoreExtension: f63147b723e2a700fe0f34ec6fb7f358d6fe83e0 - FirebaseCoreInternal: 58d07f1362fddeb0feb6a857d1d1d1c5e558e698 + FirebaseCoreExtension: 705ca5b14bf71d2564a0ddc677df1fc86ffa600f + FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934 FirebaseCrashlytics: e568d68ce89117c80cddb04073ab9018725fbb8c - FirebaseInstallations: 60c1d3bc1beef809fd1ad1189a8057a040c59f2e + FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd FirebaseRemoteConfig: e1b992a94d3674dddbcaf5d0d31a0312156ceb1c - FirebaseSessions: 20da8500ad66bb12622743e170459bf62a0768e8 - FirebaseSharedSwift: 48de4aec81a6b79bb30404e5e6db43ea74848fed + FirebaseSessions: dbd14adac65ce996228652c1fc3a3f576bdf3ecc + FirebaseSharedSwift: 20530f495084b8d840f78a100d8c5ee613375f6e Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_config: f48f0d47a284f1791aacce2687eabb3309ba7a41 flutter_custom_tabs_ios: 62439c843b2691aae516fd50119a01eb9755fff7 diff --git a/lib/features/app/widgets/base_scaffold.dart b/lib/features/app/widgets/base_scaffold.dart index 2ec804c88..db985defc 100644 --- a/lib/features/app/widgets/base_scaffold.dart +++ b/lib/features/app/widgets/base_scaffold.dart @@ -10,7 +10,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; // Project imports: import 'package:notredame/features/app/integration/networking_service.dart'; -import 'package:notredame/features/app/navigation/navigation_rail.dart'; +import 'package:notredame/features/app/widgets/navigation_rail.dart'; import 'package:notredame/features/app/widgets/bottom_bar.dart'; import 'package:notredame/utils/app_theme.dart'; import 'package:notredame/utils/loading.dart'; diff --git a/lib/features/app/widgets/bottom_bar.dart b/lib/features/app/widgets/bottom_bar.dart index a5a6182ad..c634e50dc 100644 --- a/lib/features/app/widgets/bottom_bar.dart +++ b/lib/features/app/widgets/bottom_bar.dart @@ -95,23 +95,23 @@ class _BottomBarState extends State { return [ BottomNavigationBarItem( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.dashboard, Icons.dashboard), + context, RouterPaths.dashboard, Icons.dashboard_outlined), label: AppIntl.of(context)!.title_dashboard), BottomNavigationBarItem( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.schedule, Icons.schedule), + context, RouterPaths.schedule, Icons.schedule_outlined), label: AppIntl.of(context)!.title_schedule), BottomNavigationBarItem( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.student, Icons.school), + context, RouterPaths.student, Icons.school_outlined), label: AppIntl.of(context)!.title_student), BottomNavigationBarItem( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.ets, Icons.account_balance), + context, RouterPaths.ets, Icons.account_balance_outlined), label: AppIntl.of(context)!.title_ets), BottomNavigationBarItem( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.more, Icons.dehaze), + context, RouterPaths.more, Icons.menu_outlined), label: AppIntl.of(context)!.title_more), ]; } diff --git a/lib/features/app/navigation/navigation_rail.dart b/lib/features/app/widgets/navigation_rail.dart similarity index 93% rename from lib/features/app/navigation/navigation_rail.dart rename to lib/features/app/widgets/navigation_rail.dart index 83134cd49..6a025ae5e 100644 --- a/lib/features/app/navigation/navigation_rail.dart +++ b/lib/features/app/widgets/navigation_rail.dart @@ -94,23 +94,23 @@ class _NavRailState extends State { return [ NavigationRailDestination( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.dashboard, Icons.dashboard), + context, RouterPaths.dashboard, Icons.dashboard_outlined), label: Text(AppIntl.of(context)!.title_dashboard)), NavigationRailDestination( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.schedule, Icons.schedule), + context, RouterPaths.schedule, Icons.schedule_outlined), label: Text(AppIntl.of(context)!.title_schedule)), NavigationRailDestination( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.student, Icons.school), + context, RouterPaths.student, Icons.school_outlined), label: Text(AppIntl.of(context)!.title_student)), NavigationRailDestination( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.ets, Icons.account_balance), + context, RouterPaths.ets, Icons.account_balance_outlined), label: Text(AppIntl.of(context)!.title_ets)), NavigationRailDestination( icon: _buildDiscoveryFeatureDescriptionWidget( - context, RouterPaths.more, Icons.dehaze), + context, RouterPaths.more, Icons.menu_outlined), label: Text(AppIntl.of(context)!.title_more)), ]; } diff --git a/lib/features/more/feedback/feedback_view.dart b/lib/features/more/feedback/feedback_view.dart index af8748bcb..31e997acb 100644 --- a/lib/features/more/feedback/feedback_view.dart +++ b/lib/features/more/feedback/feedback_view.dart @@ -54,7 +54,7 @@ class _FeedbackViewState extends State { context, AppIntl.of(context)!.more_report_bug_bug, AppIntl.of(context)!.more_report_bug_bug_subtitle, - Icons.bug_report, + Icons.bug_report_outlined, const Color.fromRGBO(252, 196, 238, 1), const Color.fromRGBO(153, 78, 174, 1), ), @@ -82,7 +82,7 @@ class _FeedbackViewState extends State { context, AppIntl.of(context)!.more_report_bug_feature, AppIntl.of(context)!.more_report_bug_feature_subtitle, - Icons.design_services, + Icons.design_services_outlined, const Color.fromRGBO(63, 219, 251, 1), const Color.fromRGBO(14, 127, 188, 1), ), diff --git a/lib/features/more/more_view.dart b/lib/features/more/more_view.dart index 520d4189d..5ed6bbc89 100644 --- a/lib/features/more/more_view.dart +++ b/lib/features/more/more_view.dart @@ -105,7 +105,8 @@ class _MoreViewState extends State { title: Text(AppIntl.of(context)!.more_report_bug), leading: _buildDiscoveryFeatureDescriptionWidget( context, - getProperIconAccordingToTheme(Icons.bug_report), + getProperIconAccordingToTheme( + Icons.bug_report_outlined), DiscoveryIds.detailsMoreBugReport, model), onTap: () { @@ -114,7 +115,7 @@ class _MoreViewState extends State { }), ListTile( title: Text(AppIntl.of(context)!.in_app_review_title), - leading: const Icon(Icons.rate_review), + leading: const Icon(Icons.rate_review_outlined), onTap: () { _analyticsService.logEvent(tag, "Rate us clicked"); MoreViewModel.launchInAppReview(); @@ -133,7 +134,7 @@ class _MoreViewState extends State { }), ListTile( title: Text(AppIntl.of(context)!.more_open_source_licenses), - leading: const Icon(Icons.code), + leading: const Icon(Icons.code_outlined), onTap: () { _analyticsService.logEvent(tag, "Rate us clicked"); Navigator.of(context).push(PageRouteBuilder( @@ -158,7 +159,7 @@ class _MoreViewState extends State { if (model.privacyPolicyToggle) ListTile( title: Text(AppIntl.of(context)!.privacy_policy), - leading: const Icon(Icons.privacy_tip), + leading: const Icon(Icons.privacy_tip_outlined), onTap: () { _analyticsService.logEvent( tag, "Confidentiality clicked"); @@ -168,7 +169,8 @@ class _MoreViewState extends State { title: Text(AppIntl.of(context)!.need_help), leading: _buildDiscoveryFeatureDescriptionWidget( context, - getProperIconAccordingToTheme(Icons.question_answer), + getProperIconAccordingToTheme( + Icons.question_answer_outlined), DiscoveryIds.detailsMoreFaq, model), onTap: () { @@ -181,7 +183,7 @@ class _MoreViewState extends State { title: Text(AppIntl.of(context)!.settings_title), leading: _buildDiscoveryFeatureDescriptionWidget( context, - getProperIconAccordingToTheme(Icons.settings), + getProperIconAccordingToTheme(Icons.settings_outlined), DiscoveryIds.detailsMoreSettings, model), onTap: () { @@ -190,7 +192,7 @@ class _MoreViewState extends State { }), ListTile( title: Text(AppIntl.of(context)!.more_log_out), - leading: const Icon(Icons.logout), + leading: const Icon(Icons.logout_outlined), onTap: () => Navigator.of(context).push( PageRouteBuilder( pageBuilder: (context, _, __) => AlertDialog( diff --git a/lib/features/schedule/schedule_view.dart b/lib/features/schedule/schedule_view.dart index f4d64e461..7fe9a7e03 100644 --- a/lib/features/schedule/schedule_view.dart +++ b/lib/features/schedule/schedule_view.dart @@ -517,7 +517,7 @@ class _ScheduleViewState extends State if ((model.settings[PreferencesFlag.scheduleShowTodayBtn] as bool) == true) IconButton( - icon: const Icon(Icons.today), + icon: const Icon(Icons.today_outlined), onPressed: () => setState(() { if (!(model.settings[PreferencesFlag.scheduleListView] as bool)) { @@ -535,7 +535,7 @@ class _ScheduleViewState extends State })), _buildDiscoveryFeatureDescriptionWidget( context, - Icons.settings, + Icons.settings_outlined, model, ), ]; @@ -559,7 +559,7 @@ class _ScheduleViewState extends State pulseDuration: const Duration(seconds: 5), onComplete: () => model.discoveryCompleted(), child: IconButton( - icon: const Icon(Icons.settings), + icon: const Icon(Icons.settings_outlined), onPressed: () async { _analyticsService.logEvent(tag, "Settings clicked"); await showModalBottomSheet( diff --git a/pubspec.yaml b/pubspec.yaml index 26d0d52f4..3139a79b6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: The 4th generation of ÉTSMobile, the main gateway between the Éco # pub.dev using `pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 4.44.0+1 +version: 4.45.0+1 environment: sdk: '>=3.3.0 <4.0.0' diff --git a/test/ui/views/goldenFiles/newsDetailsView_1.png b/test/ui/views/goldenFiles/newsDetailsView_1.png index 1bfdf664fbd76e1fd7c1d51cd29d3c3d5188bb44..ed356455abde0c0ecfc52251aa695799bbb0935d 100644 GIT binary patch literal 5218 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 literal 5228 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 z