From 7f47a9b61dcb374e5f51d1a6659cdaf02d0bfe87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kowali=C5=84ski?= Date: Mon, 22 Jul 2024 20:45:25 +0200 Subject: [PATCH 1/8] feat: set up total lints --- analysis_options.yaml | 19 +------------------ .../department_details.dart | 2 +- .../department_study_circle_section.dart | 2 +- pubspec.yaml | 1 + 4 files changed, 4 insertions(+), 20 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 62ba2c2b..20f384c8 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -5,26 +5,9 @@ # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be # invoked from the command line by running `flutter analyze`. -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml +include: package:total_lints/app.yaml linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at https://dart.dev/lints. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. rules: prefer_relative_imports: true avoid_relative_lib_imports: true - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/lib/features/department_details/department_details.dart b/lib/features/department_details/department_details.dart index e27dab13..17f6ee16 100644 --- a/lib/features/department_details/department_details.dart +++ b/lib/features/department_details/department_details.dart @@ -30,7 +30,7 @@ class DepartmentDetails extends StatelessWidget { } class _DepartmentDetailsDataView extends ConsumerWidget { - const _DepartmentDetailsDataView({Key? key}); + const _DepartmentDetailsDataView(); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/lib/features/department_details/widgets/department_study_circle_section.dart b/lib/features/department_details/widgets/department_study_circle_section.dart index 5746271c..df1ec086 100644 --- a/lib/features/department_details/widgets/department_study_circle_section.dart +++ b/lib/features/department_details/widgets/department_study_circle_section.dart @@ -38,7 +38,7 @@ class DepartmentsStudyCirclesSection extends ConsumerWidget { class _StudyCirclesList extends ConsumerWidget { final List studyCircles; - const _StudyCirclesList({super.key, required this.studyCircles}); + const _StudyCirclesList({required this.studyCircles}); static void goToDetailView(WidgetRef ref, String id) { ref.read(navigatorProvider).navigateToStudyCircleDetails(id); diff --git a/pubspec.yaml b/pubspec.yaml index 33d9612c..f02a62bf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -73,6 +73,7 @@ dev_dependencies: envied_generator: ^0.5.4+1 graphql_codegen: ^0.14.0 flutter_gen_runner: ^5.6.0 + total_lints: ^3.4.0 dependency_overrides: analyzer: ^6.5.0 From cddb669c8eb6f6cff31155dea27c756d514a3b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kowali=C5=84ski?= Date: Mon, 22 Jul 2024 20:52:14 +0200 Subject: [PATCH 2/8] fix(linter): exclude generated files --- analysis_options.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/analysis_options.yaml b/analysis_options.yaml index 20f384c8..d8b6ebcc 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -11,3 +11,13 @@ linter: rules: prefer_relative_imports: true avoid_relative_lib_imports: true + +analyzer: + exclude: + - "**/*.g.dart" + - "**/*.freezed.dart" + - "**/*.mocks.dart" + - "**/*.gform.dart" + - "**/*.tailor.dart" + - "**/*.gen.dart" + - "**/*.graphql.dart" From 83691bd593795e81e21262a8e1af3b925afaf003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kowali=C5=84ski?= Date: Mon, 22 Jul 2024 21:10:16 +0200 Subject: [PATCH 3/8] refactor(icons): exclude generated icons files from linter --- analysis_options.yaml | 3 +++ lib/config/nav_bar_config.dart | 4 ++-- ...r_icon_icons.dart => bottom_nav_bar_icon_icons.icons.dart} | 0 ...king_icons_icons.dart => i_parking_icons_icons.icons.dart} | 0 lib/features/iparking/widgets/parking_wide_tile_card.dart | 2 +- .../map_view/widgets/bottom_scroll_sheet/navigate_button.dart | 2 +- pubspec.yaml | 1 + 7 files changed, 8 insertions(+), 4 deletions(-) rename lib/features/bottom_nav_bar/{bottom_nav_bar_icon_icons.dart => bottom_nav_bar_icon_icons.icons.dart} (100%) rename lib/features/iparking/widgets/{i_parking_icons_icons.dart => i_parking_icons_icons.icons.dart} (100%) diff --git a/analysis_options.yaml b/analysis_options.yaml index d8b6ebcc..77e6560c 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -11,6 +11,8 @@ linter: rules: prefer_relative_imports: true avoid_relative_lib_imports: true + prefer_single_quotes: false + prefer_int_literals: false analyzer: exclude: @@ -21,3 +23,4 @@ analyzer: - "**/*.tailor.dart" - "**/*.gen.dart" - "**/*.graphql.dart" + - "**/*.icons.dart" diff --git a/lib/config/nav_bar_config.dart b/lib/config/nav_bar_config.dart index a2630f1e..626525ed 100644 --- a/lib/config/nav_bar_config.dart +++ b/lib/config/nav_bar_config.dart @@ -1,8 +1,8 @@ import 'package:enum_map/enum_map.dart'; import 'package:flutter/material.dart'; -import '../features/iparking/widgets/i_parking_icons_icons.dart'; -import '../features/bottom_nav_bar/bottom_nav_bar_icon_icons.dart'; +import '../features/iparking/widgets/i_parking_icons_icons.icons.dart'; +import '../features/bottom_nav_bar/bottom_nav_bar_icon_icons.icons.dart'; part 'nav_bar_config.g.dart'; diff --git a/lib/features/bottom_nav_bar/bottom_nav_bar_icon_icons.dart b/lib/features/bottom_nav_bar/bottom_nav_bar_icon_icons.icons.dart similarity index 100% rename from lib/features/bottom_nav_bar/bottom_nav_bar_icon_icons.dart rename to lib/features/bottom_nav_bar/bottom_nav_bar_icon_icons.icons.dart diff --git a/lib/features/iparking/widgets/i_parking_icons_icons.dart b/lib/features/iparking/widgets/i_parking_icons_icons.icons.dart similarity index 100% rename from lib/features/iparking/widgets/i_parking_icons_icons.dart rename to lib/features/iparking/widgets/i_parking_icons_icons.icons.dart diff --git a/lib/features/iparking/widgets/parking_wide_tile_card.dart b/lib/features/iparking/widgets/parking_wide_tile_card.dart index cca8caf0..8ca18773 100644 --- a/lib/features/iparking/widgets/parking_wide_tile_card.dart +++ b/lib/features/iparking/widgets/parking_wide_tile_card.dart @@ -5,7 +5,7 @@ import '../../../theme/app_theme.dart'; import '../../../theme/iparking_theme.dart'; import '../../iparking_chart/chart_widget.dart'; import '../models/parking_model.dart'; -import 'i_parking_icons_icons.dart'; +import 'i_parking_icons_icons.icons.dart'; class ParkingWideTileCard extends StatelessWidget { const ParkingWideTileCard({ diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart index af0a6e4d..02a49e5d 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart @@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../config/map_view_config.dart'; import '../../../../theme/app_theme.dart'; import '../../../../utils/context_extensions.dart'; -import '../../../iparking/widgets/i_parking_icons_icons.dart'; +import '../../../iparking/widgets/i_parking_icons_icons.icons.dart'; import '../../controllers/controllers_set.dart'; import '../map_config.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index f02a62bf..851a0c66 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -56,6 +56,7 @@ dependencies: fl_chart: ^0.67.0 permission_handler: ^11.3.1 flutter_widget_from_html_core: ^0.14.12 + flutter_gen: ^5.6.0 dev_dependencies: flutter_test: From 13f406b457c66474d27a09fe6e350570bb45d7f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kowali=C5=84ski?= Date: Wed, 24 Jul 2024 22:14:34 +0200 Subject: [PATCH 4/8] fix(linter): adjust some rules --- analysis_options.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 77e6560c..08bb4965 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -12,7 +12,10 @@ linter: prefer_relative_imports: true avoid_relative_lib_imports: true prefer_single_quotes: false - prefer_int_literals: false + prefer_double_quotes: true # I hate single quotes + use_setters_to_change_properties: false + lines_longer_than_80_chars: false # I'd love to be able to set here some other number, but 80 is too low + sort_pub_dependencies: false analyzer: exclude: From 71fc2f907e6d1f5bc257143cda514014e9bdbca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kowali=C5=84ski?= Date: Wed, 24 Jul 2024 22:14:45 +0200 Subject: [PATCH 5/8] refactor: apply linter fixes --- lib/api_base/directus_assets_url.dart | 2 +- lib/api_base/gql_client_provider.dart | 8 +- lib/api_base/hive_init.dart | 8 +- .../ttl/local_timestamp_repository.dart | 16 ++-- lib/api_base/ttl/ttl_service.dart | 14 +-- lib/api_base/ttl/ttl_timestamp.dart | 10 +-- lib/api_base/watch_query_adapter.dart | 12 +-- lib/config/api_base_config.dart | 6 +- lib/config/map_view_config.dart | 4 +- lib/config/nav_bar_config.dart | 10 +-- lib/config/navigator_config.dart | 14 +-- lib/config/routes.dart | 8 +- lib/config/ttl_config.dart | 10 +-- lib/config/ui_config.dart | 26 +++--- lib/config/url_icons.dart | 2 +- .../model/academic_calendar_data.dart | 10 +-- .../model/academic_day.dart | 4 +- .../model/academic_week_exception.dart | 10 +-- .../model/weekday_enum.dart | 2 +- .../repository/academic_calendar_repo.dart | 10 +-- .../utils/counter_digits.dart | 8 +- .../utils/localize_academic_day.dart | 8 +- .../countdown_widget/digits_widgets.dart | 11 ++- .../exam_session_countdown.dart | 18 ++-- .../widgets/home_screen_greeting.dart | 18 ++-- .../bottom_nav_bar/bottom_nav_bar.dart | 56 ++++++------ .../bottom_nav_bar_controller.dart | 10 +-- lib/features/buildings_map/building_tile.dart | 20 ++--- .../buildings_map/buildings_view.dart | 22 ++--- lib/features/buildings_map/controllers.dart | 20 ++--- lib/features/buildings_map/utils.dart | 2 +- .../department_details.dart | 55 ++++++------ .../department_details_repository.dart | 25 ++++-- .../utils/address_formatter.dart | 14 +-- .../utils/department_details_gradient.dart | 14 ++- .../widgets/department_details_loading.dart | 17 ++-- .../department_study_circle_section.dart | 83 +++++++++-------- .../widgets/fields_of_study_section.dart | 26 +++--- .../departments_tab/departments_tab.dart | 52 ++++++----- .../departments_tab_controller.dart | 8 +- .../widgets/department_card.dart | 14 +-- .../widgets/departments_list_loading.dart | 6 +- lib/features/guide/guide_view_template.dart | 18 ++-- .../guide/widgets/about_us/about_us_tab.dart | 34 +++---- .../about_us/models/about_us_details.dart | 10 +-- .../widgets/about_us/models/member_data.dart | 4 +- .../repository/about_us_repository.dart | 12 +-- .../widgets/about_us/utils/convert_html.dart | 18 ++-- .../about_us/widgets/desription_section.dart | 16 ++-- .../about_us/widgets/links_section.dart | 18 ++-- .../about_us/widgets/section_header.dart | 6 +- .../about_us/widgets/team_section.dart | 40 ++++----- lib/features/home_view/home_view.dart | 22 ++--- .../infos_preview_repository.dart | 12 +-- .../buildings_section/building_card.dart | 12 +-- .../buildings_section/buildings_section.dart | 42 ++++----- .../departments_section/deparment_box.dart | 18 ++-- .../department_section.dart | 49 +++++----- .../big_scrollable_section_loading.dart | 10 +-- ...orizontal_rectangular_section_loading.dart | 8 +- .../scrollable_section_loading.dart | 8 +- .../home_view/widgets/logo_app_bar.dart | 15 ++-- .../home_view/widgets/news_section.dart | 86 +++++++++--------- lib/features/home_view/widgets/paddings.dart | 8 +- .../home_view/widgets/parking_section.dart | 40 ++++----- .../widgets/study_circles_section.dart | 89 ++++++++++--------- .../iparking/api_client/iparking_client.dart | 6 +- .../api_client/iparking_commands.dart | 12 +-- lib/features/iparking/controllers.dart | 18 ++-- .../iparking/models/parking_model.dart | 18 ++-- lib/features/iparking/parking_view.dart | 22 ++--- .../iparking/repositories/parkings_repo.dart | 18 ++-- .../iparking/widgets/offline_parkings.dart | 10 +-- .../iparking/widgets/parking_tile.dart | 14 +-- .../widgets/parking_wide_tile_card.dart | 22 ++--- .../chart_elements/chart_border.dart | 6 +- .../chart_elements/chart_grid.dart | 6 +- .../chart_elements/chart_line.dart | 11 ++- .../chart_elements/labels_bottom.dart | 8 +- .../chart_elements/labels_left.dart | 8 +- lib/features/iparking_chart/chart_widget.dart | 29 +++--- .../models/chart_data_model.dart | 2 +- .../iparking_chart/models/chart_point.dart | 10 +-- .../iparking_chart/models/hour_label.dart | 6 +- .../repositories/chart_repo.dart | 18 ++-- .../iparking_chart/utils/chart_utils.dart | 14 +-- .../utils/range_hour_points.dart | 4 +- .../iparking_chart/widgets/ichart.dart | 24 ++--- .../widgets/reversed_label.dart | 6 +- .../controllers/active_map_marker_cntrl.dart | 6 +- .../controllers/bottom_sheet_controller.dart | 11 +-- .../map_view/controllers/controllers_set.dart | 10 +-- .../map_view/controllers/map_controller.dart | 24 ++--- .../controllers/map_data_controller.dart | 6 +- lib/features/map_view/map_view.dart | 38 ++++---- .../utils/google_maps_link_utils.dart | 10 +-- .../location_permission_status_provider.dart | 7 +- .../map_view/utils/map_marker_utils.dart | 18 ++-- .../bottom_scroll_sheet.dart | 25 +++--- .../bottom_scroll_sheet/data_list.dart | 49 +++++----- .../data_list_loading.dart | 6 +- .../bottom_scroll_sheet/drag_handle.dart | 13 +-- .../map_view_pop_behaviour.dart | 12 +-- .../bottom_scroll_sheet/navigate_button.dart | 18 ++-- .../sheet_layout_scheme.dart | 18 ++-- lib/features/map_view/widgets/map_config.dart | 22 +++-- lib/features/map_view/widgets/map_widget.dart | 35 ++++---- .../navigator/detail_view_navigator.dart | 26 +++--- .../navigator/navigator/nested_navigator.dart | 20 ++--- .../navigator/tab_bar_navigator.dart | 12 +-- .../page_routes/detail_page_route.dart | 14 +-- .../page_routes/tabbar_page_route.dart | 24 ++--- .../navigator/root_navigator_widget.dart | 12 +-- .../utils/android_pop_bug_workaround.dart | 14 +-- .../navigator/utils/extract_tabbar_arg.dart | 4 +- .../utils/selected_tab_observer.dart | 6 +- .../offline_messages/messages_config.dart | 6 +- .../widgets/general_offline_message.dart | 14 +-- .../widgets/grapgql_offline_message.dart | 12 +-- lib/features/splash_screen/splash_screen.dart | 8 +- .../splash_screen_controller.dart | 29 +++--- .../widgets/fade_in_gradient_animation.dart | 4 +- .../widgets/fade_in_splash_gradient.dart | 10 +-- .../widgets/flutter_splash_screen.dart | 10 +-- .../scientific_circles_tab_controller.dart | 28 +++--- .../repositories/selected_tag_controller.dart | 6 +- .../repositories/tags_repository.dart | 16 ++-- .../scientific_circles_tab.dart | 28 +++--- .../widgets/ensure_visible_tags.dart | 14 +-- .../widgets/scientific_circle_card.dart | 21 +++-- .../widgets/scientific_circle_loading.dart | 6 +- .../widgets/scientific_circles_list.dart | 54 +++++------ .../widgets/tags_loading.dart | 8 +- .../widgets/tags_row.dart | 26 +++--- .../repository/study_circle_repository.dart | 12 +-- .../study_circle_details.dart | 57 ++++++------ .../details_screen_about_us_section.dart | 12 +-- .../widgets/details_screen_app_bar.dart | 8 +- .../about_us_section_loading.dart | 8 +- lib/main.dart | 20 ++--- .../buildings_repository/building_model.dart | 6 +- .../map_buildings_repo.dart | 14 +-- .../departments_extra_params_ext.dart | 14 ++- .../departments_repository.dart | 12 +-- .../scientific_circles_repository.dart | 17 ++-- lib/theme/about_us_theme.dart | 8 +- lib/theme/app_color_theme.dart | 10 +-- lib/theme/app_text_theme.dart | 10 +-- lib/theme/app_theme.dart | 16 ++-- lib/theme/colors.dart | 9 +- lib/theme/greeting_theme.dart | 8 +- lib/theme/hex_color.dart | 6 +- lib/theme/iparking_theme.dart | 12 +-- lib/theme/typography.dart | 6 +- lib/utils/calc_lines.dart | 4 +- lib/utils/colors_sort.dart | 2 +- lib/utils/context_extensions.dart | 6 +- lib/utils/determine_icon.dart | 6 +- lib/utils/launch_url_util.dart | 4 +- lib/utils/watch_locale.dart | 14 +-- lib/widgets/big_preview_card.dart | 26 +++--- lib/widgets/date_chip.dart | 16 ++-- .../details_screen_contact_section.dart | 42 +++++---- .../details_screen_sliver_header_section.dart | 12 +-- lib/widgets/dual_text_max_lines.dart | 42 +++++---- .../contact_section_loading.dart | 10 +-- .../header_section_loading.dart | 13 +-- .../scrolable_loader_builder.dart | 4 +- .../loading_widgets/shimmer_loading.dart | 16 ++-- .../simple_previews/preview_card_loading.dart | 4 +- .../preview_text_prototype.dart | 2 +- .../big_preview_card_loading.dart | 14 +-- .../specific_imitations/button_loading.dart | 6 +- .../wide_tile_loading.dart | 12 +-- lib/widgets/my_cached_image.dart | 10 +-- lib/widgets/my_error_widget.dart | 12 +-- lib/widgets/my_icon.dart | 6 +- lib/widgets/my_text_button.dart | 6 +- lib/widgets/search_box_app_bar.dart | 8 +- lib/widgets/search_widget.dart | 22 ++--- lib/widgets/subsection_header.dart | 12 +-- lib/widgets/tile_splash.dart | 2 +- lib/widgets/wide_tile_card.dart | 77 +++++++++------- pubspec.yaml | 4 +- test/widget_test.dart | 16 ++-- 185 files changed, 1559 insertions(+), 1476 deletions(-) diff --git a/lib/api_base/directus_assets_url.dart b/lib/api_base/directus_assets_url.dart index 082215b4..97eacbe8 100644 --- a/lib/api_base/directus_assets_url.dart +++ b/lib/api_base/directus_assets_url.dart @@ -1,4 +1,4 @@ -import '../config/api_base_config.dart'; +import "../config/api_base_config.dart"; extension DirectusAssetsUrl on String { String get directusUrl { diff --git a/lib/api_base/gql_client_provider.dart b/lib/api_base/gql_client_provider.dart index 89d441a9..78257ce4 100644 --- a/lib/api_base/gql_client_provider.dart +++ b/lib/api_base/gql_client_provider.dart @@ -1,8 +1,8 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:graphql/client.dart'; +import "package:flutter/foundation.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:graphql/client.dart"; -import '../config/api_base_config.dart'; +import "../config/api_base_config.dart"; final _hiveCacheBoxProvider = Provider((ref) async { if (kIsWeb) return GraphQLCache(); // Normal in memory cache diff --git a/lib/api_base/hive_init.dart b/lib/api_base/hive_init.dart index b758e750..bfd2917a 100644 --- a/lib/api_base/hive_init.dart +++ b/lib/api_base/hive_init.dart @@ -1,7 +1,7 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; -import 'package:graphql/client.dart'; -import 'package:path_provider/path_provider.dart'; +import "package:flutter/foundation.dart"; +import "package:flutter/widgets.dart"; +import "package:graphql/client.dart"; +import "package:path_provider/path_provider.dart"; Future initHiveForGraphqlCache() async { WidgetsFlutterBinding.ensureInitialized(); diff --git a/lib/api_base/ttl/local_timestamp_repository.dart b/lib/api_base/ttl/local_timestamp_repository.dart index 5ae1e082..75ef72be 100644 --- a/lib/api_base/ttl/local_timestamp_repository.dart +++ b/lib/api_base/ttl/local_timestamp_repository.dart @@ -1,11 +1,11 @@ -import 'package:graphql/client.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; -import 'package:shared_preferences/shared_preferences.dart'; +import "package:graphql/client.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; +import "package:shared_preferences/shared_preferences.dart"; -import '../../config/api_base_config.dart'; -import '../../config/ttl_config.dart'; -import '../../utils/timestamp.dart'; -import 'ttl_timestamp.dart'; +import "../../config/api_base_config.dart"; +import "../../config/ttl_config.dart"; +import "../../utils/timestamp.dart"; +import "ttl_timestamp.dart"; part "local_timestamp_repository.g.dart"; @@ -32,7 +32,7 @@ class LocalTimestampRepo { @Riverpod(keepAlive: true) Future _prefs(_PrefsRef ref) async { - return await SharedPreferences.getInstance(); + return SharedPreferences.getInstance(); } @riverpod diff --git a/lib/api_base/ttl/ttl_service.dart b/lib/api_base/ttl/ttl_service.dart index a1f0a533..4fbd9720 100644 --- a/lib/api_base/ttl/ttl_service.dart +++ b/lib/api_base/ttl/ttl_service.dart @@ -1,12 +1,12 @@ -import 'dart:async'; +import "dart:async"; -import 'package:graphql/client.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:graphql/client.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import 'local_timestamp_repository.dart'; -import '../../config/ttl_config.dart'; +import "../../config/ttl_config.dart"; +import "local_timestamp_repository.dart"; -part 'ttl_service.g.dart'; +part "ttl_service.g.dart"; @riverpod class TtlService extends _$TtlService { @@ -24,7 +24,7 @@ class TtlService extends _$TtlService { ref.watch(localTimestampRepoProvider.call(key).future); Future> interceptAndSaveTimestamps( - QueryResult event) async { + QueryResult event,) async { if (event.source == QueryResultSource.network) { final repo = await repository; await repo.saveTimestamp(event); diff --git a/lib/api_base/ttl/ttl_timestamp.dart b/lib/api_base/ttl/ttl_timestamp.dart index 0229cee5..b105662c 100644 --- a/lib/api_base/ttl/ttl_timestamp.dart +++ b/lib/api_base/ttl/ttl_timestamp.dart @@ -1,11 +1,11 @@ -import '../../utils/timestamp.dart'; -import '../../config/ttl_config.dart'; +import "../../config/ttl_config.dart"; +import "../../utils/timestamp.dart"; class TimestampTtl extends Timestamp { TimestampTtl.nil(this.key) : super.nil(); - TimestampTtl.from(DateTime? ts, this.key) : super.from(ts); - TimestampTtl.tryParse(String? formattedString, this.key) - : super.tryParse(formattedString); + TimestampTtl.from(super.ts, this.key) : super.from(); + TimestampTtl.tryParse(super.formattedString, this.key) + : super.tryParse(); final TtlKey key; diff --git a/lib/api_base/watch_query_adapter.dart b/lib/api_base/watch_query_adapter.dart index 867414d2..943553dc 100644 --- a/lib/api_base/watch_query_adapter.dart +++ b/lib/api_base/watch_query_adapter.dart @@ -1,9 +1,9 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:graphql/client.dart'; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:graphql/client.dart"; -import 'gql_client_provider.dart'; -import '../config/ttl_config.dart'; -import 'ttl/ttl_service.dart'; +import "../config/ttl_config.dart"; +import "gql_client_provider.dart"; +import "ttl/ttl_service.dart"; class GqlOfflineException implements Exception { const GqlOfflineException(this.ttlKey); @@ -41,7 +41,7 @@ extension _WatchQueryStreamAdapter on Ref { extension TTLWatchQueryAdapter on AutoDisposeStreamProviderRef { Stream watchQueryWithCache( - WatchQueryOptions watchQueryOptions, TtlKey ttlKey) async* { + WatchQueryOptions watchQueryOptions, TtlKey ttlKey,) async* { final apiClient = await watch(gqlClientProvider); final ttlService = ttlServiceProvider.call(ttlKey); final ttlFetchPolicy = await watch(ttlService.future); diff --git a/lib/config/api_base_config.dart b/lib/config/api_base_config.dart index a2079a7c..85b0b398 100644 --- a/lib/config/api_base_config.dart +++ b/lib/config/api_base_config.dart @@ -1,6 +1,6 @@ -import 'package:envied/envied.dart'; +import "package:envied/envied.dart"; -part 'api_base_config.g.dart'; +part "api_base_config.g.dart"; abstract class ApiBaseConfig { static const hiveCacheBoxName = "hiveCacheBoxForDirectusGraphQL"; @@ -9,7 +9,7 @@ abstract class ApiBaseConfig { } @Envied( - path: '.env', + path: ".env", obfuscate: true, useConstantCase: true, requireEnvFile: true, diff --git a/lib/config/map_view_config.dart b/lib/config/map_view_config.dart index 9450d223..ab6d24b7 100644 --- a/lib/config/map_view_config.dart +++ b/lib/config/map_view_config.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import "package:flutter/material.dart"; +import "package:google_maps_flutter/google_maps_flutter.dart"; typedef MapSheetSize = ({ double recomendedSheetHeight, diff --git a/lib/config/nav_bar_config.dart b/lib/config/nav_bar_config.dart index 626525ed..2aef1bc2 100644 --- a/lib/config/nav_bar_config.dart +++ b/lib/config/nav_bar_config.dart @@ -1,10 +1,10 @@ -import 'package:enum_map/enum_map.dart'; -import 'package:flutter/material.dart'; +import "package:enum_map/enum_map.dart"; +import "package:flutter/material.dart"; -import '../features/iparking/widgets/i_parking_icons_icons.icons.dart'; -import '../features/bottom_nav_bar/bottom_nav_bar_icon_icons.icons.dart'; +import "../features/bottom_nav_bar/bottom_nav_bar_icon_icons.icons.dart"; +import "../features/iparking/widgets/i_parking_icons_icons.icons.dart"; -part 'nav_bar_config.g.dart'; +part "nav_bar_config.g.dart"; @unmodifiableEnumMap enum NavBarEnum { diff --git a/lib/config/navigator_config.dart b/lib/config/navigator_config.dart index 777a53d0..3a893b7b 100644 --- a/lib/config/navigator_config.dart +++ b/lib/config/navigator_config.dart @@ -1,10 +1,10 @@ -import '../features/buildings_map/buildings_view.dart'; -import '../features/departments_tab/departments_tab.dart'; -import '../features/guide/guide_view_template.dart'; -import '../features/home_view/home_view.dart'; -import '../features/iparking/parking_view.dart'; -import '../features/student_research_group_tab/scientific_circles_tab.dart'; -import 'nav_bar_config.dart'; +import "../features/buildings_map/buildings_view.dart"; +import "../features/departments_tab/departments_tab.dart"; +import "../features/guide/guide_view_template.dart"; +import "../features/home_view/home_view.dart"; +import "../features/iparking/parking_view.dart"; +import "../features/student_research_group_tab/scientific_circles_tab.dart"; +import "nav_bar_config.dart"; abstract class NavigatorConfig { static const initialTab = NavBarEnum.home; diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 31196e4c..bc1ef840 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -1,8 +1,8 @@ abstract class AppRoutes { AppRoutes._(); - static const root = '/'; - static const studyCircleDetails = 'study-circle-details'; - static const aboutUsDetail = 'about-us-detail'; - static const departmentDetails = 'department-details'; + static const root = "/"; + static const studyCircleDetails = "study-circle-details"; + static const aboutUsDetail = "about-us-detail"; + static const departmentDetails = "department-details"; } diff --git a/lib/config/ttl_config.dart b/lib/config/ttl_config.dart index a8898769..12ab70fa 100644 --- a/lib/config/ttl_config.dart +++ b/lib/config/ttl_config.dart @@ -1,7 +1,7 @@ -import 'package:enum_map/enum_map.dart'; -import 'package:flutter/foundation.dart'; +import "package:enum_map/enum_map.dart"; +import "package:flutter/foundation.dart"; -part 'ttl_config.g.dart'; +part "ttl_config.g.dart"; @unmodifiableEnumMap enum TtlKey { @@ -25,7 +25,7 @@ abstract class TtlStrategy { static const thirtyDays = kDebugMode ? Duration.zero : Duration(days: 30); static const _ttlDurations = UnmodifiableTtlKeyMap( - // TODO: specific values are yet ment to be accordingly adjusted + // TODO(simon-the-shark): specific values are yet ment to be accordingly adjusted. infosPreviewRepository: day, academicCalendarRepository: day, sciCirclesPreviewRepository: thirtyDays, @@ -34,7 +34,7 @@ abstract class TtlStrategy { mapBuildingsRepository: thirtyDays, departmentsRepository: thirtyDays, aboutUsRepository: thirtyDays, - departmentsDetailsRepository: thirtyDays + departmentsDetailsRepository: thirtyDays, ); static Duration get(TtlKey key) { diff --git a/lib/config/ui_config.dart b/lib/config/ui_config.dart index 1a504215..43410e35 100644 --- a/lib/config/ui_config.dart +++ b/lib/config/ui_config.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../features/iparking_chart/utils/range_hour_points.dart'; -import '../theme/hex_color.dart'; +import "../features/iparking_chart/utils/range_hour_points.dart"; +import "../theme/hex_color.dart"; abstract class MyAppConfig { static const title = "ToPwr"; @@ -19,8 +19,8 @@ abstract class CountdownConfig { } abstract class DepartmentsConfig { - static const defaultColorFirst = '#BFBEBE'; - static const defaultColorSecond = '#999898'; + static const defaultColorFirst = "#BFBEBE"; + static const defaultColorSecond = "#999898"; static const listSeparatorSize = 16.0; @@ -34,7 +34,7 @@ abstract class DepartmentsConfig { } abstract class DateChipConfig { - static const dateTimeFormat = 'dd.MM.yyyy'; + static const dateTimeFormat = "dd.MM.yyyy"; } abstract class HomeScreenConfig { @@ -44,8 +44,8 @@ abstract class HomeScreenConfig { static const squareCardTextShadow = [ Shadow( color: HexColor.consts(0x6621334D66), - blurRadius: 4.0, - offset: Offset(0.0, 2.0), + blurRadius: 4, + offset: Offset(0, 2), ), ]; } @@ -71,9 +71,9 @@ abstract class WideTileCardConfig { static const defaultActiveShadows = [ BoxShadow( color: Color.fromRGBO(250, 100, 101, 0.16), - blurRadius: 11.0, - spreadRadius: 6.0, - ) + blurRadius: 11, + spreadRadius: 6, + ), ]; } @@ -120,7 +120,7 @@ abstract class IParkingConfig { bottom: 16, right: 10, ); - static const extraIndentPadd = EdgeInsets.only(left: 2.0); + static const extraIndentPadd = EdgeInsets.only(left: 2); } abstract class ParkingChartConfig { @@ -129,7 +129,7 @@ abstract class ParkingChartConfig { } abstract class AboutUsConfig { - static const defaultLogoUrl = 'f0311a7b-8838-4f48-bbcd-9791549012b1.png'; + static const defaultLogoUrl = "f0311a7b-8838-4f48-bbcd-9791549012b1.png"; static const defaultPadding = 16.0; static const spacerHeight = 24.0; static const borderRadius = 8.0; diff --git a/lib/config/url_icons.dart b/lib/config/url_icons.dart index ea036f68..4b042389 100644 --- a/lib/config/url_icons.dart +++ b/lib/config/url_icons.dart @@ -1,4 +1,4 @@ -import '../gen/assets.gen.dart'; +import "../gen/assets.gen.dart"; abstract class IconsConfig { static final iconsPaths = { diff --git a/lib/features/academic_calendar_greeting/model/academic_calendar_data.dart b/lib/features/academic_calendar_greeting/model/academic_calendar_data.dart index a67566d9..543d6dd9 100644 --- a/lib/features/academic_calendar_greeting/model/academic_calendar_data.dart +++ b/lib/features/academic_calendar_greeting/model/academic_calendar_data.dart @@ -1,8 +1,8 @@ -import '../../../utils/datetime_utils.dart'; -import '../repository/academic_calendar_repo.dart'; -import 'academic_day.dart'; -import 'academic_week_exception.dart'; -import 'weekday_enum.dart'; +import "../../../utils/datetime_utils.dart"; +import "../repository/academic_calendar_repo.dart"; +import "academic_day.dart"; +import "academic_week_exception.dart"; +import "weekday_enum.dart"; extension AcademicCalendarDataExtraAttrs on AcademicCalendarData { bool isHolidays() { diff --git a/lib/features/academic_calendar_greeting/model/academic_day.dart b/lib/features/academic_calendar_greeting/model/academic_day.dart index 2f08d5f0..f37e46c6 100644 --- a/lib/features/academic_calendar_greeting/model/academic_day.dart +++ b/lib/features/academic_calendar_greeting/model/academic_day.dart @@ -1,6 +1,6 @@ -import 'package:freezed_annotation/freezed_annotation.dart'; +import "package:freezed_annotation/freezed_annotation.dart"; -import 'weekday_enum.dart'; +import "weekday_enum.dart"; part "academic_day.freezed.dart"; part "academic_day.g.dart"; diff --git a/lib/features/academic_calendar_greeting/model/academic_week_exception.dart b/lib/features/academic_calendar_greeting/model/academic_week_exception.dart index 79df9917..d1c9308f 100644 --- a/lib/features/academic_calendar_greeting/model/academic_week_exception.dart +++ b/lib/features/academic_calendar_greeting/model/academic_week_exception.dart @@ -1,9 +1,9 @@ -import 'package:collection/collection.dart'; +import "package:collection/collection.dart"; -import '../../../utils/datetime_utils.dart'; -import '../repository/academic_calendar_repo.dart'; -import 'academic_day.dart'; -import 'weekday_enum.dart'; +import "../../../utils/datetime_utils.dart"; +import "../repository/academic_calendar_repo.dart"; +import "academic_day.dart"; +import "weekday_enum.dart"; extension AcadWeekExceptionExtraAttrs on List { bool _checkIfThisIsToday(AcademicWeekException element) => diff --git a/lib/features/academic_calendar_greeting/model/weekday_enum.dart b/lib/features/academic_calendar_greeting/model/weekday_enum.dart index bb63cfe0..88ca7f9e 100644 --- a/lib/features/academic_calendar_greeting/model/weekday_enum.dart +++ b/lib/features/academic_calendar_greeting/model/weekday_enum.dart @@ -1,4 +1,4 @@ -import 'package:freezed_annotation/freezed_annotation.dart'; +import "package:freezed_annotation/freezed_annotation.dart"; @JsonEnum() enum WeekdayEnum { diff --git a/lib/features/academic_calendar_greeting/repository/academic_calendar_repo.dart b/lib/features/academic_calendar_greeting/repository/academic_calendar_repo.dart index 098c0445..4cb83ab3 100644 --- a/lib/features/academic_calendar_greeting/repository/academic_calendar_repo.dart +++ b/lib/features/academic_calendar_greeting/repository/academic_calendar_repo.dart @@ -1,10 +1,10 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../config/ttl_config.dart'; -import '../../../api_base/watch_query_adapter.dart'; -import 'getAcademicCalendar.graphql.dart'; +import "../../../api_base/watch_query_adapter.dart"; +import "../../../config/ttl_config.dart"; +import "getAcademicCalendar.graphql.dart"; -part 'academic_calendar_repo.g.dart'; +part "academic_calendar_repo.g.dart"; typedef AcademicCalendar = Query$GetAcademicCalendar; typedef AcademicCalendarData = Query$GetAcademicCalendar$AcademicCalendarData; diff --git a/lib/features/academic_calendar_greeting/utils/counter_digits.dart b/lib/features/academic_calendar_greeting/utils/counter_digits.dart index c01d5cb4..bfb53eff 100644 --- a/lib/features/academic_calendar_greeting/utils/counter_digits.dart +++ b/lib/features/academic_calendar_greeting/utils/counter_digits.dart @@ -1,8 +1,8 @@ -import 'dart:math'; +import "dart:math"; -import '../../../config/ui_config.dart'; -import '../../../utils/datetime_utils.dart'; -import '../repository/academic_calendar_repo.dart'; +import "../../../config/ui_config.dart"; +import "../../../utils/datetime_utils.dart"; +import "../repository/academic_calendar_repo.dart"; enum Digit { first, second, third } diff --git a/lib/features/academic_calendar_greeting/utils/localize_academic_day.dart b/lib/features/academic_calendar_greeting/utils/localize_academic_day.dart index ed7e420f..1242b1e2 100644 --- a/lib/features/academic_calendar_greeting/utils/localize_academic_day.dart +++ b/lib/features/academic_calendar_greeting/utils/localize_academic_day.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../utils/context_extensions.dart'; -import '../model/academic_day.dart'; -import '../model/weekday_enum.dart'; +import "../../../utils/context_extensions.dart"; +import "../model/academic_day.dart"; +import "../model/weekday_enum.dart"; extension LocalizeAcademicDay on AcademicDay { String localize(BuildContext context) { diff --git a/lib/features/academic_calendar_greeting/widgets/countdown_widget/digits_widgets.dart b/lib/features/academic_calendar_greeting/widgets/countdown_widget/digits_widgets.dart index cdc611e7..9f082509 100644 --- a/lib/features/academic_calendar_greeting/widgets/countdown_widget/digits_widgets.dart +++ b/lib/features/academic_calendar_greeting/widgets/countdown_widget/digits_widgets.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../config/ui_config.dart'; -import '../../../../theme/app_theme.dart'; -import '../../repository/academic_calendar_repo.dart'; -import '../../utils/counter_digits.dart'; +import "../../../../config/ui_config.dart"; +import "../../../../theme/app_theme.dart"; +import "../../repository/academic_calendar_repo.dart"; +import "../../utils/counter_digits.dart"; class DigitsRow extends StatelessWidget { const DigitsRow(this.calendarData, {super.key}); @@ -45,7 +45,6 @@ class IntBox extends StatelessWidget { color: Color(0x66c62d2e), offset: Offset(-1, 1), blurRadius: 4, - spreadRadius: 0, ), ], ), diff --git a/lib/features/academic_calendar_greeting/widgets/countdown_widget/exam_session_countdown.dart b/lib/features/academic_calendar_greeting/widgets/countdown_widget/exam_session_countdown.dart index 0e19179d..28d18894 100644 --- a/lib/features/academic_calendar_greeting/widgets/countdown_widget/exam_session_countdown.dart +++ b/lib/features/academic_calendar_greeting/widgets/countdown_widget/exam_session_countdown.dart @@ -1,12 +1,12 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../../theme/app_theme.dart'; -import '../../../../utils/context_extensions.dart'; -import '../../../../widgets/my_error_widget.dart'; -import '../../../home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart'; -import '../../repository/academic_calendar_repo.dart'; -import 'digits_widgets.dart'; +import "../../../../theme/app_theme.dart"; +import "../../../../utils/context_extensions.dart"; +import "../../../../widgets/my_error_widget.dart"; +import "../../../home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart"; +import "../../repository/academic_calendar_repo.dart"; +import "digits_widgets.dart"; class ExamSessionCountdown extends ConsumerWidget { const ExamSessionCountdown({super.key}); @@ -33,12 +33,10 @@ class ExamSessionCountdown extends ConsumerWidget { spreadRadius: 6, blurRadius: 11, color: Color(0x28fa6465), - offset: Offset(0, 0), ), ], ), child: Row( - crossAxisAlignment: CrossAxisAlignment.center, children: [ Padding( padding: const EdgeInsets.all(16), diff --git a/lib/features/academic_calendar_greeting/widgets/home_screen_greeting.dart b/lib/features/academic_calendar_greeting/widgets/home_screen_greeting.dart index a4590eed..2e4c2094 100644 --- a/lib/features/academic_calendar_greeting/widgets/home_screen_greeting.dart +++ b/lib/features/academic_calendar_greeting/widgets/home_screen_greeting.dart @@ -1,13 +1,13 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../theme/app_theme.dart'; -import '../../../utils/context_extensions.dart'; -import '../../../widgets/my_error_widget.dart'; -import '../../home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart'; -import '../model/academic_calendar_data.dart'; -import '../repository/academic_calendar_repo.dart'; -import '../utils/localize_academic_day.dart'; +import "../../../theme/app_theme.dart"; +import "../../../utils/context_extensions.dart"; +import "../../../widgets/my_error_widget.dart"; +import "../../home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart"; +import "../model/academic_calendar_data.dart"; +import "../repository/academic_calendar_repo.dart"; +import "../utils/localize_academic_day.dart"; class Greeting extends ConsumerWidget { const Greeting({ diff --git a/lib/features/bottom_nav_bar/bottom_nav_bar.dart b/lib/features/bottom_nav_bar/bottom_nav_bar.dart index d3789f91..4c80fee9 100644 --- a/lib/features/bottom_nav_bar/bottom_nav_bar.dart +++ b/lib/features/bottom_nav_bar/bottom_nav_bar.dart @@ -1,12 +1,12 @@ -import 'package:collection/collection.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:collection/collection.dart"; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../theme/app_theme.dart'; -import '../navigator/navigator/nested_navigator.dart'; -import '../navigator/navigator/tab_bar_navigator.dart'; -import 'bottom_nav_bar_controller.dart'; -import '../../config/nav_bar_config.dart'; +import "../../config/nav_bar_config.dart"; +import "../../theme/app_theme.dart"; +import "../navigator/navigator/nested_navigator.dart"; +import "../navigator/navigator/tab_bar_navigator.dart"; +import "bottom_nav_bar_controller.dart"; class BottomNavBar extends ConsumerWidget { const BottomNavBar({super.key}); @@ -16,25 +16,27 @@ class BottomNavBar extends ConsumerWidget { final selectedTab = ref.watch(bottomNavBarControllerProvider); final navigator = ref.watch(navigatorProvider); - return Container( - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(.08), - blurRadius: 20, - offset: const Offset(0, -1), - ), - ], - ), - child: BottomNavigationBar( - currentIndex: selectedTab.index, - onTap: (index) => navigator.changeTabBar(NavBarEnum.values[index]), - backgroundColor: context.colorTheme.greyLight, - showSelectedLabels: false, - showUnselectedLabels: false, - type: BottomNavigationBarType.fixed, - items: _NavigationBarItemsList(selectedTab, context), - )); + return DecoratedBox( + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(.08), + blurRadius: 20, + offset: const Offset(0, -1), + ), + ], + ), + child: BottomNavigationBar( + currentIndex: selectedTab.index, + onTap: (index) async => + navigator.changeTabBar(NavBarEnum.values[index]), + backgroundColor: context.colorTheme.greyLight, + showSelectedLabels: false, + showUnselectedLabels: false, + type: BottomNavigationBarType.fixed, + items: _NavigationBarItemsList(selectedTab, context), + ), + ); } } diff --git a/lib/features/bottom_nav_bar/bottom_nav_bar_controller.dart b/lib/features/bottom_nav_bar/bottom_nav_bar_controller.dart index fbd11b4f..b46d4848 100644 --- a/lib/features/bottom_nav_bar/bottom_nav_bar_controller.dart +++ b/lib/features/bottom_nav_bar/bottom_nav_bar_controller.dart @@ -1,10 +1,10 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../config/nav_bar_config.dart'; -import '../../config/navigator_config.dart'; -import '../navigator/utils/selected_tab_observer.dart'; +import "../../config/nav_bar_config.dart"; +import "../../config/navigator_config.dart"; +import "../navigator/utils/selected_tab_observer.dart"; -part 'bottom_nav_bar_controller.g.dart'; +part "bottom_nav_bar_controller.g.dart"; @Riverpod(keepAlive: true) class BottomNavBarController extends _$BottomNavBarController { diff --git a/lib/features/buildings_map/building_tile.dart b/lib/features/buildings_map/building_tile.dart index 4a1bf0d1..fb55c058 100644 --- a/lib/features/buildings_map/building_tile.dart +++ b/lib/features/buildings_map/building_tile.dart @@ -1,17 +1,17 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../api_base/directus_assets_url.dart'; -import '../../shared_repositories/buildings_repository/building_model.dart'; -import '../../theme/app_theme.dart'; -import '../../utils/context_extensions.dart'; -import '../../widgets/wide_tile_card.dart'; -import 'controllers.dart'; +import "../../api_base/directus_assets_url.dart"; +import "../../shared_repositories/buildings_repository/building_model.dart"; +import "../../theme/app_theme.dart"; +import "../../utils/context_extensions.dart"; +import "../../widgets/wide_tile_card.dart"; +import "controllers.dart"; class BuildingTile extends ConsumerWidget { const BuildingTile( - this.building, - this.isActive, { + this.building, { + required this.isActive, super.key, }); diff --git a/lib/features/buildings_map/buildings_view.dart b/lib/features/buildings_map/buildings_view.dart index e87099bb..dbed585b 100644 --- a/lib/features/buildings_map/buildings_view.dart +++ b/lib/features/buildings_map/buildings_view.dart @@ -1,14 +1,14 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:google_maps_flutter/google_maps_flutter.dart"; -import '../../config/map_view_config.dart'; -import '../../shared_repositories/buildings_repository/building_model.dart'; -import '../../utils/context_extensions.dart'; -import '../map_view/map_view.dart'; -import '../map_view/utils/map_marker_utils.dart'; -import 'building_tile.dart'; -import 'controllers.dart'; +import "../../config/map_view_config.dart"; +import "../../shared_repositories/buildings_repository/building_model.dart"; +import "../../utils/context_extensions.dart"; +import "../map_view/map_view.dart"; +import "../map_view/utils/map_marker_utils.dart"; +import "building_tile.dart"; +import "controllers.dart"; class BuildingMapView extends ConsumerWidget { const BuildingMapView({super.key}); @@ -23,7 +23,7 @@ class BuildingMapView extends ConsumerWidget { mapSheetSize: MapViewBottomSheetConfig.buildingsMapSheetSize, mapControllers: mapControllersBuildings, mapTileBuilder: BuildingTile.new, - markerBuilder: (item, ref, isActive) => Marker( + markerBuilder: (item, ref, {required isActive}) => Marker( consumeTapEvents: true, markerId: item.markerId, position: item.location, diff --git a/lib/features/buildings_map/controllers.dart b/lib/features/buildings_map/controllers.dart index 4a146197..079c320f 100644 --- a/lib/features/buildings_map/controllers.dart +++ b/lib/features/buildings_map/controllers.dart @@ -1,13 +1,13 @@ -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; - -import '../../shared_repositories/buildings_repository/building_model.dart'; -import '../../shared_repositories/buildings_repository/map_buildings_repo.dart'; -import '../map_view/controllers/active_map_marker_cntrl.dart'; -import '../map_view/controllers/controllers_set.dart'; -import '../map_view/controllers/map_controller.dart'; -import '../map_view/controllers/map_data_controller.dart'; -import 'utils.dart'; +import "package:google_maps_flutter/google_maps_flutter.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; + +import "../../shared_repositories/buildings_repository/building_model.dart"; +import "../../shared_repositories/buildings_repository/map_buildings_repo.dart"; +import "../map_view/controllers/active_map_marker_cntrl.dart"; +import "../map_view/controllers/controllers_set.dart"; +import "../map_view/controllers/map_controller.dart"; +import "../map_view/controllers/map_data_controller.dart"; +import "utils.dart"; part "controllers.g.dart"; diff --git a/lib/features/buildings_map/utils.dart b/lib/features/buildings_map/utils.dart index 72cc611c..79aa8e53 100644 --- a/lib/features/buildings_map/utils.dart +++ b/lib/features/buildings_map/utils.dart @@ -1,4 +1,4 @@ -import '../../config/map_view_config.dart'; +import "../../config/map_view_config.dart"; extension ContainsCaseUnsensitive on String? { bool containsUnsesitive(String str) { diff --git a/lib/features/department_details/department_details.dart b/lib/features/department_details/department_details.dart index 17f6ee16..0276ea4e 100644 --- a/lib/features/department_details/department_details.dart +++ b/lib/features/department_details/department_details.dart @@ -1,21 +1,22 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'widgets/department_details_loading.dart'; -import '../../config/ui_config.dart'; -import 'widgets/department_study_circle_section.dart'; -import 'widgets/fields_of_study_section.dart'; -import '../../api_base/directus_assets_url.dart'; -import '../../theme/app_theme.dart'; -import '../../utils/context_extensions.dart'; -import '../../utils/determine_icon.dart'; -import '../../utils/where_non_null_iterable.dart'; -import '../../widgets/my_error_widget.dart'; -import '../study_circle_details/widgets/details_screen_app_bar.dart'; -import '../../widgets/details_screen_contact_section.dart'; -import '../../widgets/details_screen_sliver_header_section.dart'; -import 'repositories/department_details_repository.dart'; -import '../department_details/utils/address_formatter.dart'; -import '../department_details/utils/department_details_gradient.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; + +import "../../api_base/directus_assets_url.dart"; +import "../../config/ui_config.dart"; +import "../../theme/app_theme.dart"; +import "../../utils/context_extensions.dart"; +import "../../utils/determine_icon.dart"; +import "../../utils/where_non_null_iterable.dart"; +import "../../widgets/details_screen_contact_section.dart"; +import "../../widgets/details_screen_sliver_header_section.dart"; +import "../../widgets/my_error_widget.dart"; +import "../department_details/utils/address_formatter.dart"; +import "../department_details/utils/department_details_gradient.dart"; +import "../study_circle_details/widgets/details_screen_app_bar.dart"; +import "repositories/department_details_repository.dart"; +import "widgets/department_details_loading.dart"; +import "widgets/department_study_circle_section.dart"; +import "widgets/fields_of_study_section.dart"; class DepartmentDetails extends StatelessWidget { const DepartmentDetails({super.key}); @@ -34,7 +35,7 @@ class _DepartmentDetailsDataView extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final itemId = ModalRoute.of(context)?.settings.arguments as String; + final itemId = ModalRoute.of(context)!.settings.arguments! as String; final state = ref.watch(departmentDetailsRepositoryProvider(itemId)); return switch (state) { AsyncLoading() => const DepartmentDetailsLoading(), @@ -46,19 +47,19 @@ class _DepartmentDetailsDataView extends ConsumerWidget { logoImageUrl: value?.Departments_by_id?.logo?.filename_disk?.directusUrl, backgroundImageUrl: null, - )), + ),), SliverList( delegate: SliverChildListDelegate([ const SizedBox(height: 8), Text( - value?.Departments_by_id?.name ?? '', + value?.Departments_by_id?.name ?? "", style: context.textTheme.headline, textAlign: TextAlign.center, maxLines: 2, ), const SizedBox(height: 12), Text( - value?.Departments_by_id?.address?.divideAddressInto3Lines ?? '', + value?.Departments_by_id?.address?.divideAddressInto3Lines ?? "", style: context.textTheme.body.copyWith(height: 1.2), textAlign: TextAlign.center, ), @@ -69,9 +70,9 @@ class _DepartmentDetailsDataView extends ConsumerWidget { .map((link) => UrlIconsModel( text: link.name, url: link.link, - )) + ),) .toList() ?? - List.empty()), + List.empty(),), FieldsOfStudySection( fieldsOfStudy: value ?.Departments_by_id?.fieldsOfStudies.whereNonNull @@ -81,9 +82,9 @@ class _DepartmentDetailsDataView extends ConsumerWidget { ), DepartmentsStudyCirclesSection( value?.Scientific_Circles.whereNonNull.toList() ?? - List.empty()), - ])) - ]), + List.empty(),), + ]),), + ],), }; } } diff --git a/lib/features/department_details/repositories/department_details_repository.dart b/lib/features/department_details/repositories/department_details_repository.dart index dfa74038..91ff7839 100644 --- a/lib/features/department_details/repositories/department_details_repository.dart +++ b/lib/features/department_details/repositories/department_details_repository.dart @@ -1,9 +1,9 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; -import '../../../api_base/watch_query_adapter.dart'; -import '../../../config/ttl_config.dart'; -import 'getDepartmentDetails.graphql.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; +import "../../../api_base/watch_query_adapter.dart"; +import "../../../config/ttl_config.dart"; +import "getDepartmentDetails.graphql.dart"; -part 'department_details_repository.g.dart'; +part "department_details_repository.g.dart"; typedef DepartmentDetails = Query$GetDepartmentDetails; typedef StudyCircles = Query$GetDepartmentDetails$Scientific_Circles; @@ -11,11 +11,18 @@ typedef DepartmentDetailsDetails = Query$GetDepartmentDetails$Departments_by_id; typedef _Vars = Variables$Query$GetDepartmentDetails; @riverpod Stream departmentDetailsRepository( - DepartmentDetailsRepositoryRef ref, String id) async* { + DepartmentDetailsRepositoryRef ref, + String id, +) async* { final stream = ref.watchQueryWithCache( - WatchOptions$Query$GetDepartmentDetails(eagerlyFetchResults: true, variables: _Vars(id: id, fid: id)), + WatchOptions$Query$GetDepartmentDetails( + eagerlyFetchResults: true, + variables: _Vars( + id: id, + fid: id, + ), + ), TtlKey.departmentsDetailsRepository, ); yield* stream.map((event) => event); - } - +} diff --git a/lib/features/department_details/utils/address_formatter.dart b/lib/features/department_details/utils/address_formatter.dart index fe321504..58017257 100644 --- a/lib/features/department_details/utils/address_formatter.dart +++ b/lib/features/department_details/utils/address_formatter.dart @@ -3,15 +3,15 @@ extension AddressFormatter on String { String get divideAddressInto3Lines { - final parts = split(' '); + final parts = split(" "); final postalCodeIndex = - parts.indexWhere((part) => RegExp(r'^\d{2}-\d{3}$').hasMatch(part)); + parts.indexWhere((part) => RegExp(r"^\d{2}-\d{3}$").hasMatch(part)); final streetStartIndex = - parts.indexWhere((part) => RegExp(r'^(ul\.|wyb\.|plac)').hasMatch(part)); - final postalCodeAndCity = parts.sublist(postalCodeIndex).join(' '); + parts.indexWhere((part) => RegExp(r"^(ul\.|wyb\.|plac)").hasMatch(part)); + final postalCodeAndCity = parts.sublist(postalCodeIndex).join(" "); final streetAddress = - parts.sublist(streetStartIndex, postalCodeIndex).join(' '); - final name = parts.sublist(0, streetStartIndex).join(' '); - return '$name\n$streetAddress\n$postalCodeAndCity'; + parts.sublist(streetStartIndex, postalCodeIndex).join(" "); + final name = parts.sublist(0, streetStartIndex).join(" "); + return "$name\n$streetAddress\n$postalCodeAndCity"; } } diff --git a/lib/features/department_details/utils/department_details_gradient.dart b/lib/features/department_details/utils/department_details_gradient.dart index d2ee6b27..b4b60401 100644 --- a/lib/features/department_details/utils/department_details_gradient.dart +++ b/lib/features/department_details/utils/department_details_gradient.dart @@ -1,21 +1,19 @@ -import 'package:flutter/material.dart'; -import '../../../config/ui_config.dart'; -import '../../../theme/hex_color.dart'; -import '../../../utils/colors_sort.dart'; -import '../repositories/department_details_repository.dart'; +import "package:flutter/material.dart"; +import "../../../config/ui_config.dart"; +import "../../../theme/hex_color.dart"; +import "../../../utils/colors_sort.dart"; +import "../repositories/department_details_repository.dart"; extension DepartmentsExtraParamsExt on DepartmentDetailsDetails { LinearGradient get gradient => LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, colors: [ HexColor( gradient_start ?? DepartmentsConfig.defaultColorFirst, ), HexColor( gradient_end ?? DepartmentsConfig.defaultColorSecond, - ) + ), ]..sortByLightness(), ); } diff --git a/lib/features/department_details/widgets/department_details_loading.dart b/lib/features/department_details/widgets/department_details_loading.dart index 77a86c9e..807ecfae 100644 --- a/lib/features/department_details/widgets/department_details_loading.dart +++ b/lib/features/department_details/widgets/department_details_loading.dart @@ -1,9 +1,10 @@ -import 'package:flutter/material.dart'; -import '../../../config/ui_config.dart'; -import '../../../widgets/loading_widgets/shimmer_loading.dart'; -import '../../home_view/widgets/loading_widgets/big_scrollable_section_loading.dart'; -import '../../../widgets/loading_widgets/contact_section_loading.dart'; -import '../../../widgets/loading_widgets/header_section_loading.dart'; +import "package:flutter/material.dart"; + +import "../../../config/ui_config.dart"; +import "../../../widgets/loading_widgets/contact_section_loading.dart"; +import "../../../widgets/loading_widgets/header_section_loading.dart"; +import "../../../widgets/loading_widgets/shimmer_loading.dart"; +import "../../home_view/widgets/loading_widgets/big_scrollable_section_loading.dart"; class DepartmentDetailsLoading extends StatelessWidget { const DepartmentDetailsLoading({super.key}); @@ -19,9 +20,9 @@ class DepartmentDetailsLoading extends StatelessWidget { SizedBox(height: DetailsScreenConfig.spacerHeight), ContactSectionLoading(), SizedBox(height: DetailsScreenConfig.spacerHeight), - BigScrollableSectionLoading() + BigScrollableSectionLoading(), ], ), ); } -} \ No newline at end of file +} diff --git a/lib/features/department_details/widgets/department_study_circle_section.dart b/lib/features/department_details/widgets/department_study_circle_section.dart index df1ec086..4bffeebe 100644 --- a/lib/features/department_details/widgets/department_study_circle_section.dart +++ b/lib/features/department_details/widgets/department_study_circle_section.dart @@ -1,19 +1,18 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../../api_base/directus_assets_url.dart'; -import '../../../config/nav_bar_config.dart'; -import '../../../config/ui_config.dart'; -import '../../../utils/context_extensions.dart'; -import '../../../widgets/big_preview_card.dart'; -import '../../../widgets/subsection_header.dart'; -import '../../home_view/widgets/paddings.dart'; -import '../../navigator/navigator/detail_view_navigator.dart'; -import '../../navigator/navigator/nested_navigator.dart'; -import '../../navigator/navigator/tab_bar_navigator.dart'; -import '../repositories/department_details_repository.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "../../../api_base/directus_assets_url.dart"; +import "../../../config/nav_bar_config.dart"; +import "../../../config/ui_config.dart"; +import "../../../utils/context_extensions.dart"; +import "../../../widgets/big_preview_card.dart"; +import "../../../widgets/subsection_header.dart"; +import "../../home_view/widgets/paddings.dart"; +import "../../navigator/navigator/detail_view_navigator.dart"; +import "../../navigator/navigator/nested_navigator.dart"; +import "../../navigator/navigator/tab_bar_navigator.dart"; +import "../repositories/department_details_repository.dart"; - -// TODO: Resolve if the list button should redirect to list of all study circles or only ones related to the department? +// TODO(simon-the-shark): Resolve if the list button should redirect to list of all study circles or only ones related to the department. class DepartmentsStudyCirclesSection extends ConsumerWidget { const DepartmentsStudyCirclesSection(this.studyCircles, {super.key}); final List studyCircles; @@ -22,14 +21,18 @@ class DepartmentsStudyCirclesSection extends ConsumerWidget { return Column( children: [ SubsectionHeader( - title: context.localize.study_circles, - actionTitle: context.localize.list, - onClick: () { - ref.read(navigatorProvider).changeTabBar(NavBarEnum.sciCircles); - }), + title: context.localize.study_circles, + actionTitle: context.localize.list, + onClick: () async { + await ref + .read(navigatorProvider) + .changeTabBar(NavBarEnum.sciCircles); + }, + ), SizedBox( - height: BigPreviewCardConfig.cardHeight, - child: _StudyCirclesList(studyCircles: studyCircles)) + height: BigPreviewCardConfig.cardHeight, + child: _StudyCirclesList(studyCircles: studyCircles), + ), ], ); } @@ -40,26 +43,28 @@ class _StudyCirclesList extends ConsumerWidget { const _StudyCirclesList({required this.studyCircles}); - static void goToDetailView(WidgetRef ref, String id) { - ref.read(navigatorProvider).navigateToStudyCircleDetails(id); + static Future goToDetailView(WidgetRef ref, String id) async { + await ref.read(navigatorProvider).navigateToStudyCircleDetails(id); } @override Widget build(BuildContext context, WidgetRef ref) { return ListView.builder( - cacheExtent: 4, - shrinkWrap: true, - scrollDirection: Axis.horizontal, - itemCount: studyCircles.length, - itemBuilder: (BuildContext context, int index) { - final circle = studyCircles[index]; - return MediumLeftPadding( - child: BigPreviewCard( - title: circle.name, - shortDescription: circle.shortDescription ?? "", - photoUrl: circle.logo?.filename_disk?.directusUrl, - onClick: () => goToDetailView(ref, circle.id)), - ); - }); + cacheExtent: 4, + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: studyCircles.length, + itemBuilder: (BuildContext context, int index) { + final circle = studyCircles[index]; + return MediumLeftPadding( + child: BigPreviewCard( + title: circle.name, + shortDescription: circle.shortDescription ?? "", + photoUrl: circle.logo?.filename_disk?.directusUrl, + onClick: () async => goToDetailView(ref, circle.id), + ), + ); + }, + ); } -} \ No newline at end of file +} diff --git a/lib/features/department_details/widgets/fields_of_study_section.dart b/lib/features/department_details/widgets/fields_of_study_section.dart index 160de5d6..32a96e5a 100644 --- a/lib/features/department_details/widgets/fields_of_study_section.dart +++ b/lib/features/department_details/widgets/fields_of_study_section.dart @@ -1,35 +1,35 @@ +import "package:flutter/cupertino.dart"; -import 'package:flutter/cupertino.dart'; - -import '../../../theme/app_theme.dart'; -import '../../../utils/context_extensions.dart'; -import '../../../widgets/wide_tile_card.dart'; +import "../../../theme/app_theme.dart"; +import "../../../utils/context_extensions.dart"; +import "../../../widgets/wide_tile_card.dart"; class FieldsOfStudySection extends StatelessWidget { - const FieldsOfStudySection({Key? key, required this.fieldsOfStudy}) - : super(key: key); + const FieldsOfStudySection({super.key, required this.fieldsOfStudy}); final List fieldsOfStudy; @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.all(24.0), + padding: const EdgeInsets.all(24), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(context.localize.fields_of_study, - style: context.textTheme.headline), + Text( + context.localize.fields_of_study, + style: context.textTheme.headline, + ), const SizedBox(height: 16), for (final item in fieldsOfStudy) Padding( - padding: const EdgeInsets.only(bottom: 12.0), + padding: const EdgeInsets.only(bottom: 12), child: WideTileCard( title: item, ), - ) + ), ], ), ); } -} \ No newline at end of file +} diff --git a/lib/features/departments_tab/departments_tab.dart b/lib/features/departments_tab/departments_tab.dart index f5ef37c9..17c972e8 100644 --- a/lib/features/departments_tab/departments_tab.dart +++ b/lib/features/departments_tab/departments_tab.dart @@ -1,18 +1,18 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../config/ui_config.dart'; -import '../../shared_repositories/departments_repository/departments_repository.dart'; -import '../../theme/app_theme.dart'; -import '../../utils/context_extensions.dart'; -import '../../utils/where_non_null_iterable.dart'; -import '../../widgets/my_error_widget.dart'; -import '../../widgets/search_box_app_bar.dart'; -import '../navigator/navigator/detail_view_navigator.dart'; -import '../navigator/navigator/nested_navigator.dart'; -import 'departments_tab_controller.dart'; -import 'widgets/department_card.dart'; -import 'widgets/departments_list_loading.dart'; +import "../../config/ui_config.dart"; +import "../../shared_repositories/departments_repository/departments_repository.dart"; +import "../../theme/app_theme.dart"; +import "../../utils/context_extensions.dart"; +import "../../utils/where_non_null_iterable.dart"; +import "../../widgets/my_error_widget.dart"; +import "../../widgets/search_box_app_bar.dart"; +import "../navigator/navigator/detail_view_navigator.dart"; +import "../navigator/navigator/nested_navigator.dart"; +import "departments_tab_controller.dart"; +import "widgets/department_card.dart"; +import "widgets/departments_list_loading.dart"; class DepartmentTab extends ConsumerWidget { const DepartmentTab({super.key}); @@ -39,13 +39,14 @@ class _DepartmentsTabListBody extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final state = ref.watch(departmentListProvider); return Padding( - padding: const EdgeInsets.symmetric(horizontal: 24), - child: switch (state) { - AsyncLoading() => const DepartmentsListLoading(), - AsyncError(:final error) => MyErrorWidget(error), - AsyncValue(:final value) => - _DepartmentsDataView(value.whereNonNull.toList()), - }); + padding: const EdgeInsets.symmetric(horizontal: 24), + child: switch (state) { + AsyncLoading() => const DepartmentsListLoading(), + AsyncError(:final error) => MyErrorWidget(error), + AsyncValue(:final value) => + _DepartmentsDataView(value.whereNonNull.toList()), + }, + ); } } @@ -53,8 +54,8 @@ class _DepartmentsDataView extends ConsumerWidget { const _DepartmentsDataView(this.departments); final List departments; - static void goToDetailView(WidgetRef ref, String id) { - ref.read(navigatorProvider).navigateToDepartmentDetails(id); + static Future goToDetailView(WidgetRef ref, String id) async { + await ref.read(navigatorProvider).navigateToDepartmentDetails(id); } @override @@ -71,7 +72,10 @@ class _DepartmentsDataView extends ConsumerWidget { padding: const EdgeInsets.only(bottom: 24), gridDelegate: DepartmentsConfig.departmentsTabGridDelegate, itemCount: departments.length, - itemBuilder: (context, index) => DepartmentCard(departments[index], onClick: () => goToDetailView(ref,departments[index].id) ,), + itemBuilder: (context, index) => DepartmentCard( + departments[index], + onClick: () async => goToDetailView(ref, departments[index].id), + ), ); } } diff --git a/lib/features/departments_tab/departments_tab_controller.dart b/lib/features/departments_tab/departments_tab_controller.dart index c6836608..6b2787a2 100644 --- a/lib/features/departments_tab/departments_tab_controller.dart +++ b/lib/features/departments_tab/departments_tab_controller.dart @@ -1,8 +1,8 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../shared_repositories/departments_repository/departments_repository.dart'; +import "../../shared_repositories/departments_repository/departments_repository.dart"; -part 'departments_tab_controller.g.dart'; +part "departments_tab_controller.g.dart"; @riverpod class SearchDepartmentsController extends _$SearchDepartmentsController { @@ -22,6 +22,6 @@ Future?> departmentList(DepartmentListRef ref) async { ?.where((element) => element == null || element.name.toLowerCase().contains(query.toLowerCase()) || - element.code.toLowerCase().contains(query.toLowerCase())) + element.code.toLowerCase().contains(query.toLowerCase()),) .toList(); } diff --git a/lib/features/departments_tab/widgets/department_card.dart b/lib/features/departments_tab/widgets/department_card.dart index 6d63f358..c695be3e 100644 --- a/lib/features/departments_tab/widgets/department_card.dart +++ b/lib/features/departments_tab/widgets/department_card.dart @@ -1,11 +1,11 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/ui_config.dart'; -import '../../../shared_repositories/departments_repository/departments_extra_params_ext.dart'; -import '../../../shared_repositories/departments_repository/departments_repository.dart'; -import '../../../api_base/directus_assets_url.dart'; -import '../../../widgets/my_cached_image.dart'; -import '../../../widgets/wide_tile_card.dart'; +import "../../../api_base/directus_assets_url.dart"; +import "../../../config/ui_config.dart"; +import "../../../shared_repositories/departments_repository/departments_extra_params_ext.dart"; +import "../../../shared_repositories/departments_repository/departments_repository.dart"; +import "../../../widgets/my_cached_image.dart"; +import "../../../widgets/wide_tile_card.dart"; class DepartmentCard extends StatelessWidget { final Department department; diff --git a/lib/features/departments_tab/widgets/departments_list_loading.dart b/lib/features/departments_tab/widgets/departments_list_loading.dart index 5b2ef45f..55fc7e71 100644 --- a/lib/features/departments_tab/widgets/departments_list_loading.dart +++ b/lib/features/departments_tab/widgets/departments_list_loading.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../widgets/loading_widgets/specific_imitations/wide_tile_loading.dart'; -import '../../../config/ui_config.dart'; +import "../../../../widgets/loading_widgets/specific_imitations/wide_tile_loading.dart"; +import "../../../config/ui_config.dart"; class DepartmentsListLoading extends StatelessWidget { const DepartmentsListLoading({super.key}); diff --git a/lib/features/guide/guide_view_template.dart b/lib/features/guide/guide_view_template.dart index bd5a224d..a1e9678e 100644 --- a/lib/features/guide/guide_view_template.dart +++ b/lib/features/guide/guide_view_template.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../theme/app_theme.dart'; -import '../../utils/context_extensions.dart'; -import '../navigator/navigator/detail_view_navigator.dart'; -import '../navigator/navigator/nested_navigator.dart'; +import "../../theme/app_theme.dart"; +import "../../utils/context_extensions.dart"; +import "../navigator/navigator/detail_view_navigator.dart"; +import "../navigator/navigator/nested_navigator.dart"; class GuideViewTemplate extends ConsumerWidget { const GuideViewTemplate({super.key}); @@ -17,13 +17,13 @@ class GuideViewTemplate extends ConsumerWidget { backgroundColor: context.colorTheme.greyLight, ), body: Padding( - padding: const EdgeInsets.all(20.0), + padding: const EdgeInsets.all(20), child: Column( children: [ GestureDetector( onTap: ref.watch(navigatorProvider).navigateToAboutUs, child: Container( - padding: const EdgeInsets.all(10.0), + padding: const EdgeInsets.all(10), width: double.infinity, height: 50, decoration: BoxDecoration( @@ -34,7 +34,7 @@ class GuideViewTemplate extends ConsumerWidget { context.localize.about_us, style: TextStyle( fontSize: 24, - color: context.colorTheme.orangePomegranade), + color: context.colorTheme.orangePomegranade,), ), ), ), diff --git a/lib/features/guide/widgets/about_us/about_us_tab.dart b/lib/features/guide/widgets/about_us/about_us_tab.dart index ae5faa03..47a510e4 100644 --- a/lib/features/guide/widgets/about_us/about_us_tab.dart +++ b/lib/features/guide/widgets/about_us/about_us_tab.dart @@ -1,18 +1,18 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../../api_base/directus_assets_url.dart'; -import '../../../../config/ui_config.dart'; -import '../../../../theme/app_theme.dart'; -import '../../../../utils/context_extensions.dart'; -import '../../../../widgets/my_error_widget.dart'; -import '../../../study_circle_details/widgets/details_screen_app_bar.dart'; -import '../../../../widgets/details_screen_sliver_header_section.dart'; -import 'repository/about_us_repository.dart'; -import 'widgets/desription_section.dart'; -import 'widgets/links_section.dart'; -import 'widgets/section_header.dart'; -import 'widgets/team_section.dart'; +import "../../../../api_base/directus_assets_url.dart"; +import "../../../../config/ui_config.dart"; +import "../../../../theme/app_theme.dart"; +import "../../../../utils/context_extensions.dart"; +import "../../../../widgets/details_screen_sliver_header_section.dart"; +import "../../../../widgets/my_error_widget.dart"; +import "../../../study_circle_details/widgets/details_screen_app_bar.dart"; +import "repository/about_us_repository.dart"; +import "widgets/desription_section.dart"; +import "widgets/links_section.dart"; +import "widgets/section_header.dart"; +import "widgets/team_section.dart"; class AboutUsTab extends StatelessWidget { const AboutUsTab({super.key}); @@ -37,7 +37,7 @@ class _AboutUsView extends ConsumerWidget { AsyncLoading() => Center( child: CircularProgressIndicator( color: context.colorTheme.orangePomegranade, - )), + ),), AsyncError(:final error) => MyErrorWidget(error), AsyncValue(:final value) => CustomScrollView( slivers: [ @@ -52,7 +52,7 @@ class _AboutUsView extends ConsumerWidget { delegate: SliverChildListDelegate( [ SectionHeader(text: context.localize.about_us), - DescriptionSection(text: value?.aboutUs?.description ?? ''), + DescriptionSection(text: value?.aboutUs?.description ?? ""), SectionHeader(text: context.localize.meet_our_team), TeamSection( members: value?.getMemberData() ?? [], @@ -63,7 +63,7 @@ class _AboutUsView extends ConsumerWidget { ), const SizedBox( height: AboutUsConfig.spacerHeight, - ) + ), ], ), ), diff --git a/lib/features/guide/widgets/about_us/models/about_us_details.dart b/lib/features/guide/widgets/about_us/models/about_us_details.dart index 7581fe4b..df80893e 100644 --- a/lib/features/guide/widgets/about_us/models/about_us_details.dart +++ b/lib/features/guide/widgets/about_us/models/about_us_details.dart @@ -1,9 +1,9 @@ -import '../../../../../api_base/directus_assets_url.dart'; +import "../../../../../api_base/directus_assets_url.dart"; -import '../../../../../utils/determine_icon.dart'; -import '../../../../../utils/where_non_null_iterable.dart'; -import '../repository/about_us_repository.dart'; -import 'member_data.dart'; +import "../../../../../utils/determine_icon.dart"; +import "../../../../../utils/where_non_null_iterable.dart"; +import "../repository/about_us_repository.dart"; +import "member_data.dart"; class AboutUsDetails { final AboutUs? aboutUs; diff --git a/lib/features/guide/widgets/about_us/models/member_data.dart b/lib/features/guide/widgets/about_us/models/member_data.dart index 7a1fea3c..283eb9ab 100644 --- a/lib/features/guide/widgets/about_us/models/member_data.dart +++ b/lib/features/guide/widgets/about_us/models/member_data.dart @@ -1,6 +1,6 @@ -import 'package:flutter/foundation.dart'; +import "package:flutter/foundation.dart"; -import '../../../../../utils/determine_icon.dart'; +import "../../../../../utils/determine_icon.dart"; @immutable class MemberData { diff --git a/lib/features/guide/widgets/about_us/repository/about_us_repository.dart b/lib/features/guide/widgets/about_us/repository/about_us_repository.dart index d4d71d59..8d528862 100644 --- a/lib/features/guide/widgets/about_us/repository/about_us_repository.dart +++ b/lib/features/guide/widgets/about_us/repository/about_us_repository.dart @@ -1,11 +1,11 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../../../api_base/watch_query_adapter.dart'; -import '../../../../../config/ttl_config.dart'; -import '../models/about_us_details.dart'; -import 'getAboutUsDetails.graphql.dart'; +import "../../../../../api_base/watch_query_adapter.dart"; +import "../../../../../config/ttl_config.dart"; +import "../models/about_us_details.dart"; +import "getAboutUsDetails.graphql.dart"; -part 'about_us_repository.g.dart'; +part "about_us_repository.g.dart"; typedef _GetAboutUs = WatchOptions$Query$getAbousUsDetails; typedef AboutUs = Query$getAbousUsDetails$AboutUs; diff --git a/lib/features/guide/widgets/about_us/utils/convert_html.dart b/lib/features/guide/widgets/about_us/utils/convert_html.dart index a7809318..3e59df7d 100644 --- a/lib/features/guide/widgets/about_us/utils/convert_html.dart +++ b/lib/features/guide/widgets/about_us/utils/convert_html.dart @@ -1,7 +1,9 @@ -import 'package:flutter/material.dart'; -import 'package:html/dom.dart' as html; -import '../../../../../theme/app_theme.dart'; -import '../../../../../theme/hex_color.dart'; +import "package:flutter/material.dart"; +// unfortunetly it's a dependency of dependency and it's not re-exported +// ignore: depend_on_referenced_packages +import "package:html/dom.dart" as html; +import "../../../../../theme/app_theme.dart"; +import "../../../../../theme/hex_color.dart"; extension ToHtmlColorString on HexColor { String get htmlFormat => @@ -10,19 +12,19 @@ extension ToHtmlColorString on HexColor { extension IsLinkTag on html.Element { bool get isLink { - return localName == 'a'; + return localName == "a"; } } extension CustomHtmlStyles on BuildContext { Map? customStylesBuilder(html.Element element) { final defaultStyles = { - 'text-align': 'justify', + "text-align": "justify", }; if (element.isLink) { defaultStyles.addAll({ - 'color': colorTheme.orangePomegranade.htmlFormat, - 'text-decoration': 'none', + "color": colorTheme.orangePomegranade.htmlFormat, + "text-decoration": "none", }); } return defaultStyles; diff --git a/lib/features/guide/widgets/about_us/widgets/desription_section.dart b/lib/features/guide/widgets/about_us/widgets/desription_section.dart index 667da1a3..017a8d64 100644 --- a/lib/features/guide/widgets/about_us/widgets/desription_section.dart +++ b/lib/features/guide/widgets/about_us/widgets/desription_section.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'; +import "package:flutter/material.dart"; +import "package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart"; -import '../../../../../config/ui_config.dart'; -import '../../../../../theme/app_theme.dart'; -import '../../../../../utils/launch_url_util.dart'; -import '../utils/convert_html.dart'; +import "../../../../../config/ui_config.dart"; +import "../../../../../theme/app_theme.dart"; +import "../../../../../utils/launch_url_util.dart"; +import "../utils/convert_html.dart"; class DescriptionSection extends StatelessWidget { const DescriptionSection({super.key, required this.text}); @@ -26,7 +26,9 @@ class DescriptionSection extends StatelessWidget { child: HtmlWidget( text, textStyle: context.aboutUsTheme.body, - customStylesBuilder: (element) => context.customStylesBuilder(element), + customStylesBuilder: (element) => context.customStylesBuilder( + element, + ), onTapUrl: (url) async { return LaunchUrlUtil.launch(url); }, diff --git a/lib/features/guide/widgets/about_us/widgets/links_section.dart b/lib/features/guide/widgets/about_us/widgets/links_section.dart index 9a763fec..2fa4a44c 100644 --- a/lib/features/guide/widgets/about_us/widgets/links_section.dart +++ b/lib/features/guide/widgets/about_us/widgets/links_section.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; +import "package:flutter/material.dart"; +import "package:flutter_svg/svg.dart"; -import '../../../../../config/ui_config.dart'; -import '../../../../../theme/app_theme.dart'; -import '../../../../../utils/determine_icon.dart'; -import '../../../../../utils/launch_url_util.dart'; +import "../../../../../config/ui_config.dart"; +import "../../../../../theme/app_theme.dart"; +import "../../../../../utils/determine_icon.dart"; +import "../../../../../utils/launch_url_util.dart"; class LinksSection extends StatelessWidget { const LinksSection({super.key, required this.links}); @@ -20,7 +20,7 @@ class LinksSection extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ for (final item in links) - _IconWithUrl(url: item.url ?? '', icon: item.icon) + _IconWithUrl(url: item.url ?? "", icon: item.icon), ], ), ); @@ -37,9 +37,9 @@ class _IconWithUrl extends StatelessWidget { Widget build(BuildContext context) { return GestureDetector( onTap: () async { - LaunchUrlUtil.launch(url); + await LaunchUrlUtil.launch(url); }, - child: Container( + child: DecoratedBox( decoration: BoxDecoration( color: context.colorTheme.greyLight, borderRadius: BorderRadius.circular(AboutUsConfig.borderRadius), diff --git a/lib/features/guide/widgets/about_us/widgets/section_header.dart b/lib/features/guide/widgets/about_us/widgets/section_header.dart index a94e1b5b..94a28ef7 100644 --- a/lib/features/guide/widgets/about_us/widgets/section_header.dart +++ b/lib/features/guide/widgets/about_us/widgets/section_header.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../../config/ui_config.dart'; -import '../../../../../theme/app_theme.dart'; +import "../../../../../config/ui_config.dart"; +import "../../../../../theme/app_theme.dart"; class SectionHeader extends StatelessWidget { const SectionHeader({super.key, required this.text}); diff --git a/lib/features/guide/widgets/about_us/widgets/team_section.dart b/lib/features/guide/widgets/about_us/widgets/team_section.dart index aa11f60b..9b07ba2c 100644 --- a/lib/features/guide/widgets/about_us/widgets/team_section.dart +++ b/lib/features/guide/widgets/about_us/widgets/team_section.dart @@ -1,13 +1,13 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; +import "package:flutter/material.dart"; +import "package:flutter_svg/svg.dart"; -import '../../../../../config/ui_config.dart'; -import '../../../../../theme/app_theme.dart'; -import '../../../../../utils/determine_icon.dart'; -import '../../../../../utils/launch_url_util.dart'; +import "../../../../../config/ui_config.dart"; +import "../../../../../theme/app_theme.dart"; +import "../../../../../utils/determine_icon.dart"; +import "../../../../../utils/launch_url_util.dart"; -import '../../../../../widgets/my_cached_image.dart'; -import '../models/member_data.dart'; +import "../../../../../widgets/my_cached_image.dart"; +import "../models/member_data.dart"; class TeamSection extends StatelessWidget { const TeamSection({super.key, required this.members}); @@ -20,7 +20,7 @@ class TeamSection extends StatelessWidget { const EdgeInsets.symmetric(horizontal: AboutUsConfig.defaultPadding), child: Column( children: [ - for (final member in members) _TeamMemberCard(member: member) + for (final member in members) _TeamMemberCard(member: member), ], ), ); @@ -34,7 +34,7 @@ class _TeamMemberCard extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.only(bottom: 8.0), + padding: const EdgeInsets.only(bottom: 8), child: Container( width: double.infinity, clipBehavior: Clip.antiAlias, @@ -53,10 +53,10 @@ class _TeamMemberCard extends StatelessWidget { width: 14, ), _Description( - name: member.name ?? '', - subtitle: member.subtitle ?? '', + name: member.name ?? "", + subtitle: member.subtitle ?? "", links: member.links, - ) + ), ], ), ), @@ -72,7 +72,7 @@ class _Icon extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.only(right: 11.0), + padding: const EdgeInsets.only(right: 11), child: GestureDetector( onTap: () async { await LaunchUrlUtil.launch(launchUrl); @@ -85,7 +85,7 @@ class _Icon extends StatelessWidget { class _Description extends StatelessWidget { const _Description( - {required this.name, required this.subtitle, required this.links}); + {required this.name, required this.subtitle, required this.links,}); final String name; final String subtitle; final List links; @@ -93,11 +93,10 @@ class _Description extends StatelessWidget { @override Widget build(BuildContext context) { return Column( - mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: const EdgeInsets.only(top: 9.0, bottom: 4.0), + padding: const EdgeInsets.only(top: 9, bottom: 4), child: Text( name, style: context.aboutUsTheme.headlineSmaller, @@ -108,15 +107,14 @@ class _Description extends StatelessWidget { height: 6, ), Row( - mainAxisAlignment: MainAxisAlignment.start, children: [ for (final icon in links) _Icon( - launchUrl: icon.url ?? '', + launchUrl: icon.url ?? "", icon: icon.icon, - ) + ), ], - ) + ), ], ); } diff --git a/lib/features/home_view/home_view.dart b/lib/features/home_view/home_view.dart index bfbe96ff..8ab6c206 100644 --- a/lib/features/home_view/home_view.dart +++ b/lib/features/home_view/home_view.dart @@ -1,15 +1,15 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../config/ui_config.dart'; -import '../../theme/app_theme.dart'; -import 'widgets/buildings_section/buildings_section.dart'; -import '../academic_calendar_greeting/widgets/countdown_widget/exam_session_countdown.dart'; -import 'widgets/departments_section/department_section.dart'; -import '../academic_calendar_greeting/widgets/home_screen_greeting.dart'; -import 'widgets/logo_app_bar.dart'; -import 'widgets/news_section.dart'; -import 'widgets/parking_section.dart'; -import 'widgets/study_circles_section.dart'; +import "../../config/ui_config.dart"; +import "../../theme/app_theme.dart"; +import "../academic_calendar_greeting/widgets/countdown_widget/exam_session_countdown.dart"; +import "../academic_calendar_greeting/widgets/home_screen_greeting.dart"; +import "widgets/buildings_section/buildings_section.dart"; +import "widgets/departments_section/department_section.dart"; +import "widgets/logo_app_bar.dart"; +import "widgets/news_section.dart"; +import "widgets/parking_section.dart"; +import "widgets/study_circles_section.dart"; class HomeView extends StatelessWidget { const HomeView({super.key}); diff --git a/lib/features/home_view/repositories/infos_repository/infos_preview_repository.dart b/lib/features/home_view/repositories/infos_repository/infos_preview_repository.dart index 689e29ab..401ee0f9 100644 --- a/lib/features/home_view/repositories/infos_repository/infos_preview_repository.dart +++ b/lib/features/home_view/repositories/infos_repository/infos_preview_repository.dart @@ -1,16 +1,16 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../../config/ttl_config.dart'; -import '../../../../api_base/watch_query_adapter.dart'; -import 'getInfosPreview.graphql.dart'; +import "../../../../api_base/watch_query_adapter.dart"; +import "../../../../config/ttl_config.dart"; +import "getInfosPreview.graphql.dart"; -part 'infos_preview_repository.g.dart'; +part "infos_preview_repository.g.dart"; typedef InfosPreview = Query$GetInfosPreview$Posts; @riverpod Stream?> infosPreviewRepository( - InfosPreviewRepositoryRef ref) async* { + InfosPreviewRepositoryRef ref,) async* { final stream = ref.watchQueryWithCache( WatchOptions$Query$GetInfosPreview(eagerlyFetchResults: true), TtlKey.infosPreviewRepository, diff --git a/lib/features/home_view/widgets/buildings_section/building_card.dart b/lib/features/home_view/widgets/buildings_section/building_card.dart index cae0f5fa..bdb72ee1 100644 --- a/lib/features/home_view/widgets/buildings_section/building_card.dart +++ b/lib/features/home_view/widgets/buildings_section/building_card.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../config/ui_config.dart'; -import '../../../../theme/app_theme.dart'; -import '../../../../widgets/my_cached_image.dart'; -import '../../../../widgets/tile_splash.dart'; +import "../../../../config/ui_config.dart"; +import "../../../../theme/app_theme.dart"; +import "../../../../widgets/my_cached_image.dart"; +import "../../../../widgets/tile_splash.dart"; class BuildingCard extends StatelessWidget { const BuildingCard({ @@ -22,7 +22,7 @@ class BuildingCard extends StatelessWidget { return SizedBox( width: 120, child: ClipRRect( - borderRadius: BorderRadius.circular(8.0), + borderRadius: BorderRadius.circular(8), child: Stack( fit: StackFit.expand, children: [ diff --git a/lib/features/home_view/widgets/buildings_section/buildings_section.dart b/lib/features/home_view/widgets/buildings_section/buildings_section.dart index c4330beb..cf170139 100644 --- a/lib/features/home_view/widgets/buildings_section/buildings_section.dart +++ b/lib/features/home_view/widgets/buildings_section/buildings_section.dart @@ -1,25 +1,25 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../../api_base/directus_assets_url.dart'; -import '../../../../shared_repositories/buildings_repository/building_model.dart'; -import '../../../../shared_repositories/buildings_repository/map_buildings_repo.dart'; -import '../../../../utils/context_extensions.dart'; -import '../../../../utils/where_non_null_iterable.dart'; -import '../../../../widgets/my_error_widget.dart'; -import '../../../../widgets/subsection_header.dart'; -import '../../../../config/nav_bar_config.dart'; -import '../../../buildings_map/controllers.dart'; -import '../../../navigator/navigator/nested_navigator.dart'; -import '../../../navigator/navigator/tab_bar_navigator.dart'; -import '../loading_widgets/scrollable_section_loading.dart'; -import '../paddings.dart'; -import 'building_card.dart'; +import "../../../../api_base/directus_assets_url.dart"; +import "../../../../config/nav_bar_config.dart"; +import "../../../../shared_repositories/buildings_repository/building_model.dart"; +import "../../../../shared_repositories/buildings_repository/map_buildings_repo.dart"; +import "../../../../utils/context_extensions.dart"; +import "../../../../utils/where_non_null_iterable.dart"; +import "../../../../widgets/my_error_widget.dart"; +import "../../../../widgets/subsection_header.dart"; +import "../../../buildings_map/controllers.dart"; +import "../../../navigator/navigator/nested_navigator.dart"; +import "../../../navigator/navigator/tab_bar_navigator.dart"; +import "../loading_widgets/scrollable_section_loading.dart"; +import "../paddings.dart"; +import "building_card.dart"; class BuildingsSection extends ConsumerWidget { const BuildingsSection({super.key}); - static void goToMapTab(WidgetRef ref) => + static Future goToMapTab(WidgetRef ref) async => ref.read(navigatorProvider).changeTabBar(NavBarEnum.mapp); @override @@ -28,9 +28,9 @@ class BuildingsSection extends ConsumerWidget { SubsectionHeader( title: context.localize.buildings_title, actionTitle: context.localize.map_button, - onClick: () => BuildingsSection.goToMapTab(ref), + onClick: () async => BuildingsSection.goToMapTab(ref), ), - const _BuildingsList() + const _BuildingsList(), ], ); } @@ -72,8 +72,8 @@ class _DataListBuildingsTiles extends ConsumerWidget { child: BuildingCard( buildingName: mapItem.name, imageUrl: mapItem.cover?.filename_disk?.directusUrl, - onTap: () { - BuildingsSection.goToMapTab(ref); + onTap: () async { + await BuildingsSection.goToMapTab(ref); ref .watch(activeBuildingControllerProvider.notifier) .selectBuilding(mapItem); diff --git a/lib/features/home_view/widgets/departments_section/deparment_box.dart b/lib/features/home_view/widgets/departments_section/deparment_box.dart index 6fa02df9..be8ad492 100644 --- a/lib/features/home_view/widgets/departments_section/deparment_box.dart +++ b/lib/features/home_view/widgets/departments_section/deparment_box.dart @@ -1,12 +1,12 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../api_base/directus_assets_url.dart'; -import '../../../../config/ui_config.dart'; -import '../../../../shared_repositories/departments_repository/departments_extra_params_ext.dart'; -import '../../../../shared_repositories/departments_repository/departments_repository.dart'; -import '../../../../theme/app_theme.dart'; -import '../../../../widgets/my_cached_image.dart'; -import '../../../../widgets/tile_splash.dart'; +import "../../../../api_base/directus_assets_url.dart"; +import "../../../../config/ui_config.dart"; +import "../../../../shared_repositories/departments_repository/departments_extra_params_ext.dart"; +import "../../../../shared_repositories/departments_repository/departments_repository.dart"; +import "../../../../theme/app_theme.dart"; +import "../../../../widgets/my_cached_image.dart"; +import "../../../../widgets/tile_splash.dart"; class DepartmentBox extends StatelessWidget { final Department department; @@ -39,7 +39,7 @@ class DepartmentBox extends StatelessWidget { ), ), Padding( - padding: const EdgeInsets.all(16.0), + padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/features/home_view/widgets/departments_section/department_section.dart b/lib/features/home_view/widgets/departments_section/department_section.dart index 5f485b31..daab22e3 100644 --- a/lib/features/home_view/widgets/departments_section/department_section.dart +++ b/lib/features/home_view/widgets/departments_section/department_section.dart @@ -1,23 +1,23 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../../shared_repositories/departments_repository/departments_repository.dart'; -import '../../../../utils/context_extensions.dart'; -import '../../../../utils/where_non_null_iterable.dart'; -import '../../../../widgets/my_error_widget.dart'; -import '../../../../widgets/subsection_header.dart'; -import '../../../../config/nav_bar_config.dart'; -import '../../../navigator/navigator/detail_view_navigator.dart'; -import '../../../navigator/navigator/nested_navigator.dart'; -import '../../../navigator/navigator/tab_bar_navigator.dart'; -import '../loading_widgets/scrollable_section_loading.dart'; -import '../paddings.dart'; -import 'deparment_box.dart'; +import "../../../../config/nav_bar_config.dart"; +import "../../../../shared_repositories/departments_repository/departments_repository.dart"; +import "../../../../utils/context_extensions.dart"; +import "../../../../utils/where_non_null_iterable.dart"; +import "../../../../widgets/my_error_widget.dart"; +import "../../../../widgets/subsection_header.dart"; +import "../../../navigator/navigator/detail_view_navigator.dart"; +import "../../../navigator/navigator/nested_navigator.dart"; +import "../../../navigator/navigator/tab_bar_navigator.dart"; +import "../loading_widgets/scrollable_section_loading.dart"; +import "../paddings.dart"; +import "deparment_box.dart"; class DepartmentSection extends ConsumerWidget { const DepartmentSection({super.key}); - static void goToFacultiesTab(WidgetRef ref) => + static Future goToFacultiesTab(WidgetRef ref) async => ref.read(navigatorProvider).changeTabBar(NavBarEnum.mapp); @override @@ -28,7 +28,7 @@ class DepartmentSection extends ConsumerWidget { SubsectionHeader( title: context.localize.departments, actionTitle: context.localize.list, - onClick: () => goToFacultiesTab(ref), + onClick: () async => goToFacultiesTab(ref), ), SmallHorizontalPadding( child: switch (state) { @@ -38,9 +38,10 @@ class DepartmentSection extends ConsumerWidget { AsyncError(:final error) => MyErrorWidget(error), AsyncValue(:final value) => SizedBox( height: 120, - child: _DepartmentsDataList(value.whereNonNull.toList())), + child: _DepartmentsDataList(value.whereNonNull.toList()), + ), }, - ) + ), ], ); } @@ -51,8 +52,8 @@ class _DepartmentsDataList extends ConsumerWidget { final List departments; - static void goToDetailView(WidgetRef ref, String id) { - ref.read(navigatorProvider).navigateToDepartmentDetails(id); + static Future goToDetailView(WidgetRef ref, String id) async { + await ref.read(navigatorProvider).navigateToDepartmentDetails(id); } @override @@ -60,8 +61,12 @@ class _DepartmentsDataList extends ConsumerWidget { return ListView.builder( scrollDirection: Axis.horizontal, itemCount: departments.length, - itemBuilder: (context, index) => - MediumLeftPadding(child: DepartmentBox(departments[index],onClick: () => goToDetailView(ref, departments[index].id),)), + itemBuilder: (context, index) => MediumLeftPadding( + child: DepartmentBox( + departments[index], + onClick: () async => goToDetailView(ref, departments[index].id), + ), + ), ); } } diff --git a/lib/features/home_view/widgets/loading_widgets/big_scrollable_section_loading.dart b/lib/features/home_view/widgets/loading_widgets/big_scrollable_section_loading.dart index b53c6e87..6baeb147 100644 --- a/lib/features/home_view/widgets/loading_widgets/big_scrollable_section_loading.dart +++ b/lib/features/home_view/widgets/loading_widgets/big_scrollable_section_loading.dart @@ -1,9 +1,9 @@ -import 'package:flutter/cupertino.dart'; +import "package:flutter/cupertino.dart"; -import '../../../../config/ui_config.dart'; -import '../../../../widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart'; -import '../../../../widgets/loading_widgets/scrolable_loader_builder.dart'; -import '../paddings.dart'; +import "../../../../config/ui_config.dart"; +import "../../../../widgets/loading_widgets/scrolable_loader_builder.dart"; +import "../../../../widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart"; +import "../paddings.dart"; class BigScrollableSectionLoading extends StatelessWidget { const BigScrollableSectionLoading({ diff --git a/lib/features/home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart b/lib/features/home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart index e0f4b934..919c623e 100644 --- a/lib/features/home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart +++ b/lib/features/home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart @@ -1,6 +1,6 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../widgets/loading_widgets/shimmer_loading.dart'; +import "../../../../widgets/loading_widgets/shimmer_loading.dart"; class HorizontalRectangularSectionLoading extends StatelessWidget { const HorizontalRectangularSectionLoading({super.key}); @@ -13,8 +13,8 @@ class HorizontalRectangularSectionLoading extends StatelessWidget { height: 69, decoration: BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.circular(8.0), + borderRadius: BorderRadius.circular(8), ), - )); + ),); } } diff --git a/lib/features/home_view/widgets/loading_widgets/scrollable_section_loading.dart b/lib/features/home_view/widgets/loading_widgets/scrollable_section_loading.dart index ba933ee1..b93b056b 100644 --- a/lib/features/home_view/widgets/loading_widgets/scrollable_section_loading.dart +++ b/lib/features/home_view/widgets/loading_widgets/scrollable_section_loading.dart @@ -1,8 +1,8 @@ -import 'package:flutter/cupertino.dart'; +import "package:flutter/cupertino.dart"; -import '../../../../widgets/loading_widgets/scrolable_loader_builder.dart'; -import '../../../../widgets/loading_widgets/simple_previews/preview_card_loading.dart'; -import '../paddings.dart'; +import "../../../../widgets/loading_widgets/scrolable_loader_builder.dart"; +import "../../../../widgets/loading_widgets/simple_previews/preview_card_loading.dart"; +import "../paddings.dart"; class ScrollableSectionLoading extends StatelessWidget { const ScrollableSectionLoading({super.key}); diff --git a/lib/features/home_view/widgets/logo_app_bar.dart b/lib/features/home_view/widgets/logo_app_bar.dart index bb2b757f..5d3ffb8f 100644 --- a/lib/features/home_view/widgets/logo_app_bar.dart +++ b/lib/features/home_view/widgets/logo_app_bar.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; +import "package:flutter/material.dart"; +import "package:flutter_svg/svg.dart"; -import '../../../gen/assets.gen.dart'; -import '../../../theme/app_theme.dart'; +import "../../../gen/assets.gen.dart"; +import "../../../theme/app_theme.dart"; class LogoAppBar extends AppBar { /// AppBar with ToPwr colorful logo @@ -23,9 +23,12 @@ class AppBarLogo extends StatelessWidget { /// ToPwr Appbar svg colorful themed logo const AppBarLogo({super.key}); - static void precacheImageIfAbsent() { + static Future precacheImageIfAbsent() async { const loader = SvgAssetLoader(Assets.logoAppBar); - svg.cache.putIfAbsent(loader.cacheKey(null), () => loader.loadBytes(null)); + await svg.cache.putIfAbsent( + loader.cacheKey(null), + () => loader.loadBytes(null), + ); } @override diff --git a/lib/features/home_view/widgets/news_section.dart b/lib/features/home_view/widgets/news_section.dart index 1fc848a0..a21e676f 100644 --- a/lib/features/home_view/widgets/news_section.dart +++ b/lib/features/home_view/widgets/news_section.dart @@ -1,23 +1,23 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../api_base/directus_assets_url.dart'; -import '../../../config/ui_config.dart'; -import '../../../utils/context_extensions.dart'; -import '../../../utils/where_non_null_iterable.dart'; -import '../../../widgets/big_preview_card.dart'; -import '../../../widgets/my_error_widget.dart'; -import '../../../widgets/subsection_header.dart'; -import '../../../config/nav_bar_config.dart'; -import '../../navigator/navigator/nested_navigator.dart'; -import '../../navigator/navigator/tab_bar_navigator.dart'; -import '../repositories/infos_repository/infos_preview_repository.dart'; -import 'loading_widgets/big_scrollable_section_loading.dart'; -import 'paddings.dart'; +import "../../../api_base/directus_assets_url.dart"; +import "../../../config/nav_bar_config.dart"; +import "../../../config/ui_config.dart"; +import "../../../utils/context_extensions.dart"; +import "../../../utils/where_non_null_iterable.dart"; +import "../../../widgets/big_preview_card.dart"; +import "../../../widgets/my_error_widget.dart"; +import "../../../widgets/subsection_header.dart"; +import "../../navigator/navigator/nested_navigator.dart"; +import "../../navigator/navigator/tab_bar_navigator.dart"; +import "../repositories/infos_repository/infos_preview_repository.dart"; +import "loading_widgets/big_scrollable_section_loading.dart"; +import "paddings.dart"; class NewsSection extends ConsumerWidget { const NewsSection({super.key}); - static void goToInfoTab(WidgetRef ref) => + static Future goToInfoTab(WidgetRef ref) async => ref.read(navigatorProvider).changeTabBar(NavBarEnum.info); @override @@ -25,9 +25,9 @@ class NewsSection extends ConsumerWidget { children: [ SubsectionHeader( title: context.localize.whats_up, - onClick: () => goToInfoTab(ref), + onClick: () async => goToInfoTab(ref), ), - const _NewsList() + const _NewsList(), ], ); } @@ -41,8 +41,9 @@ class _NewsList extends ConsumerWidget { return switch (state) { AsyncLoading() => const Padding( padding: EdgeInsets.only( - left: HomeScreenConfig.paddingMedium, - top: HomeScreenConfig.paddingMedium), + left: HomeScreenConfig.paddingMedium, + top: HomeScreenConfig.paddingMedium, + ), child: BigScrollableSectionLoading(), ), AsyncError(:final error) => MyErrorWidget(error), @@ -51,13 +52,15 @@ class _NewsList extends ConsumerWidget { children: [ Padding( padding: const EdgeInsets.only( - left: HomeScreenConfig.paddingSmall, - right: HomeScreenConfig.paddingSmall, - top: HomeScreenConfig.paddingMedium), + left: HomeScreenConfig.paddingSmall, + right: HomeScreenConfig.paddingSmall, + top: HomeScreenConfig.paddingMedium, + ), child: SizedBox( - height: BigPreviewCardConfig.cardHeight, - child: _NewsDataList(value.whereNonNull.toList())), - ) + height: BigPreviewCardConfig.cardHeight, + child: _NewsDataList(value.whereNonNull.toList()), + ), + ), ], ) }; @@ -72,20 +75,21 @@ class _NewsDataList extends StatelessWidget { @override Widget build(BuildContext context) { return ListView.builder( - cacheExtent: 4, - shrinkWrap: true, - scrollDirection: Axis.horizontal, - itemCount: value.length, - itemBuilder: (BuildContext context, int index) { - return MediumLeftPadding( - child: BigPreviewCard( - title: value[index].title, - shortDescription: value[index].content ?? "", - photoUrl: value[index].cover?.filename_disk?.directusUrl, - date: value[index].date_created, - onClick: () {}, - ), - ); - }); + cacheExtent: 4, + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: value.length, + itemBuilder: (BuildContext context, int index) { + return MediumLeftPadding( + child: BigPreviewCard( + title: value[index].title, + shortDescription: value[index].content ?? "", + photoUrl: value[index].cover?.filename_disk?.directusUrl, + date: value[index].date_created, + onClick: () {}, + ), + ); + }, + ); } } diff --git a/lib/features/home_view/widgets/paddings.dart b/lib/features/home_view/widgets/paddings.dart index e5cb4619..9dcfc1a9 100644 --- a/lib/features/home_view/widgets/paddings.dart +++ b/lib/features/home_view/widgets/paddings.dart @@ -1,18 +1,18 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/ui_config.dart'; +import "../../../config/ui_config.dart"; class SmallHorizontalPadding extends Padding { const SmallHorizontalPadding({super.key, super.child}) : super( padding: const EdgeInsets.only( left: HomeScreenConfig.paddingSmall, - right: HomeScreenConfig.paddingSmall)); + right: HomeScreenConfig.paddingSmall,),); } class MediumLeftPadding extends Padding { const MediumLeftPadding({super.key, super.child}) : super( padding: - const EdgeInsets.only(left: HomeScreenConfig.paddingMedium)); + const EdgeInsets.only(left: HomeScreenConfig.paddingMedium),); } diff --git a/lib/features/home_view/widgets/parking_section.dart b/lib/features/home_view/widgets/parking_section.dart index 57e86e05..5ad058c8 100644 --- a/lib/features/home_view/widgets/parking_section.dart +++ b/lib/features/home_view/widgets/parking_section.dart @@ -1,24 +1,24 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../utils/context_extensions.dart'; -import '../../../utils/where_non_null_iterable.dart'; -import '../../../widgets/my_error_widget.dart'; -import '../../../widgets/subsection_header.dart'; -import '../../../config/nav_bar_config.dart'; -import '../../iparking/controllers.dart'; -import '../../iparking/models/parking_model.dart'; -import '../../iparking/repositories/parkings_repo.dart'; -import '../../navigator/navigator/nested_navigator.dart'; -import '../../navigator/navigator/tab_bar_navigator.dart'; -import 'buildings_section/building_card.dart'; -import 'loading_widgets/scrollable_section_loading.dart'; -import 'paddings.dart'; +import "../../../config/nav_bar_config.dart"; +import "../../../utils/context_extensions.dart"; +import "../../../utils/where_non_null_iterable.dart"; +import "../../../widgets/my_error_widget.dart"; +import "../../../widgets/subsection_header.dart"; +import "../../iparking/controllers.dart"; +import "../../iparking/models/parking_model.dart"; +import "../../iparking/repositories/parkings_repo.dart"; +import "../../navigator/navigator/nested_navigator.dart"; +import "../../navigator/navigator/tab_bar_navigator.dart"; +import "buildings_section/building_card.dart"; +import "loading_widgets/scrollable_section_loading.dart"; +import "paddings.dart"; class ParkingSection extends ConsumerWidget { const ParkingSection({super.key}); - static void goToParkingsTab(WidgetRef ref) => + static Future goToParkingsTab(WidgetRef ref) async => ref.read(navigatorProvider).changeTabBar(NavBarEnum.parkings); @override @@ -27,9 +27,9 @@ class ParkingSection extends ConsumerWidget { SubsectionHeader( title: context.localize.parkings_title, actionTitle: context.localize.map_button, - onClick: () => ParkingSection.goToParkingsTab(ref), + onClick: () async => ParkingSection.goToParkingsTab(ref), ), - const _ParkingsList() + const _ParkingsList(), ], ); } @@ -71,8 +71,8 @@ class _DataListParkingsTiles extends ConsumerWidget { child: BuildingCard( buildingName: parking.symbol, imageUrl: parking.iParkPhotoUrl, - onTap: () { - ParkingSection.goToParkingsTab(ref); + onTap: () async { + await ParkingSection.goToParkingsTab(ref); ref .watch(activeParkingControllerProvider.notifier) .selectBuilding(parking); diff --git a/lib/features/home_view/widgets/study_circles_section.dart b/lib/features/home_view/widgets/study_circles_section.dart index f61ba496..98500c87 100644 --- a/lib/features/home_view/widgets/study_circles_section.dart +++ b/lib/features/home_view/widgets/study_circles_section.dart @@ -1,20 +1,20 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../api_base/directus_assets_url.dart'; -import '../../../config/ui_config.dart'; -import '../../../shared_repositories/sci_clubs_repository/scientific_circles_repository.dart'; -import '../../../utils/context_extensions.dart'; -import '../../../utils/where_non_null_iterable.dart'; -import '../../../widgets/big_preview_card.dart'; -import '../../../widgets/my_error_widget.dart'; -import '../../../widgets/subsection_header.dart'; -import '../../../config/nav_bar_config.dart'; -import '../../navigator/navigator/detail_view_navigator.dart'; -import '../../navigator/navigator/nested_navigator.dart'; -import '../../navigator/navigator/tab_bar_navigator.dart'; -import 'loading_widgets/big_scrollable_section_loading.dart'; -import 'paddings.dart'; +import "../../../api_base/directus_assets_url.dart"; +import "../../../config/nav_bar_config.dart"; +import "../../../config/ui_config.dart"; +import "../../../shared_repositories/sci_clubs_repository/scientific_circles_repository.dart"; +import "../../../utils/context_extensions.dart"; +import "../../../utils/where_non_null_iterable.dart"; +import "../../../widgets/big_preview_card.dart"; +import "../../../widgets/my_error_widget.dart"; +import "../../../widgets/subsection_header.dart"; +import "../../navigator/navigator/detail_view_navigator.dart"; +import "../../navigator/navigator/nested_navigator.dart"; +import "../../navigator/navigator/tab_bar_navigator.dart"; +import "loading_widgets/big_scrollable_section_loading.dart"; +import "paddings.dart"; class StudyCirclesSection extends ConsumerWidget { const StudyCirclesSection({super.key}); @@ -23,12 +23,15 @@ class StudyCirclesSection extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) => Column( children: [ SubsectionHeader( - title: context.localize.study_circles, - actionTitle: context.localize.list, - onClick: () { - ref.read(navigatorProvider).changeTabBar(NavBarEnum.sciCircles); - }), - const _StudyCirclesList() + title: context.localize.study_circles, + actionTitle: context.localize.list, + onClick: () async { + await ref + .read(navigatorProvider) + .changeTabBar(NavBarEnum.sciCircles); + }, + ), + const _StudyCirclesList(), ], ); } @@ -42,8 +45,9 @@ class _StudyCirclesList extends ConsumerWidget { return switch (state) { AsyncLoading() => const Padding( padding: EdgeInsets.only( - left: HomeScreenConfig.paddingMedium, - top: HomeScreenConfig.paddingMedium), + left: HomeScreenConfig.paddingMedium, + top: HomeScreenConfig.paddingMedium, + ), child: BigScrollableSectionLoading(), ), AsyncError(:final error) => MyErrorWidget(error), @@ -56,7 +60,8 @@ class _StudyCirclesList extends ConsumerWidget { height: BigPreviewCardConfig.cardHeight, child: _StudyCirclesDataList( value.whereNonNull.toList(), - )) + ), + ) }; } } @@ -66,26 +71,28 @@ class _StudyCirclesDataList extends ConsumerWidget { final List studyCircles; - static void goToDetailView(WidgetRef ref, String id) { - ref.read(navigatorProvider).navigateToStudyCircleDetails(id); + static Future goToDetailView(WidgetRef ref, String id) async { + await ref.read(navigatorProvider).navigateToStudyCircleDetails(id); } @override Widget build(BuildContext context, WidgetRef ref) { return ListView.builder( - cacheExtent: 4, - shrinkWrap: true, - scrollDirection: Axis.horizontal, - itemCount: studyCircles.length, - itemBuilder: (BuildContext context, int index) { - final circle = studyCircles[index]; - return MediumLeftPadding( - child: BigPreviewCard( - title: circle.name, - shortDescription: circle.shortDescription ?? "", - photoUrl: circle.logo?.filename_disk?.directusUrl, - onClick: () => goToDetailView(ref, circle.id)), - ); - }); + cacheExtent: 4, + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: studyCircles.length, + itemBuilder: (BuildContext context, int index) { + final circle = studyCircles[index]; + return MediumLeftPadding( + child: BigPreviewCard( + title: circle.name, + shortDescription: circle.shortDescription ?? "", + photoUrl: circle.logo?.filename_disk?.directusUrl, + onClick: () async => goToDetailView(ref, circle.id), + ), + ); + }, + ); } } diff --git a/lib/features/iparking/api_client/iparking_client.dart b/lib/features/iparking/api_client/iparking_client.dart index ca4711ac..5ff1a195 100644 --- a/lib/features/iparking/api_client/iparking_client.dart +++ b/lib/features/iparking/api_client/iparking_client.dart @@ -1,7 +1,7 @@ -import 'package:dio/dio.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:dio/dio.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../config/api_base_config.dart'; +import "../../../config/api_base_config.dart"; part "iparking_client.g.dart"; diff --git a/lib/features/iparking/api_client/iparking_commands.dart b/lib/features/iparking/api_client/iparking_commands.dart index 0d22ed0b..6bc53406 100644 --- a/lib/features/iparking/api_client/iparking_commands.dart +++ b/lib/features/iparking/api_client/iparking_commands.dart @@ -1,14 +1,14 @@ -import 'package:collection/collection.dart'; -import 'package:dio/dio.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:collection/collection.dart"; +import "package:dio/dio.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import 'iparking_client.dart'; +import "iparking_client.dart"; class FetchPlacesCommand extends DelegatingMap { FetchPlacesCommand(DateTime timestamp) : super({ "o": "get_parks", - "ts": timestamp.millisecondsSinceEpoch.toString() + "ts": timestamp.millisecondsSinceEpoch.toString(), }); } @@ -23,7 +23,7 @@ class FetchChartCommand extends DelegatingMap { class ParkingsOfflineException implements Exception {} extension IParkingCommands on AutoDisposeRef { - Future postIParkingCommand(Map command) async { + Future> postIParkingCommand(Map command) async { try { return await watch(iParkingClientProvider).post("", data: command); } on DioException catch (_) { diff --git a/lib/features/iparking/controllers.dart b/lib/features/iparking/controllers.dart index 8d84eb8b..122a453c 100644 --- a/lib/features/iparking/controllers.dart +++ b/lib/features/iparking/controllers.dart @@ -1,12 +1,12 @@ -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; - -import '../map_view/controllers/active_map_marker_cntrl.dart'; -import '../map_view/controllers/controllers_set.dart'; -import '../map_view/controllers/map_controller.dart'; -import '../map_view/controllers/map_data_controller.dart'; -import 'models/parking_model.dart'; -import 'repositories/parkings_repo.dart'; +import "package:google_maps_flutter/google_maps_flutter.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; + +import "../map_view/controllers/active_map_marker_cntrl.dart"; +import "../map_view/controllers/controllers_set.dart"; +import "../map_view/controllers/map_controller.dart"; +import "../map_view/controllers/map_data_controller.dart"; +import "models/parking_model.dart"; +import "repositories/parkings_repo.dart"; part "controllers.g.dart"; diff --git a/lib/features/iparking/models/parking_model.dart b/lib/features/iparking/models/parking_model.dart index bedef830..4044c383 100644 --- a/lib/features/iparking/models/parking_model.dart +++ b/lib/features/iparking/models/parking_model.dart @@ -1,17 +1,16 @@ // ignore_for_file: invalid_annotation_target -import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import "package:freezed_annotation/freezed_annotation.dart"; +import "package:google_maps_flutter/google_maps_flutter.dart"; -import '../../map_view/controllers/controllers_set.dart'; -import '../api_client/iparking_client.dart'; +import "../../map_view/controllers/controllers_set.dart"; +import "../api_client/iparking_client.dart"; part "parking_model.freezed.dart"; part "parking_model.g.dart"; @freezed class ParkingPlace with _$ParkingPlace implements GoogleNavigable { - const ParkingPlace._(); @Implements() @JsonSerializable(fieldRename: FieldRename.snake) @@ -35,6 +34,7 @@ class ParkingPlace with _$ParkingPlace implements GoogleNavigable { required String address, required String trend, }) = _ParkingPlace; + const ParkingPlace._(); factory ParkingPlace.fromJson(Map json) => _$ParkingPlaceFromJson(json); @@ -71,12 +71,12 @@ extension _FormatIParkingDate on String { extension TrendDash on String { String get dashForm { switch (this) { - case '0': + case "0": return "-"; - case '1': + case "1": return "/"; - case '-1': - return "\\"; + case "-1": + return r"\"; default: return "?"; } diff --git a/lib/features/iparking/parking_view.dart b/lib/features/iparking/parking_view.dart index effb8b17..cb706359 100644 --- a/lib/features/iparking/parking_view.dart +++ b/lib/features/iparking/parking_view.dart @@ -1,14 +1,14 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:google_maps_flutter/google_maps_flutter.dart"; -import '../../config/map_view_config.dart'; -import '../../utils/context_extensions.dart'; -import '../map_view/map_view.dart'; -import '../map_view/utils/map_marker_utils.dart'; -import 'controllers.dart'; -import 'models/parking_model.dart'; -import 'widgets/parking_tile.dart'; +import "../../config/map_view_config.dart"; +import "../../utils/context_extensions.dart"; +import "../map_view/map_view.dart"; +import "../map_view/utils/map_marker_utils.dart"; +import "controllers.dart"; +import "models/parking_model.dart"; +import "widgets/parking_tile.dart"; class ParkingsMapView extends ConsumerWidget { const ParkingsMapView({super.key}); @@ -23,7 +23,7 @@ class ParkingsMapView extends ConsumerWidget { mapSheetSize: MapViewBottomSheetConfig.parkingsMapSheetSize, mapControllers: parkingsMapControllers, mapTileBuilder: ParkingTile.new, - markerBuilder: (item, ref, isActive) => Marker( + markerBuilder: (item, ref, {required bool isActive}) => Marker( consumeTapEvents: true, markerId: MarkerId(item.id), position: item.location, diff --git a/lib/features/iparking/repositories/parkings_repo.dart b/lib/features/iparking/repositories/parkings_repo.dart index 0f266cda..23ed5f3a 100644 --- a/lib/features/iparking/repositories/parkings_repo.dart +++ b/lib/features/iparking/repositories/parkings_repo.dart @@ -1,11 +1,11 @@ -import 'dart:async'; +import "dart:async"; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../api_client/iparking_client.dart'; -import '../api_client/iparking_commands.dart'; -import '../models/parking_model.dart'; +import "../api_client/iparking_client.dart"; +import "../api_client/iparking_commands.dart"; +import "../models/parking_model.dart"; part "parkings_repo.g.dart"; @@ -22,9 +22,9 @@ extension RefIntervalRefresh on Ref { @riverpod Stream?> parkingsRepo(ParkingsRepoRef ref) async* { ref.setRefresh(IParkingConfig.parkingsRefreshInterval); - final response = await ref.postIParkingCommand( + final response = await ref.postIParkingCommand>( FetchPlacesCommand(DateTime.now()), ); - final list = response.data["places"] as List; - yield list.map((e) => ParkingPlace.fromJson(e)).toList(); + final list = response.data?["places"] as List>?; + yield list?.map(ParkingPlace.fromJson).toList(); } diff --git a/lib/features/iparking/widgets/offline_parkings.dart b/lib/features/iparking/widgets/offline_parkings.dart index 3da3115e..d8096d8b 100644 --- a/lib/features/iparking/widgets/offline_parkings.dart +++ b/lib/features/iparking/widgets/offline_parkings.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../utils/context_extensions.dart'; -import '../../offline_messages/widgets/general_offline_message.dart'; -import '../repositories/parkings_repo.dart'; +import "../../../utils/context_extensions.dart"; +import "../../offline_messages/widgets/general_offline_message.dart"; +import "../repositories/parkings_repo.dart"; class OfflineParkings extends ConsumerWidget { const OfflineParkings({super.key}); diff --git a/lib/features/iparking/widgets/parking_tile.dart b/lib/features/iparking/widgets/parking_tile.dart index 318e66b7..a522e01f 100644 --- a/lib/features/iparking/widgets/parking_tile.dart +++ b/lib/features/iparking/widgets/parking_tile.dart @@ -1,14 +1,14 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../controllers.dart'; -import '../models/parking_model.dart'; -import 'parking_wide_tile_card.dart'; +import "../controllers.dart"; +import "../models/parking_model.dart"; +import "parking_wide_tile_card.dart"; class ParkingTile extends ConsumerWidget { const ParkingTile( - this.parking, - this.isActive, { + this.parking, { + required this.isActive, super.key, }); diff --git a/lib/features/iparking/widgets/parking_wide_tile_card.dart b/lib/features/iparking/widgets/parking_wide_tile_card.dart index 8ca18773..43d7d3e1 100644 --- a/lib/features/iparking/widgets/parking_wide_tile_card.dart +++ b/lib/features/iparking/widgets/parking_wide_tile_card.dart @@ -1,11 +1,11 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/ui_config.dart'; -import '../../../theme/app_theme.dart'; -import '../../../theme/iparking_theme.dart'; -import '../../iparking_chart/chart_widget.dart'; -import '../models/parking_model.dart'; -import 'i_parking_icons_icons.icons.dart'; +import "../../../config/ui_config.dart"; +import "../../../theme/app_theme.dart"; +import "../../../theme/iparking_theme.dart"; +import "../../iparking_chart/chart_widget.dart"; +import "../models/parking_model.dart"; +import "i_parking_icons_icons.icons.dart"; class ParkingWideTileCard extends StatelessWidget { const ParkingWideTileCard({ @@ -42,13 +42,13 @@ class ParkingWideTileCard extends StatelessWidget { Container( width: double.infinity, padding: IParkingConfig.padding, - child: _LeftColumn(parking, isActive), + child: _LeftColumn(parking, isActive: isActive), ), Container( width: double.infinity, height: WideTileCardConfig.imageSize, padding: IParkingConfig.padding, - child: _RightColumn(parking, isActive), + child: _RightColumn(parking, isActive: isActive), ), ], ), @@ -58,7 +58,7 @@ class ParkingWideTileCard extends StatelessWidget { } class _LeftColumn extends StatelessWidget { - const _LeftColumn(this.parking, this.isActive); + const _LeftColumn(this.parking, {required this.isActive}); final ParkingPlace parking; final bool isActive; @@ -107,7 +107,7 @@ class _LeftColumn extends StatelessWidget { } class _RightColumn extends StatelessWidget { - const _RightColumn(this.parking, this.isActive); + const _RightColumn(this.parking, {required this.isActive}); final ParkingPlace parking; final bool isActive; diff --git a/lib/features/iparking_chart/chart_elements/chart_border.dart b/lib/features/iparking_chart/chart_elements/chart_border.dart index 67e124aa..98bd1461 100644 --- a/lib/features/iparking_chart/chart_elements/chart_border.dart +++ b/lib/features/iparking_chart/chart_elements/chart_border.dart @@ -1,7 +1,7 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; +import "package:fl_chart/fl_chart.dart"; +import "package:flutter/material.dart"; -import '../../../theme/app_theme.dart'; +import "../../../theme/app_theme.dart"; class ChartBorder extends FlBorderData { ChartBorder(BuildContext context) diff --git a/lib/features/iparking_chart/chart_elements/chart_grid.dart b/lib/features/iparking_chart/chart_elements/chart_grid.dart index ae4a8238..c44ed1c4 100644 --- a/lib/features/iparking_chart/chart_elements/chart_grid.dart +++ b/lib/features/iparking_chart/chart_elements/chart_grid.dart @@ -1,7 +1,7 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; +import "package:fl_chart/fl_chart.dart"; +import "package:flutter/material.dart"; -import '../../../theme/app_theme.dart'; +import "../../../theme/app_theme.dart"; class GridLine extends FlLine { GridLine(BuildContext context) diff --git a/lib/features/iparking_chart/chart_elements/chart_line.dart b/lib/features/iparking_chart/chart_elements/chart_line.dart index dd1c8511..dfbde35b 100644 --- a/lib/features/iparking_chart/chart_elements/chart_line.dart +++ b/lib/features/iparking_chart/chart_elements/chart_line.dart @@ -1,9 +1,9 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; +import "package:fl_chart/fl_chart.dart"; +import "package:flutter/material.dart"; -import '../../../theme/app_theme.dart'; -import '../models/chart_point.dart'; -import '../utils/chart_utils.dart'; +import "../../../theme/app_theme.dart"; +import "../models/chart_point.dart"; +import "../utils/chart_utils.dart"; class ChartLine extends LineChartBarData { ChartLine(BuildContext context, List chartData) @@ -13,7 +13,6 @@ class ChartLine extends LineChartBarData { barWidth: 1, isStrokeCapRound: true, dotData: const FlDotData( - show: true, checkToShowDot: IChartUtils.showDotOrNot, ), belowBarData: BarAreaData( diff --git a/lib/features/iparking_chart/chart_elements/labels_bottom.dart b/lib/features/iparking_chart/chart_elements/labels_bottom.dart index 596081c8..bddf780a 100644 --- a/lib/features/iparking_chart/chart_elements/labels_bottom.dart +++ b/lib/features/iparking_chart/chart_elements/labels_bottom.dart @@ -1,8 +1,8 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/widgets.dart'; +import "package:fl_chart/fl_chart.dart"; +import "package:flutter/widgets.dart"; -import '../../../theme/app_theme.dart'; -import '../utils/chart_utils.dart'; +import "../../../theme/app_theme.dart"; +import "../utils/chart_utils.dart"; class BottomLabels extends AxisTitles { BottomLabels(BuildContext context) diff --git a/lib/features/iparking_chart/chart_elements/labels_left.dart b/lib/features/iparking_chart/chart_elements/labels_left.dart index 8d9fd89d..09671c7b 100644 --- a/lib/features/iparking_chart/chart_elements/labels_left.dart +++ b/lib/features/iparking_chart/chart_elements/labels_left.dart @@ -1,7 +1,7 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/widgets.dart'; +import "package:fl_chart/fl_chart.dart"; +import "package:flutter/widgets.dart"; -import '../../../theme/app_theme.dart'; +import "../../../theme/app_theme.dart"; extension WillMaxLabelOverlap on TitleMeta { bool get isMaxLabelOverlapping { @@ -27,6 +27,6 @@ class LeftLabels extends AxisTitles { style: context.iParkingTheme.chart, ), ); - }), + },), ); } diff --git a/lib/features/iparking_chart/chart_widget.dart b/lib/features/iparking_chart/chart_widget.dart index 0de821c5..8a52c95d 100644 --- a/lib/features/iparking_chart/chart_widget.dart +++ b/lib/features/iparking_chart/chart_widget.dart @@ -1,16 +1,16 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../config/ui_config.dart'; -import '../../theme/app_theme.dart'; -import '../../theme/iparking_theme.dart'; -import '../../utils/context_extensions.dart'; -import '../../widgets/loading_widgets/simple_previews/preview_card_loading.dart'; -import '../../widgets/my_error_widget.dart'; -import '../iparking/models/parking_model.dart'; -import 'models/chart_point.dart'; -import 'repositories/chart_repo.dart'; -import 'widgets/ichart.dart'; +import "../../config/ui_config.dart"; +import "../../theme/app_theme.dart"; +import "../../theme/iparking_theme.dart"; +import "../../utils/context_extensions.dart"; +import "../../widgets/loading_widgets/simple_previews/preview_card_loading.dart"; +import "../../widgets/my_error_widget.dart"; +import "../iparking/models/parking_model.dart"; +import "models/chart_point.dart"; +import "repositories/chart_repo.dart"; +import "widgets/ichart.dart"; class ParkingChart extends ConsumerWidget { const ParkingChart(this.parkingPlace, {super.key}); @@ -45,19 +45,18 @@ class ParkingChart extends ConsumerWidget { if (chartPoints.isEmpty) { return Center( child: Text(context.localize.noChartData, - style: context.iParkingTheme.subtitleLight.withoutShadows), + style: context.iParkingTheme.subtitleLight.withoutShadows,), ); } return Padding( padding: const EdgeInsets.only( top: 20, - left: 0, right: 25, bottom: 10, ), child: IChart(chartPoints, parkingPlace), ); - }), + },), }; } } diff --git a/lib/features/iparking_chart/models/chart_data_model.dart b/lib/features/iparking_chart/models/chart_data_model.dart index 21ae392c..07051d96 100644 --- a/lib/features/iparking_chart/models/chart_data_model.dart +++ b/lib/features/iparking_chart/models/chart_data_model.dart @@ -1,4 +1,4 @@ -import 'package:freezed_annotation/freezed_annotation.dart'; +import "package:freezed_annotation/freezed_annotation.dart"; part "chart_data_model.freezed.dart"; part "chart_data_model.g.dart"; diff --git a/lib/features/iparking_chart/models/chart_point.dart b/lib/features/iparking_chart/models/chart_point.dart index b4d406eb..8d56ef47 100644 --- a/lib/features/iparking_chart/models/chart_point.dart +++ b/lib/features/iparking_chart/models/chart_point.dart @@ -1,8 +1,8 @@ -import 'package:collection/collection.dart'; -import 'package:fl_chart/fl_chart.dart'; +import "package:collection/collection.dart"; +import "package:fl_chart/fl_chart.dart"; -import 'chart_data_model.dart'; -import 'hour_label.dart'; +import "chart_data_model.dart"; +import "hour_label.dart"; class ChartPoint extends FlSpot { ChartPoint(super.x, super.y); @@ -16,7 +16,7 @@ class ChartPoint extends FlSpot { extension ToCharPointsExt on RawChartData { Iterable toChartPoints() sync* { - for (var pair in IterableZip( + for (final pair in IterableZip( [labels, data], )) { yield ChartPoint.parse(pair.first, pair.last); diff --git a/lib/features/iparking_chart/models/hour_label.dart b/lib/features/iparking_chart/models/hour_label.dart index e69c7f73..48dd7f56 100644 --- a/lib/features/iparking_chart/models/hour_label.dart +++ b/lib/features/iparking_chart/models/hour_label.dart @@ -9,10 +9,10 @@ extension type HourLabel(double numericalPoint) implements double { } static double _convertToNumericalRepresentation(String time) { - List parts = time.split(":"); + final List parts = time.split(":"); if (parts.length < 2) return 0; - int hours = int.tryParse(parts[0]) ?? 0; - int minutes = int.tryParse(parts[1]) ?? 0; + final int hours = int.tryParse(parts[0]) ?? 0; + final int minutes = int.tryParse(parts[1]) ?? 0; return hours + (minutes / 60); } } diff --git a/lib/features/iparking_chart/repositories/chart_repo.dart b/lib/features/iparking_chart/repositories/chart_repo.dart index c0cdbebd..683b6fea 100644 --- a/lib/features/iparking_chart/repositories/chart_repo.dart +++ b/lib/features/iparking_chart/repositories/chart_repo.dart @@ -1,16 +1,20 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../iparking/api_client/iparking_commands.dart'; -import '../models/chart_data_model.dart'; -import '../../iparking/models/parking_model.dart'; +import "../../iparking/api_client/iparking_commands.dart"; +import "../../iparking/models/parking_model.dart"; +import "../models/chart_data_model.dart"; part "chart_repo.g.dart"; @riverpod Future chartRepo( - ChartRepoRef ref, ParkingPlace parkingPlace) async { - final response = await ref.postIParkingCommand( + ChartRepoRef ref, + ParkingPlace parkingPlace, +) async { + final response = await ref.postIParkingCommand>( FetchChartCommand(parkingPlace.id), ); - return RawChartData.fromJson(response.data["slots"] as Map); + return RawChartData.fromJson( + response.data?["slots"], + ); } diff --git a/lib/features/iparking_chart/utils/chart_utils.dart b/lib/features/iparking_chart/utils/chart_utils.dart index bef1021d..9d1fe77c 100644 --- a/lib/features/iparking_chart/utils/chart_utils.dart +++ b/lib/features/iparking_chart/utils/chart_utils.dart @@ -1,12 +1,12 @@ -import 'dart:math'; +import "dart:math"; -import 'package:collection/collection.dart'; -import 'package:fl_chart/fl_chart.dart'; +import "package:collection/collection.dart"; +import "package:fl_chart/fl_chart.dart"; -import '../../../config/ui_config.dart'; -import '../../iparking/models/parking_model.dart'; -import '../models/chart_point.dart'; -import '../models/hour_label.dart'; +import "../../../config/ui_config.dart"; +import "../../iparking/models/parking_model.dart"; +import "../models/chart_point.dart"; +import "../models/hour_label.dart"; extension IChartUtils on List { double get minX => first.x; diff --git a/lib/features/iparking_chart/utils/range_hour_points.dart b/lib/features/iparking_chart/utils/range_hour_points.dart index baec3381..3bdda6c0 100644 --- a/lib/features/iparking_chart/utils/range_hour_points.dart +++ b/lib/features/iparking_chart/utils/range_hour_points.dart @@ -1,5 +1,5 @@ -import '../../../utils/generate_range.dart'; -import '../models/hour_label.dart'; +import "../../../utils/generate_range.dart"; +import "../models/hour_label.dart"; Iterable generateRangeHourPoints( double start, diff --git a/lib/features/iparking_chart/widgets/ichart.dart b/lib/features/iparking_chart/widgets/ichart.dart index cd32c513..ebf7c3ec 100644 --- a/lib/features/iparking_chart/widgets/ichart.dart +++ b/lib/features/iparking_chart/widgets/ichart.dart @@ -1,15 +1,15 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; +import "package:fl_chart/fl_chart.dart"; +import "package:flutter/material.dart"; -import '../../iparking/models/parking_model.dart'; -import '../chart_elements/chart_border.dart'; -import '../chart_elements/chart_grid.dart'; -import '../chart_elements/chart_line.dart'; -import '../chart_elements/labels_bottom.dart'; -import '../chart_elements/labels_left.dart'; -import '../models/chart_point.dart'; -import '../utils/chart_utils.dart'; -import 'reversed_label.dart'; +import "../../iparking/models/parking_model.dart"; +import "../chart_elements/chart_border.dart"; +import "../chart_elements/chart_grid.dart"; +import "../chart_elements/chart_line.dart"; +import "../chart_elements/labels_bottom.dart"; +import "../chart_elements/labels_left.dart"; +import "../models/chart_point.dart"; +import "../utils/chart_utils.dart"; +import "reversed_label.dart"; class IChart extends StatelessWidget { const IChart(this.chartData, this.parkingPlace, {super.key}); @@ -47,5 +47,5 @@ class IChart extends StatelessWidget { } class HideLabels extends AxisTitles { - const HideLabels() : super(sideTitles: const SideTitles(showTitles: false)); + const HideLabels() : super(sideTitles: const SideTitles()); } diff --git a/lib/features/iparking_chart/widgets/reversed_label.dart b/lib/features/iparking_chart/widgets/reversed_label.dart index 7ccbae7c..39d320b8 100644 --- a/lib/features/iparking_chart/widgets/reversed_label.dart +++ b/lib/features/iparking_chart/widgets/reversed_label.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../theme/app_theme.dart'; -import '../../../utils/context_extensions.dart'; +import "../../../theme/app_theme.dart"; +import "../../../utils/context_extensions.dart"; class ReversedLabel extends StatelessWidget { const ReversedLabel({ diff --git a/lib/features/map_view/controllers/active_map_marker_cntrl.dart b/lib/features/map_view/controllers/active_map_marker_cntrl.dart index 01e7af95..ba0c121b 100644 --- a/lib/features/map_view/controllers/active_map_marker_cntrl.dart +++ b/lib/features/map_view/controllers/active_map_marker_cntrl.dart @@ -1,7 +1,7 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../utils/google_maps_link_utils.dart'; -import 'controllers_set.dart'; +import "../utils/google_maps_link_utils.dart"; +import "controllers_set.dart"; mixin ActiveMarkerController on AutoDisposeNotifier { diff --git a/lib/features/map_view/controllers/bottom_sheet_controller.dart b/lib/features/map_view/controllers/bottom_sheet_controller.dart index 1447dc45..2ee5cca5 100644 --- a/lib/features/map_view/controllers/bottom_sheet_controller.dart +++ b/lib/features/map_view/controllers/bottom_sheet_controller.dart @@ -1,11 +1,12 @@ -import 'package:flutter/material.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:flutter/material.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; part "bottom_sheet_controller.g.dart"; @riverpod DraggableScrollableController bottomSheetController( - BottomSheetControllerRef ref) => + BottomSheetControllerRef ref, +) => DraggableScrollableController(); extension SafeDraggableScrollableControllerWrapper @@ -35,11 +36,11 @@ class BottomSheetPixels extends _$BottomSheetPixels { ); } - void onSearchBoxTap() { + Future onSearchBoxTap() async { const fullScreenFrac = 1.0; final controller = ref.read(bottomSheetControllerProvider); if (controller.isAttached && controller.size < fullScreenFrac) { - controller.animateTo( + await controller.animateTo( fullScreenFrac, duration: Durations.medium2, curve: Curves.decelerate, diff --git a/lib/features/map_view/controllers/controllers_set.dart b/lib/features/map_view/controllers/controllers_set.dart index 32b61c8a..5951b882 100644 --- a/lib/features/map_view/controllers/controllers_set.dart +++ b/lib/features/map_view/controllers/controllers_set.dart @@ -1,9 +1,9 @@ -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:google_maps_flutter/google_maps_flutter.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import 'active_map_marker_cntrl.dart'; -import 'map_controller.dart'; -import 'map_data_controller.dart'; +import "active_map_marker_cntrl.dart"; +import "map_controller.dart"; +import "map_data_controller.dart"; abstract class GoogleNavigable { LatLng get location; diff --git a/lib/features/map_view/controllers/map_controller.dart b/lib/features/map_view/controllers/map_controller.dart index f87b893e..39e92b57 100644 --- a/lib/features/map_view/controllers/map_controller.dart +++ b/lib/features/map_view/controllers/map_controller.dart @@ -1,14 +1,16 @@ -import 'dart:async'; +import "dart:async"; -import 'package:flutter/material.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; -import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:flutter/material.dart"; +import "package:google_maps_flutter/google_maps_flutter.dart"; -import '../../../config/map_view_config.dart'; -import 'bottom_sheet_controller.dart'; -import 'controllers_set.dart'; +import "package:google_maps_flutter_android/google_maps_flutter_android.dart"; + +import "package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; + +import "../../../config/map_view_config.dart"; +import "bottom_sheet_controller.dart"; +import "controllers_set.dart"; mixin MapController on AutoDisposeNotifier { @@ -23,7 +25,7 @@ mixin MapController } } - void onMapCreated(GoogleMapController controller) async { + Future onMapCreated(GoogleMapController controller) async { ref.invalidate(bottomSheetPixelsProvider); state = controller; final activeMarker = ref.read(mapControllers.activeMarker); @@ -33,7 +35,7 @@ mixin MapController void zoomOnMarker(T item) { Future.delayed( Durations.short1, - () => state?.animateCamera( + () async => state?.animateCamera( CameraUpdate.newCameraPosition( CameraPosition( target: item.location, diff --git a/lib/features/map_view/controllers/map_data_controller.dart b/lib/features/map_view/controllers/map_data_controller.dart index 6b79bb53..2a9d56f4 100644 --- a/lib/features/map_view/controllers/map_data_controller.dart +++ b/lib/features/map_view/controllers/map_data_controller.dart @@ -1,6 +1,6 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import 'controllers_set.dart'; +import "controllers_set.dart"; mixin MapDataController on AutoDisposeAsyncNotifier?> { @@ -16,7 +16,7 @@ mixin MapDataController final itemsData = await ref.watch(mapControllers.sourceRepo.future); return itemsData?.where( - _filterMethod); // or elsewhere a whole list, filtered by text field + _filterMethod,); // or elsewhere a whole list, filtered by text field } bool filterMethod(T item, String filterStr); diff --git a/lib/features/map_view/map_view.dart b/lib/features/map_view/map_view.dart index 5bcafde5..99e118b2 100644 --- a/lib/features/map_view/map_view.dart +++ b/lib/features/map_view/map_view.dart @@ -1,17 +1,17 @@ -import 'dart:math'; +import "dart:math"; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/foundation.dart"; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../config/map_view_config.dart'; -import '../../theme/app_theme.dart'; -import 'controllers/bottom_sheet_controller.dart'; -import 'controllers/controllers_set.dart'; -import 'widgets/bottom_scroll_sheet/bottom_scroll_sheet.dart'; -import 'widgets/bottom_scroll_sheet/sheet_layout_scheme.dart'; -import 'widgets/map_config.dart'; -import 'widgets/map_widget.dart'; +import "../../config/map_view_config.dart"; +import "../../theme/app_theme.dart"; +import "controllers/bottom_sheet_controller.dart"; +import "controllers/controllers_set.dart"; +import "widgets/bottom_scroll_sheet/bottom_scroll_sheet.dart"; +import "widgets/bottom_scroll_sheet/sheet_layout_scheme.dart"; +import "widgets/map_config.dart"; +import "widgets/map_widget.dart"; class GeneralMapView extends ConsumerWidget { const GeneralMapView({ @@ -48,10 +48,12 @@ class GeneralMapView extends ConsumerWidget { backgroundColor: context.colorTheme.whiteSoap, body: kIsWeb || isBigScreen ? HorizontalWebLayout() - : Stack(children: [ - MapWidget(), - BottomScrollSheet(), - ]), + : Stack( + children: [ + MapWidget(), + BottomScrollSheet(), + ], + ), ), ), ); @@ -65,14 +67,14 @@ class HorizontalWebLayout extends StatelessWidget { @override Widget build(BuildContext context) { - final panelWidth = min(350.0, MediaQuery.sizeOf(context).width); + final double panelWidth = min(350, MediaQuery.sizeOf(context).width); return Row( children: [ SizedBox( width: panelWidth, child: SheetLayoutScheme(), ), - Expanded(child: MapWidget()) + Expanded(child: MapWidget()), ], ); } diff --git a/lib/features/map_view/utils/google_maps_link_utils.dart b/lib/features/map_view/utils/google_maps_link_utils.dart index d59aeffd..40c52ebb 100644 --- a/lib/features/map_view/utils/google_maps_link_utils.dart +++ b/lib/features/map_view/utils/google_maps_link_utils.dart @@ -1,9 +1,9 @@ -import 'dart:io'; +import "dart:io"; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:logger/logger.dart'; +import "package:google_maps_flutter/google_maps_flutter.dart"; +import "package:logger/logger.dart"; -import '../../../utils/launch_url_util.dart'; +import "../../../utils/launch_url_util.dart"; class GoogleMapsLinkUtils { static Future navigateTo( @@ -14,7 +14,7 @@ class GoogleMapsLinkUtils { if (!launchedFirst) { final launchedBackup = await LaunchUrlUtil.launch(link.backupLink); if (!launchedBackup) { - Logger().e('Could not launch any directions'); + Logger().e("Could not launch any directions"); } } } diff --git a/lib/features/map_view/utils/location_permission_status_provider.dart b/lib/features/map_view/utils/location_permission_status_provider.dart index b99c3717..ced8d8f9 100644 --- a/lib/features/map_view/utils/location_permission_status_provider.dart +++ b/lib/features/map_view/utils/location_permission_status_provider.dart @@ -1,7 +1,7 @@ -import 'package:permission_handler/permission_handler.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:permission_handler/permission_handler.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; -part 'location_permission_status_provider.g.dart'; +part "location_permission_status_provider.g.dart"; @riverpod Future locationPermissionStatus(LocationPermissionStatusRef ref) async { @@ -11,4 +11,3 @@ Future locationPermissionStatus(LocationPermissionStatusRef ref) async { } return status.isGranted; } - diff --git a/lib/features/map_view/utils/map_marker_utils.dart b/lib/features/map_view/utils/map_marker_utils.dart index ea422c65..22553338 100644 --- a/lib/features/map_view/utils/map_marker_utils.dart +++ b/lib/features/map_view/utils/map_marker_utils.dart @@ -1,11 +1,11 @@ -import 'dart:ui' as ui; +import "dart:ui" as ui; -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import '../../../config/map_view_config.dart'; -import '../../../gen/assets.gen.dart'; +import "package:flutter/foundation.dart"; +import "package:flutter/services.dart"; +import "package:flutter/widgets.dart"; +import "package:google_maps_flutter/google_maps_flutter.dart"; +import "../../../config/map_view_config.dart"; +import "../../../gen/assets.gen.dart"; class MapMarkerUtils { static late final BitmapDescriptor mapMarker; @@ -51,8 +51,8 @@ class _AssetScaledLoader { ); final fi = await codec.getNextFrame(); final decode = await fi.image.toByteData(format: ui.ImageByteFormat.png); - return BitmapDescriptor.fromBytes(decode!.buffer.asUint8List()); - } catch (e) { + return BitmapDescriptor.bytes(decode!.buffer.asUint8List()); + } on Exception { return BitmapDescriptor.defaultMarker; // fallback } } diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/bottom_scroll_sheet.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/bottom_scroll_sheet.dart index 8a6572f7..415c7dbb 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/bottom_scroll_sheet.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/bottom_scroll_sheet.dart @@ -1,15 +1,15 @@ -import 'dart:math'; +import "dart:math"; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../../config/map_view_config.dart'; -import '../../../../theme/app_theme.dart'; -import '../../controllers/bottom_sheet_controller.dart'; -import '../../controllers/controllers_set.dart'; -import '../map_config.dart'; -import 'map_view_pop_behaviour.dart'; -import 'sheet_layout_scheme.dart'; +import "../../../../config/map_view_config.dart"; +import "../../../../theme/app_theme.dart"; +import "../../controllers/bottom_sheet_controller.dart"; +import "../../controllers/controllers_set.dart"; +import "../map_config.dart"; +import "map_view_pop_behaviour.dart"; +import "sheet_layout_scheme.dart"; class BottomScrollSheet extends ConsumerWidget { const BottomScrollSheet({super.key}); @@ -29,8 +29,8 @@ class BottomScrollSheet extends ConsumerWidget { final minSheetHeight = sheetSize.minSheetHeight; - final recommendedSheetFraction = - min(1.0, recomendedSheetHeight / screenHeight); + final double recommendedSheetFraction = + min(1, recomendedSheetHeight / screenHeight); final minSheetFraction = min(0.25, minSheetHeight / screenHeight); return MapViewPopBehaviour( @@ -38,7 +38,6 @@ class BottomScrollSheet extends ConsumerWidget { child: DraggableScrollableSheet( controller: ref.watch(bottomSheetControllerProvider), initialChildSize: recommendedSheetFraction, - maxChildSize: 1, // factor 1 means 100% available height minChildSize: minSheetFraction, snap: true, snapSizes: [recommendedSheetFraction], diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/data_list.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/data_list.dart index 3ddd8954..f1dd882e 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/data_list.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/data_list.dart @@ -1,13 +1,13 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../../config/map_view_config.dart'; -import '../../../../theme/app_theme.dart'; -import '../../../../utils/where_non_null_iterable.dart'; -import '../../../../widgets/my_error_widget.dart'; -import '../../controllers/controllers_set.dart'; -import '../map_config.dart'; -import 'data_list_loading.dart'; +import "../../../../config/map_view_config.dart"; +import "../../../../theme/app_theme.dart"; +import "../../../../utils/where_non_null_iterable.dart"; +import "../../../../widgets/my_error_widget.dart"; +import "../../controllers/controllers_set.dart"; +import "../map_config.dart"; +import "data_list_loading.dart"; class DataSliverList extends ConsumerWidget { const DataSliverList({super.key}); @@ -38,19 +38,24 @@ class _DataSliverList extends StatelessWidget { left: MapViewBottomSheetConfig.horizontalPadding, right: MapViewBottomSheetConfig.horizontalPadding, ), - sliver: Consumer(builder: (context, ref, child) { - final activeItem = ref.watch(context.activeMarkerController()); - return SliverList.builder( - itemCount: items.length, - itemBuilder: (context, index) { - final item = items[index]; - return Padding( - padding: const EdgeInsets.only(bottom: 16), - child: context.mapTileBuilder()(item, activeItem == item), - ); - }, - ); - }), + sliver: Consumer( + builder: (context, ref, child) { + final activeItem = ref.watch(context.activeMarkerController()); + return SliverList.builder( + itemCount: items.length, + itemBuilder: (context, index) { + final item = items[index]; + return Padding( + padding: const EdgeInsets.only(bottom: 16), + child: context.mapTileBuilder()( + item, + isActive: activeItem == item, + ), + ); + }, + ); + }, + ), ); } } diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/data_list_loading.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/data_list_loading.dart index 4224357d..a223392c 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/data_list_loading.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/data_list_loading.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../config/map_view_config.dart'; -import '../../../../widgets/loading_widgets/specific_imitations/wide_tile_loading.dart'; +import "../../../../config/map_view_config.dart"; +import "../../../../widgets/loading_widgets/specific_imitations/wide_tile_loading.dart"; class DataListLoading extends StatelessWidget { const DataListLoading({super.key}); diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/drag_handle.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/drag_handle.dart index 12a1b124..21e8b210 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/drag_handle.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/drag_handle.dart @@ -1,15 +1,18 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../config/map_view_config.dart'; -import '../../../../theme/app_theme.dart'; +import "../../../../config/map_view_config.dart"; +import "../../../../theme/app_theme.dart"; class DragHandle extends SliverPersistentHeaderDelegate { const DragHandle(); @override Widget build( - BuildContext context, double shrinkOffset, bool overlapsContent) { - return Container( + BuildContext context, + double shrinkOffset, + bool overlapsContent, + ) { + return ColoredBox( color: context.colorTheme.whiteSoap, child: const Center( child: _LineHandle(), diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/map_view_pop_behaviour.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/map_view_pop_behaviour.dart index b0596b9f..e511c611 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/map_view_pop_behaviour.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/map_view_pop_behaviour.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../controllers/bottom_sheet_controller.dart'; -import '../../controllers/controllers_set.dart'; -import '../map_config.dart'; +import "../../controllers/bottom_sheet_controller.dart"; +import "../../controllers/controllers_set.dart"; +import "../map_config.dart"; class MapViewPopBehaviour extends ConsumerWidget { const MapViewPopBehaviour({ @@ -30,6 +30,6 @@ class MapViewPopBehaviour extends ConsumerWidget { ref.read(bottomSheetControllerProvider).resetSafe(); } }, - child: child); + child: child,); } } diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart index 02a49e5d..74c135bd 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart @@ -1,12 +1,12 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../../config/map_view_config.dart'; -import '../../../../theme/app_theme.dart'; -import '../../../../utils/context_extensions.dart'; -import '../../../iparking/widgets/i_parking_icons_icons.icons.dart'; -import '../../controllers/controllers_set.dart'; -import '../map_config.dart'; +import "../../../../config/map_view_config.dart"; +import "../../../../theme/app_theme.dart"; +import "../../../../utils/context_extensions.dart"; +import "../../../iparking/widgets/i_parking_icons_icons.icons.dart"; +import "../../controllers/controllers_set.dart"; +import "../map_config.dart"; class NavigateButton extends ConsumerWidget { const NavigateButton({super.key}); @@ -32,7 +32,7 @@ class NavigateButton extends ConsumerWidget { label: Text( context.localize.navigate, style: context.textTheme.boldBodyOrange, - )), + ),), ); } } diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/sheet_layout_scheme.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/sheet_layout_scheme.dart index ab9b345a..aa591fbc 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/sheet_layout_scheme.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/sheet_layout_scheme.dart @@ -1,13 +1,13 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../../widgets/search_box_app_bar.dart'; -import '../../controllers/bottom_sheet_controller.dart'; -import '../../controllers/controllers_set.dart'; -import '../map_config.dart'; -import 'data_list.dart'; -import 'drag_handle.dart'; -import 'navigate_button.dart'; +import "../../../../widgets/search_box_app_bar.dart"; +import "../../controllers/bottom_sheet_controller.dart"; +import "../../controllers/controllers_set.dart"; +import "../map_config.dart"; +import "data_list.dart"; +import "drag_handle.dart"; +import "navigate_button.dart"; class SheetLayoutScheme extends ConsumerWidget { const SheetLayoutScheme({ diff --git a/lib/features/map_view/widgets/map_config.dart b/lib/features/map_view/widgets/map_config.dart index 926c5480..71723002 100644 --- a/lib/features/map_view/widgets/map_config.dart +++ b/lib/features/map_view/widgets/map_config.dart @@ -1,14 +1,17 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:google_maps_flutter/google_maps_flutter.dart"; -import '../../../config/map_view_config.dart'; -import '../controllers/controllers_set.dart'; +import "../../../config/map_view_config.dart"; +import "../controllers/controllers_set.dart"; typedef MarkerBuilder = Marker Function( - T item, WidgetRef ref, bool isActive); + T item, + WidgetRef ref, { + required bool isActive, +}); -typedef MapTileBuilder = Widget Function(T item, bool isActive); +typedef MapTileBuilder = Widget Function(T item, {required bool isActive}); typedef MapViewTexts = ({ String emptyList, @@ -33,13 +36,14 @@ class MapConfig extends InheritedWidget { final MapSheetSize mapSheetSize; static MapConfig? maybeOf( - BuildContext context) { + BuildContext context, + ) { return context.dependOnInheritedWidgetOfExactType>(); } static MapConfig of(BuildContext context) { final result = maybeOf(context); - assert(result != null, 'No MapConfig found in context'); + assert(result != null, "No MapConfig found in context"); return result!; } diff --git a/lib/features/map_view/widgets/map_widget.dart b/lib/features/map_view/widgets/map_widget.dart index e07e5792..8cbc3192 100644 --- a/lib/features/map_view/widgets/map_widget.dart +++ b/lib/features/map_view/widgets/map_widget.dart @@ -1,14 +1,14 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:google_maps_flutter/google_maps_flutter.dart"; -import '../../../config/map_view_config.dart'; -import '../../../utils/where_non_null_iterable.dart'; -import '../../../widgets/my_error_widget.dart'; -import '../controllers/bottom_sheet_controller.dart'; -import '../controllers/controllers_set.dart'; -import '../utils/location_permission_status_provider.dart'; -import 'map_config.dart'; +import "../../../config/map_view_config.dart"; +import "../../../utils/where_non_null_iterable.dart"; +import "../../../widgets/my_error_widget.dart"; +import "../controllers/bottom_sheet_controller.dart"; +import "../controllers/controllers_set.dart"; +import "../utils/location_permission_status_provider.dart"; +import "map_config.dart"; class MapWidget extends ConsumerWidget { const MapWidget({super.key}); @@ -42,23 +42,22 @@ class _MapWidget extends ConsumerWidget { AsyncLoading() => const SizedBox(), AsyncError(:final error) => MyErrorWidget(error), AsyncValue(:final value) => GoogleMap( - mapType: MapWidgetConfig.mapType, initialCameraPosition: MapWidgetConfig.defaultCameraPosition, onMapCreated: mapController.onMapCreated, onTap: mapController.onMapBackgroundTap, markers: items - .map((item) => context.markerBuilder()( - item, - ref, - activeItem == item, - )) + .map( + (item) => context.markerBuilder()( + item, + ref, + isActive: activeItem == item, + ), + ) .toSet(), myLocationEnabled: value ?? false, myLocationButtonEnabled: value ?? false, mapToolbarEnabled: false, zoomControlsEnabled: false, - zoomGesturesEnabled: true, - compassEnabled: true, padding: EdgeInsets.only( top: MediaQuery.paddingOf(context).top, bottom: ref.watch(bottomSheetPixelsProvider), diff --git a/lib/features/navigator/navigator/detail_view_navigator.dart b/lib/features/navigator/navigator/detail_view_navigator.dart index 346f9f74..07e91cb1 100644 --- a/lib/features/navigator/navigator/detail_view_navigator.dart +++ b/lib/features/navigator/navigator/detail_view_navigator.dart @@ -1,26 +1,26 @@ -import '../../../config/nav_bar_config.dart'; -import '../../../config/routes.dart'; -import 'nested_navigator.dart'; -import 'tab_bar_navigator.dart'; +import "../../../config/nav_bar_config.dart"; +import "../../../config/routes.dart"; +import "nested_navigator.dart"; +import "tab_bar_navigator.dart"; /// Extracted logic of navigating to detailed views extension DetailViewNavigator on NestedNavigator { - void navigateToStudyCircleDetails(String argument) { - changeTabBar(NavBarEnum.sciCircles); - navigatorKey.currentState?.pushNamed( + Future navigateToStudyCircleDetails(String argument) async { + await changeTabBar(NavBarEnum.sciCircles); + await navigatorKey.currentState?.pushNamed( AppRoutes.studyCircleDetails, arguments: argument, ); } - void navigateToAboutUs() { - changeTabBar(NavBarEnum.info); - navigatorKey.currentState?.pushNamed(AppRoutes.aboutUsDetail); + Future navigateToAboutUs() async { + await changeTabBar(NavBarEnum.info); + await navigatorKey.currentState?.pushNamed(AppRoutes.aboutUsDetail); } - void navigateToDepartmentDetails(String argument) { - changeTabBar(NavBarEnum.faculties); - navigatorKey.currentState?.pushNamed( + Future navigateToDepartmentDetails(String argument) async { + await changeTabBar(NavBarEnum.faculties); + await navigatorKey.currentState?.pushNamed( AppRoutes.departmentDetails, arguments: argument, ); diff --git a/lib/features/navigator/navigator/nested_navigator.dart b/lib/features/navigator/navigator/nested_navigator.dart index 9e66af3e..1adf7a78 100644 --- a/lib/features/navigator/navigator/nested_navigator.dart +++ b/lib/features/navigator/navigator/nested_navigator.dart @@ -1,12 +1,12 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../config/navigator_config.dart'; -import '../../../config/routes.dart'; -import '../../bottom_nav_bar/bottom_nav_bar_controller.dart'; -import '../page_routes/detail_page_route.dart'; -import '../page_routes/tabbar_page_route.dart'; -import '../utils/android_pop_bug_workaround.dart'; +import "../../../config/navigator_config.dart"; +import "../../../config/routes.dart"; +import "../../bottom_nav_bar/bottom_nav_bar_controller.dart"; +import "../page_routes/detail_page_route.dart"; +import "../page_routes/tabbar_page_route.dart"; +import "../utils/android_pop_bug_workaround.dart"; import "../utils/extract_tabbar_arg.dart"; class NestedNavigator { @@ -14,11 +14,11 @@ class NestedNavigator { final Ref ref; final navigatorKey = GlobalKey(); - void handleNestedPop() { + Future handleNestedPop() async { if (androidSpecialPopTreatment) { return handleAndroidSpecialPop(); } - navigatorKey.currentState?.maybePop(); + await navigatorKey.currentState?.maybePop(); } Route onGenerateRoute(RouteSettings settings) { diff --git a/lib/features/navigator/navigator/tab_bar_navigator.dart b/lib/features/navigator/navigator/tab_bar_navigator.dart index f1a6c0d9..774ff8e3 100644 --- a/lib/features/navigator/navigator/tab_bar_navigator.dart +++ b/lib/features/navigator/navigator/tab_bar_navigator.dart @@ -1,18 +1,18 @@ -import '../../../config/routes.dart'; -import '../../bottom_nav_bar/bottom_nav_bar_controller.dart'; -import '../../../config/nav_bar_config.dart'; -import 'nested_navigator.dart'; +import "../../../config/nav_bar_config.dart"; +import "../../../config/routes.dart"; +import "../../bottom_nav_bar/bottom_nav_bar_controller.dart"; +import "nested_navigator.dart"; /// Extracted logic of navigating to tabs in tab view extension TabBarNavigator on NestedNavigator { - void changeTabBar(NavBarEnum newTab) { + Future changeTabBar(NavBarEnum newTab) async { final currentTab = ref.read(bottomNavBarControllerProvider); if (currentTab != newTab) { navigatorKey.currentState?.popUntil( (route) => route.settings.name == AppRoutes.root, ); - navigatorKey.currentState?.pushNamed( + await navigatorKey.currentState?.pushNamed( AppRoutes.root, arguments: newTab, ); diff --git a/lib/features/navigator/page_routes/detail_page_route.dart b/lib/features/navigator/page_routes/detail_page_route.dart index 3011afe3..ff6bb3c4 100644 --- a/lib/features/navigator/page_routes/detail_page_route.dart +++ b/lib/features/navigator/page_routes/detail_page_route.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/routes.dart'; -import '../../../widgets/my_error_widget.dart'; -import '../../department_details/department_details.dart'; -import '../../guide/widgets/about_us/about_us_tab.dart'; -import '../../study_circle_details/study_circle_details.dart'; +import "../../../config/routes.dart"; +import "../../../widgets/my_error_widget.dart"; +import "../../department_details/department_details.dart"; +import "../../guide/widgets/about_us/about_us_tab.dart"; +import "../../study_circle_details/study_circle_details.dart"; class DetailPageRoute extends MaterialPageRoute { DetailPageRoute(RouteSettings settings) @@ -14,7 +14,7 @@ class DetailPageRoute extends MaterialPageRoute { AppRoutes.studyCircleDetails => (_) => const StudyCircleDetails(), AppRoutes.departmentDetails => (_) => const DepartmentDetails(), AppRoutes.aboutUsDetail => (_) => const AboutUsTab(), - _ => (_) => MyErrorWidget('Invalid route: ${settings.name}') + _ => (_) => MyErrorWidget("Invalid route: ${settings.name}") }, settings: settings, ); diff --git a/lib/features/navigator/page_routes/tabbar_page_route.dart b/lib/features/navigator/page_routes/tabbar_page_route.dart index 7a098194..44b3314e 100644 --- a/lib/features/navigator/page_routes/tabbar_page_route.dart +++ b/lib/features/navigator/page_routes/tabbar_page_route.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/nav_bar_config.dart'; -import '../../../config/navigator_config.dart'; -import '../../../config/routes.dart'; -import '../../../theme/app_theme.dart'; +import "../../../config/nav_bar_config.dart"; +import "../../../config/navigator_config.dart"; +import "../../../config/routes.dart"; +import "../../../theme/app_theme.dart"; class TabBarPageRoute extends MaterialPageRoute { TabBarPageRoute({ @@ -25,14 +25,18 @@ class TabBarPageRoute extends MaterialPageRoute { final NavBarEnum newTab; @override - Widget buildTransitions(BuildContext context, Animation animation, - Animation secondaryAnimation, Widget child) { + Widget buildTransitions( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + Widget child, + ) { final isNewTabMoreToRight = newTab.index >= previousTab.index; final animationTween = Tween( begin: isNewTabMoreToRight - ? const Offset(1.0, 0.0) // slide from right - : const Offset(-1.0, 0.0), // slide from left + ? const Offset(1, 0) // slide from right + : const Offset(-1, 0), // slide from left end: Offset.zero, ).chain(CurveTween(curve: Curves.ease)); @@ -48,7 +52,7 @@ class InfoPlaceholder extends StatelessWidget { @override Widget build(BuildContext context) { - return Container( + return ColoredBox( color: context.colorTheme.whiteSoap, child: const Center( child: Text("Info"), diff --git a/lib/features/navigator/root_navigator_widget.dart b/lib/features/navigator/root_navigator_widget.dart index c532e3c2..e3d2caa4 100644 --- a/lib/features/navigator/root_navigator_widget.dart +++ b/lib/features/navigator/root_navigator_widget.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../bottom_nav_bar/bottom_nav_bar.dart'; -import '../bottom_nav_bar/bottom_nav_bar_controller.dart'; -import 'navigator/nested_navigator.dart'; -import 'utils/android_pop_bug_workaround.dart'; +import "../bottom_nav_bar/bottom_nav_bar.dart"; +import "../bottom_nav_bar/bottom_nav_bar_controller.dart"; +import "navigator/nested_navigator.dart"; +import "utils/android_pop_bug_workaround.dart"; class RootNavigatorWidget extends ConsumerWidget { const RootNavigatorWidget({super.key}); diff --git a/lib/features/navigator/utils/android_pop_bug_workaround.dart b/lib/features/navigator/utils/android_pop_bug_workaround.dart index 649c5c47..d4f1dccf 100644 --- a/lib/features/navigator/utils/android_pop_bug_workaround.dart +++ b/lib/features/navigator/utils/android_pop_bug_workaround.dart @@ -1,19 +1,19 @@ -import 'dart:io'; +import "dart:io"; -import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; +import "package:flutter/foundation.dart"; +import "package:flutter/services.dart"; -import '../navigator/nested_navigator.dart'; +import "../navigator/nested_navigator.dart"; extension AndroidPopBugWorkaround on NestedNavigator { - static const platform = MethodChannel('topwr.app.android.channel'); + static const platform = MethodChannel("topwr.app.android.channel"); bool get androidSpecialPopTreatment => !kIsWeb && Platform.isAndroid && navigatorKey.currentState?.canPop() == false; - void handleAndroidSpecialPop() { - platform.invokeMethod('putAppInBackground'); + Future handleAndroidSpecialPop() async { + await platform.invokeMethod("putAppInBackground"); } } diff --git a/lib/features/navigator/utils/extract_tabbar_arg.dart b/lib/features/navigator/utils/extract_tabbar_arg.dart index 57e72a6a..21d94cec 100644 --- a/lib/features/navigator/utils/extract_tabbar_arg.dart +++ b/lib/features/navigator/utils/extract_tabbar_arg.dart @@ -1,6 +1,6 @@ -import 'package:flutter/widgets.dart'; +import "package:flutter/widgets.dart"; -import '../../../config/nav_bar_config.dart'; +import "../../../config/nav_bar_config.dart"; extension ExtractTabbarArg on RouteSettings? { NavBarEnum? get selectedTab { diff --git a/lib/features/navigator/utils/selected_tab_observer.dart b/lib/features/navigator/utils/selected_tab_observer.dart index 199effe4..464ed3f9 100644 --- a/lib/features/navigator/utils/selected_tab_observer.dart +++ b/lib/features/navigator/utils/selected_tab_observer.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/nav_bar_config.dart'; -import 'extract_tabbar_arg.dart'; +import "../../../config/nav_bar_config.dart"; +import "extract_tabbar_arg.dart"; class SelectedTabObserver extends RouteObserver> { void Function(NavBarEnum tab) onTabChanged; diff --git a/lib/features/offline_messages/messages_config.dart b/lib/features/offline_messages/messages_config.dart index b96b43a4..03dda458 100644 --- a/lib/features/offline_messages/messages_config.dart +++ b/lib/features/offline_messages/messages_config.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../config/ttl_config.dart'; -import '../../utils/context_extensions.dart'; +import "../../config/ttl_config.dart"; +import "../../utils/context_extensions.dart"; extension GqlOfflineMessage on BuildContext { UnmodifiableTtlKeyMap _offlineMessagesLocalized() => diff --git a/lib/features/offline_messages/widgets/general_offline_message.dart b/lib/features/offline_messages/widgets/general_offline_message.dart index 295b9fd4..f78a029d 100644 --- a/lib/features/offline_messages/widgets/general_offline_message.dart +++ b/lib/features/offline_messages/widgets/general_offline_message.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../theme/app_theme.dart'; -import '../../../utils/context_extensions.dart'; -import '../../../widgets/my_text_button.dart'; +import "../../../theme/app_theme.dart"; +import "../../../utils/context_extensions.dart"; +import "../../../widgets/my_text_button.dart"; class OfflineMessage extends StatelessWidget { const OfflineMessage(this.errMessage, {super.key, this.onRefresh}); @@ -16,7 +16,7 @@ class OfflineMessage extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( - padding: const EdgeInsets.symmetric(horizontal: 30.0, vertical: 8), + padding: const EdgeInsets.symmetric(horizontal: 30, vertical: 8), child: Text( errMessage, style: context.textTheme.title, @@ -24,7 +24,7 @@ class OfflineMessage extends StatelessWidget { ), ), Padding( - padding: const EdgeInsets.all(8.0), + padding: const EdgeInsets.all(8), child: Icon( Icons.wifi_off_outlined, size: 30, diff --git a/lib/features/offline_messages/widgets/grapgql_offline_message.dart b/lib/features/offline_messages/widgets/grapgql_offline_message.dart index af174e48..fab966fc 100644 --- a/lib/features/offline_messages/widgets/grapgql_offline_message.dart +++ b/lib/features/offline_messages/widgets/grapgql_offline_message.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../config/ttl_config.dart'; -import '../../../api_base/ttl/ttl_service.dart'; -import '../messages_config.dart'; -import 'general_offline_message.dart'; +import "../../../api_base/ttl/ttl_service.dart"; +import "../../../config/ttl_config.dart"; +import "../messages_config.dart"; +import "general_offline_message.dart"; class OfflineGraphQLMessage extends ConsumerWidget { const OfflineGraphQLMessage(this.exceptionSourceKey, {super.key}); diff --git a/lib/features/splash_screen/splash_screen.dart b/lib/features/splash_screen/splash_screen.dart index ab8db39d..99f8cc5c 100644 --- a/lib/features/splash_screen/splash_screen.dart +++ b/lib/features/splash_screen/splash_screen.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import 'splash_screen_controller.dart'; -import 'widgets/flutter_splash_screen.dart'; +import "splash_screen_controller.dart"; +import "widgets/flutter_splash_screen.dart"; class SplashScreen extends ConsumerWidget { const SplashScreen({ diff --git a/lib/features/splash_screen/splash_screen_controller.dart b/lib/features/splash_screen/splash_screen_controller.dart index e7dfe32c..8ad41ac1 100644 --- a/lib/features/splash_screen/splash_screen_controller.dart +++ b/lib/features/splash_screen/splash_screen_controller.dart @@ -1,17 +1,17 @@ -import 'dart:io'; +import "dart:io"; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_native_splash/flutter_native_splash.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:flutter/foundation.dart"; +import "package:flutter/material.dart"; +import "package:flutter_native_splash/flutter_native_splash.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../api_base/hive_init.dart'; -import '../../config/ui_config.dart'; -import '../home_view/widgets/logo_app_bar.dart'; -import '../map_view/controllers/map_controller.dart'; -import '../map_view/utils/map_marker_utils.dart'; +import "../../api_base/hive_init.dart"; +import "../../config/ui_config.dart"; +import "../home_view/widgets/logo_app_bar.dart"; +import "../map_view/controllers/map_controller.dart"; +import "../map_view/utils/map_marker_utils.dart"; -part 'splash_screen_controller.g.dart'; +part "splash_screen_controller.g.dart"; @riverpod class SplashScreenController extends _$SplashScreenController { @@ -22,7 +22,7 @@ class SplashScreenController extends _$SplashScreenController { */ await MapMarkerUtils.loadMapMarkerAssets(context); await initHiveForGraphqlCache(); - AppBarLogo.precacheImageIfAbsent(); + await AppBarLogo.precacheImageIfAbsent(); await MapController.initializeGoogleMapsRenderingAndroid(); } @@ -34,12 +34,13 @@ class SplashScreenController extends _$SplashScreenController { } /// Whether preserves native splash or show flutter one - static get _preserveNativeSplash => kIsWeb || !Platform.isAndroid; + static bool get _preserveNativeSplash => kIsWeb || !Platform.isAndroid; /// Preserves native splash screen, except of Android, where FlutterSplashScreen is showed as soon as possible static void preserveNativeSplashScreen() { if (_preserveNativeSplash) { - WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); + final WidgetsBinding widgetsBinding = + WidgetsFlutterBinding.ensureInitialized(); FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); } } diff --git a/lib/features/splash_screen/widgets/fade_in_gradient_animation.dart b/lib/features/splash_screen/widgets/fade_in_gradient_animation.dart index 5ecfc5b6..ee7869dc 100644 --- a/lib/features/splash_screen/widgets/fade_in_gradient_animation.dart +++ b/lib/features/splash_screen/widgets/fade_in_gradient_animation.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; class FadeInGradientAnimation extends StatefulWidget { /// Animates between two LinearGradients on first build @@ -6,7 +6,7 @@ class FadeInGradientAnimation extends StatefulWidget { {super.key, required this.gradientStart, required this.gradientStop, - required this.duration}); + required this.duration,}); final LinearGradient gradientStart; final LinearGradient gradientStop; diff --git a/lib/features/splash_screen/widgets/fade_in_splash_gradient.dart b/lib/features/splash_screen/widgets/fade_in_splash_gradient.dart index 23f7e864..5f9c1606 100644 --- a/lib/features/splash_screen/widgets/fade_in_splash_gradient.dart +++ b/lib/features/splash_screen/widgets/fade_in_splash_gradient.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/ui_config.dart'; -import '../../../theme/colors.dart'; -import 'fade_in_gradient_animation.dart'; +import "../../../config/ui_config.dart"; +import "../../../theme/colors.dart"; +import "fade_in_gradient_animation.dart"; class FadeInSplashGradient extends FadeInGradientAnimation { /// Fades in from Android's single color splash to ToPwr LinearGradient on first build @@ -12,7 +12,7 @@ class FadeInSplashGradient extends FadeInGradientAnimation { SplashScreenConfig.androidNativeSplashColor, SplashScreenConfig.androidNativeSplashColor, SplashScreenConfig.androidNativeSplashColor, - ]), + ],), gradientStop: ColorsConsts.toPwrGradient, duration: SplashScreenConfig.animationDuration, ); diff --git a/lib/features/splash_screen/widgets/flutter_splash_screen.dart b/lib/features/splash_screen/widgets/flutter_splash_screen.dart index bc99318e..94e1f5be 100644 --- a/lib/features/splash_screen/widgets/flutter_splash_screen.dart +++ b/lib/features/splash_screen/widgets/flutter_splash_screen.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/ui_config.dart'; -import '../../../gen/assets.gen.dart'; -import 'fade_in_splash_gradient.dart'; +import "../../../config/ui_config.dart"; +import "../../../gen/assets.gen.dart"; +import "fade_in_splash_gradient.dart"; class FlutterSplashScreen extends StatelessWidget { const FlutterSplashScreen({ @@ -24,7 +24,7 @@ class FlutterSplashScreen extends StatelessWidget { child: Image.asset( Assets.splashScreen.splashLogo.path, ), - )), + ),), ], ), ); diff --git a/lib/features/student_research_group_tab/repositories/scientific_circles_tab_controller.dart b/lib/features/student_research_group_tab/repositories/scientific_circles_tab_controller.dart index 12ab2c4e..9943fb81 100644 --- a/lib/features/student_research_group_tab/repositories/scientific_circles_tab_controller.dart +++ b/lib/features/student_research_group_tab/repositories/scientific_circles_tab_controller.dart @@ -1,10 +1,10 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../shared_repositories/sci_clubs_repository/scientific_circles_repository.dart'; -import 'selected_tag_controller.dart'; -import 'tags_repository.dart'; +import "../../../shared_repositories/sci_clubs_repository/scientific_circles_repository.dart"; +import "selected_tag_controller.dart"; +import "tags_repository.dart"; -part 'scientific_circles_tab_controller.g.dart'; +part "scientific_circles_tab_controller.g.dart"; @riverpod class SearchScientificCirclesController @@ -19,20 +19,24 @@ class SearchScientificCirclesController @riverpod Future?> _sciCirclesFilteredByTextQuery( - _SciCirclesFilteredByTextQueryRef ref) async { + _SciCirclesFilteredByTextQueryRef ref, +) async { final originalList = await ref.watch(scientificCirclesRepositoryProvider.future); final query = ref.watch(searchScientificCirclesControllerProvider); - return originalList?.where((element) => - element == null || - element.name.toLowerCase().contains(query.toLowerCase()) || - (element.department?.name.toLowerCase().contains(query.toLowerCase()) ?? - false)); + return originalList?.where( + (element) => + element == null || + element.name.toLowerCase().contains(query.toLowerCase()) || + (element.department?.name.toLowerCase().contains(query.toLowerCase()) ?? + false), + ); } @riverpod Future?> scientificCircleList( - ScientificCircleListRef ref) async { + ScientificCircleListRef ref, +) async { final circles = await ref.watch(_sciCirclesFilteredByTextQueryProvider.future); diff --git a/lib/features/student_research_group_tab/repositories/selected_tag_controller.dart b/lib/features/student_research_group_tab/repositories/selected_tag_controller.dart index 24505828..ae78f3d0 100644 --- a/lib/features/student_research_group_tab/repositories/selected_tag_controller.dart +++ b/lib/features/student_research_group_tab/repositories/selected_tag_controller.dart @@ -1,8 +1,8 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import 'tags_repository.dart'; +import "tags_repository.dart"; -part 'selected_tag_controller.g.dart'; +part "selected_tag_controller.g.dart"; @riverpod class SelectedTagController extends _$SelectedTagController { diff --git a/lib/features/student_research_group_tab/repositories/tags_repository.dart b/lib/features/student_research_group_tab/repositories/tags_repository.dart index e566202a..e04f6998 100644 --- a/lib/features/student_research_group_tab/repositories/tags_repository.dart +++ b/lib/features/student_research_group_tab/repositories/tags_repository.dart @@ -1,12 +1,12 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../../api_base/watch_query_adapter.dart'; -import '../../../config/ttl_config.dart'; -import '../../../utils/watch_locale.dart'; -import '../../../utils/where_non_null_iterable.dart'; -import 'getTags.graphql.dart'; +import "../../../../api_base/watch_query_adapter.dart"; +import "../../../config/ttl_config.dart"; +import "../../../utils/watch_locale.dart"; +import "../../../utils/where_non_null_iterable.dart"; +import "getTags.graphql.dart"; -part 'tags_repository.g.dart'; +part "tags_repository.g.dart"; typedef Tag = Query$GetTags$Tags; // just alias for shorter type name @@ -29,5 +29,5 @@ Tag allTagSingleton(AllTagSingletonRef ref) => Future> tagsListRepository(TagsListRepositoryRef ref) async { final allTag = ref.watch(allTagSingletonProvider); final restTags = await ref.watch(remoteTagsRepositoryProvider.future); - return [allTag, ...restTags.whereNonNull.toList()]; + return [allTag, ...restTags.whereNonNull]; } diff --git a/lib/features/student_research_group_tab/scientific_circles_tab.dart b/lib/features/student_research_group_tab/scientific_circles_tab.dart index e34f3590..9ed84af4 100644 --- a/lib/features/student_research_group_tab/scientific_circles_tab.dart +++ b/lib/features/student_research_group_tab/scientific_circles_tab.dart @@ -1,14 +1,14 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../utils/context_extensions.dart'; -import '../../utils/where_non_null_iterable.dart'; -import '../../widgets/search_box_app_bar.dart'; -import 'repositories/scientific_circles_tab_controller.dart'; -import 'repositories/tags_repository.dart'; -import 'widgets/scientific_circles_list.dart'; -import 'widgets/tags_loading.dart'; -import 'widgets/tags_row.dart'; +import "../../utils/context_extensions.dart"; +import "../../utils/where_non_null_iterable.dart"; +import "../../widgets/search_box_app_bar.dart"; +import "repositories/scientific_circles_tab_controller.dart"; +import "repositories/tags_repository.dart"; +import "widgets/scientific_circles_list.dart"; +import "widgets/tags_loading.dart"; +import "widgets/tags_row.dart"; class ScientificCirclesTab extends ConsumerWidget { const ScientificCirclesTab({ @@ -21,7 +21,7 @@ class ScientificCirclesTab extends ConsumerWidget { appBar: SearchBoxAppBar( context, title: context.localize.study_circles, - bottomPadding: 16.0, + bottomPadding: 16, onQueryChanged: ref .watch(searchScientificCirclesControllerProvider.notifier) .onTextChanged, @@ -39,7 +39,7 @@ class _ScientificCirclesBody extends ConsumerWidget { final tags = ref.watch(tagsListRepositoryProvider); return Column(children: [ SizedBox( - height: 76.0, + height: 76, child: switch (tags) { AsyncLoading() => const TagsLoading(), AsyncError() => const SizedBox.shrink(), @@ -48,7 +48,7 @@ class _ScientificCirclesBody extends ConsumerWidget { ) }, ), - const ScientificCirclesList() - ]); + const ScientificCirclesList(), + ],); } } diff --git a/lib/features/student_research_group_tab/widgets/ensure_visible_tags.dart b/lib/features/student_research_group_tab/widgets/ensure_visible_tags.dart index 1ee2ca45..8cbf3858 100644 --- a/lib/features/student_research_group_tab/widgets/ensure_visible_tags.dart +++ b/lib/features/student_research_group_tab/widgets/ensure_visible_tags.dart @@ -1,9 +1,9 @@ -import 'dart:math'; +import "dart:math"; -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../utils/calc_lines.dart'; -import '../../../widgets/dual_text_max_lines.dart'; +import "../../../utils/calc_lines.dart"; +import "../../../widgets/dual_text_max_lines.dart"; class EnsureVisibleTags extends DualTextMaxLines { /// DualTextMaxLines with third text row that must have at least one line @@ -38,7 +38,9 @@ class EnsureVisibleTags extends DualTextMaxLines { ); final doubleLines = min( - maxTotalLines - 1, doubleText.calculateLines(constraints.maxWidth)); + maxTotalLines - 1, + doubleText.calculateLines(constraints.maxWidth), + ); final thirdLines = maxTotalLines - doubleLines; return Column( @@ -60,4 +62,4 @@ class EnsureVisibleTags extends DualTextMaxLines { }, ); } -} \ No newline at end of file +} diff --git a/lib/features/student_research_group_tab/widgets/scientific_circle_card.dart b/lib/features/student_research_group_tab/widgets/scientific_circle_card.dart index b71b7915..591072fe 100644 --- a/lib/features/student_research_group_tab/widgets/scientific_circle_card.dart +++ b/lib/features/student_research_group_tab/widgets/scientific_circle_card.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../api_base/directus_assets_url.dart'; -import '../../../config/ui_config.dart'; -import '../../../shared_repositories/sci_clubs_repository/scientific_circles_repository.dart'; -import '../../../widgets/my_cached_image.dart'; -import '../../../widgets/wide_tile_card.dart'; +import "../../../api_base/directus_assets_url.dart"; +import "../../../config/ui_config.dart"; +import "../../../shared_repositories/sci_clubs_repository/scientific_circles_repository.dart"; +import "../../../widgets/my_cached_image.dart"; +import "../../../widgets/wide_tile_card.dart"; class ResearchGroupCard extends StatelessWidget { final ScientificCircle sciCircle; @@ -14,20 +14,19 @@ class ResearchGroupCard extends StatelessWidget { @override Widget build(BuildContext context) { return WideTileCard( - isActive: false, title: sciCircle.name, subtitle: sciCircle.department?.name ?? "", onTap: onTap, secondSubtitle: sciCircle.tags - ?.map((tag) => '#${tag?.Tags_id?.name}') + ?.map((tag) => "#${tag?.Tags_id?.name}") .toList() - .join(', '), + .join(", "), activeShadows: null, trailing: Padding( padding: const EdgeInsets.only( right: ScientificCircleCardConfig.trailingPadding, top: ScientificCircleCardConfig.trailingPadding, - bottom: ScientificCircleCardConfig.trailingPadding), + bottom: ScientificCircleCardConfig.trailingPadding,), child: SizedBox.square( dimension: WideTileCardConfig.imageSize, child: Container( @@ -35,7 +34,7 @@ class ResearchGroupCard extends StatelessWidget { decoration: const BoxDecoration( borderRadius: BorderRadius.only( topRight: WideTileCardConfig.radius, - bottomRight: WideTileCardConfig.radius), + bottomRight: WideTileCardConfig.radius,), ), child: MyCachedImage( sciCircle.logo?.filename_disk.directusUrl, diff --git a/lib/features/student_research_group_tab/widgets/scientific_circle_loading.dart b/lib/features/student_research_group_tab/widgets/scientific_circle_loading.dart index 01256234..99014516 100644 --- a/lib/features/student_research_group_tab/widgets/scientific_circle_loading.dart +++ b/lib/features/student_research_group_tab/widgets/scientific_circle_loading.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../../widgets/loading_widgets/specific_imitations/wide_tile_loading.dart'; -import '../../../config/ui_config.dart'; +import "../../../../widgets/loading_widgets/specific_imitations/wide_tile_loading.dart"; +import "../../../config/ui_config.dart"; class ScientificCirclesLoading extends StatelessWidget { const ScientificCirclesLoading({super.key}); diff --git a/lib/features/student_research_group_tab/widgets/scientific_circles_list.dart b/lib/features/student_research_group_tab/widgets/scientific_circles_list.dart index bd0fad8f..4dd951a9 100644 --- a/lib/features/student_research_group_tab/widgets/scientific_circles_list.dart +++ b/lib/features/student_research_group_tab/widgets/scientific_circles_list.dart @@ -1,17 +1,17 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../config/ui_config.dart'; -import '../../../shared_repositories/sci_clubs_repository/scientific_circles_repository.dart'; -import '../../../theme/app_theme.dart'; -import '../../../utils/context_extensions.dart'; -import '../../../utils/where_non_null_iterable.dart'; -import '../../../widgets/my_error_widget.dart'; -import '../../navigator/navigator/detail_view_navigator.dart'; -import '../../navigator/navigator/nested_navigator.dart'; -import '../repositories/scientific_circles_tab_controller.dart'; -import 'scientific_circle_card.dart'; -import 'scientific_circle_loading.dart'; +import "../../../config/ui_config.dart"; +import "../../../shared_repositories/sci_clubs_repository/scientific_circles_repository.dart"; +import "../../../theme/app_theme.dart"; +import "../../../utils/context_extensions.dart"; +import "../../../utils/where_non_null_iterable.dart"; +import "../../../widgets/my_error_widget.dart"; +import "../../navigator/navigator/detail_view_navigator.dart"; +import "../../navigator/navigator/nested_navigator.dart"; +import "../repositories/scientific_circles_tab_controller.dart"; +import "scientific_circle_card.dart"; +import "scientific_circle_loading.dart"; class ScientificCirclesList extends ConsumerWidget { const ScientificCirclesList({super.key}); @@ -21,15 +21,18 @@ class ScientificCirclesList extends ConsumerWidget { final state = ref.watch(scientificCircleListProvider); return Expanded( - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: ScientificCirclesTabConfig.mediumPadding), - child: switch (state) { - AsyncLoading() => const ScientificCirclesLoading(), - AsyncError(:final error) => MyErrorWidget(error), - AsyncValue(:final value) => - _ScientificCirclesDataView(value.whereNonNull.toList()), - })); + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: ScientificCirclesTabConfig.mediumPadding, + ), + child: switch (state) { + AsyncLoading() => const ScientificCirclesLoading(), + AsyncError(:final error) => MyErrorWidget(error), + AsyncValue(:final value) => + _ScientificCirclesDataView(value.whereNonNull.toList()), + }, + ), + ); } } @@ -50,12 +53,13 @@ class _ScientificCirclesDataView extends ConsumerWidget { } return GridView.builder( padding: const EdgeInsets.only( - bottom: ScientificCirclesTabConfig.mediumPadding), + bottom: ScientificCirclesTabConfig.mediumPadding, + ), gridDelegate: ScientificCirclesTabConfig.researchGroupTabGridDelegate, itemCount: filteredCircles.length, itemBuilder: (context, index) => - ResearchGroupCard(filteredCircles[index], () { - ref + ResearchGroupCard(filteredCircles[index], () async { + await ref .read(navigatorProvider) .navigateToStudyCircleDetails(filteredCircles[index].id); }), diff --git a/lib/features/student_research_group_tab/widgets/tags_loading.dart b/lib/features/student_research_group_tab/widgets/tags_loading.dart index 1537a656..2cc0868b 100644 --- a/lib/features/student_research_group_tab/widgets/tags_loading.dart +++ b/lib/features/student_research_group_tab/widgets/tags_loading.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/ui_config.dart'; -import '../../../widgets/loading_widgets/specific_imitations/button_loading.dart'; +import "../../../config/ui_config.dart"; +import "../../../widgets/loading_widgets/specific_imitations/button_loading.dart"; class TagsLoading extends StatelessWidget { const TagsLoading({super.key}); @@ -16,6 +16,6 @@ class TagsLoading extends StatelessWidget { gridDelegate: ScientificCirclesTabConfig.tagsGridDelegate, itemBuilder: (context, index) => const ButtonLoading(), physics: const NeverScrollableScrollPhysics(), - )); + ),); } } diff --git a/lib/features/student_research_group_tab/widgets/tags_row.dart b/lib/features/student_research_group_tab/widgets/tags_row.dart index 168674a7..b28869ad 100644 --- a/lib/features/student_research_group_tab/widgets/tags_row.dart +++ b/lib/features/student_research_group_tab/widgets/tags_row.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../../config/ui_config.dart'; -import '../../../theme/app_theme.dart'; -import '../repositories/selected_tag_controller.dart'; -import '../repositories/tags_repository.dart'; +import "../../../config/ui_config.dart"; +import "../../../theme/app_theme.dart"; +import "../repositories/selected_tag_controller.dart"; +import "../repositories/tags_repository.dart"; class TagsRow extends ConsumerWidget { final List allTags; @@ -19,11 +19,11 @@ class TagsRow extends ConsumerWidget { padding: const EdgeInsets.only( left: ScientificCirclesTabConfig.smallPadding, right: ScientificCirclesTabConfig.smallPadding, - bottom: ScientificCirclesTabConfig.smallPadding), + bottom: ScientificCirclesTabConfig.smallPadding,), child: Row(children: [ for (final tag in allTags) _TagsRowItem(tag: tag, selectedTag: selectedTag), - ])), + ],),), ); } } @@ -37,7 +37,7 @@ class _TagsRowItem extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { return Padding( padding: const EdgeInsets.symmetric( - horizontal: ScientificCirclesTabConfig.microPadding), + horizontal: ScientificCirclesTabConfig.microPadding,), child: ChoiceChip( showCheckmark: false, label: Text(tag.name), @@ -52,14 +52,14 @@ class _TagsRowItem extends ConsumerWidget { labelStyle: TextStyle( color: selectedTag == tag.name ? Colors.white - : context.colorTheme.greyPigeon), + : context.colorTheme.greyPigeon,), side: BorderSide( color: selectedTag == tag.name ? context.colorTheme.orangePomegranade - : context.colorTheme.greyPigeon), + : context.colorTheme.greyPigeon,), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular( - ScientificCirclesTabConfig.buttonBorderRadius)), - )); + ScientificCirclesTabConfig.buttonBorderRadius,),), + ),); } } diff --git a/lib/features/study_circle_details/repository/study_circle_repository.dart b/lib/features/study_circle_details/repository/study_circle_repository.dart index 2370ed34..f7ac17a8 100644 --- a/lib/features/study_circle_details/repository/study_circle_repository.dart +++ b/lib/features/study_circle_details/repository/study_circle_repository.dart @@ -1,10 +1,10 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../config/ttl_config.dart'; -import '../../../api_base/watch_query_adapter.dart'; -import 'getScientificCircleDetails.graphql.dart'; +import "../../../api_base/watch_query_adapter.dart"; +import "../../../config/ttl_config.dart"; +import "getScientificCircleDetails.graphql.dart"; -part 'study_circle_repository.g.dart'; +part "study_circle_repository.g.dart"; typedef StudyCircleDetails = Query$GetScientificCircleDetails$Scientific_Circles_by_id; @@ -14,7 +14,7 @@ typedef _GetStudyCircles = WatchOptions$Query$GetScientificCircleDetails; @riverpod Stream studyCircleRepository( - StudyCircleRepositoryRef ref, String id) async* { + StudyCircleRepositoryRef ref, String id,) async* { final stream = ref.watchQueryWithCache( _GetStudyCircles( eagerlyFetchResults: true, diff --git a/lib/features/study_circle_details/study_circle_details.dart b/lib/features/study_circle_details/study_circle_details.dart index da1a0901..8ae87e6b 100644 --- a/lib/features/study_circle_details/study_circle_details.dart +++ b/lib/features/study_circle_details/study_circle_details.dart @@ -1,23 +1,22 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import '../../api_base/directus_assets_url.dart'; -import '../../config/ui_config.dart'; -import '../../theme/app_theme.dart'; -import '../../utils/context_extensions.dart'; -import '../../utils/determine_icon.dart'; - -import '../../utils/where_non_null_iterable.dart'; -import '../../widgets/loading_widgets/shimmer_loading.dart'; -import '../../widgets/my_error_widget.dart'; -import 'repository/study_circle_repository.dart'; -import 'widgets/details_screen_about_us_section.dart'; -import 'widgets/details_screen_app_bar.dart'; -import '../../widgets/details_screen_contact_section.dart'; -import '../../widgets/details_screen_sliver_header_section.dart'; -import 'widgets/loading_widgets/about_us_section_loading.dart'; -import '../../widgets/loading_widgets/contact_section_loading.dart'; -import '../../widgets/loading_widgets/header_section_loading.dart'; +import "../../api_base/directus_assets_url.dart"; +import "../../config/ui_config.dart"; +import "../../theme/app_theme.dart"; +import "../../utils/context_extensions.dart"; +import "../../utils/determine_icon.dart"; +import "../../utils/where_non_null_iterable.dart"; +import "../../widgets/details_screen_contact_section.dart"; +import "../../widgets/details_screen_sliver_header_section.dart"; +import "../../widgets/loading_widgets/contact_section_loading.dart"; +import "../../widgets/loading_widgets/header_section_loading.dart"; +import "../../widgets/loading_widgets/shimmer_loading.dart"; +import "../../widgets/my_error_widget.dart"; +import "repository/study_circle_repository.dart"; +import "widgets/details_screen_about_us_section.dart"; +import "widgets/details_screen_app_bar.dart"; +import "widgets/loading_widgets/about_us_section_loading.dart"; class StudyCircleDetails extends StatelessWidget { const StudyCircleDetails({super.key}); @@ -27,7 +26,7 @@ class StudyCircleDetails extends StatelessWidget { return Scaffold( appBar: DetailsScreenAppBar(context, title: context.localize.study_circles), - body: const _CircleDetailsDataView()); + body: const _CircleDetailsDataView(),); } } @@ -36,7 +35,7 @@ class _CircleDetailsDataView extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final itemId = ModalRoute.of(context)?.settings.arguments as String; + final itemId = ModalRoute.of(context)!.settings.arguments! as String; final state = ref.watch(studyCircleRepositoryProvider(itemId)); return switch (state) { AsyncLoading() => const _StudyCircleDetailsLoading(), @@ -46,19 +45,19 @@ class _CircleDetailsDataView extends ConsumerWidget { delegate: SliverHeaderSection( logoImageUrl: value?.logo?.filename_disk?.directusUrl, backgroundImageUrl: value?.cover?.filename_disk?.directusUrl, - )), + ),), SliverList( delegate: SliverChildListDelegate([ const SizedBox(height: 8), Text( - value?.name ?? '', + value?.name ?? "", style: context.textTheme.headline, textAlign: TextAlign.center, maxLines: 2, ), const SizedBox(height: 12), Text( - value?.department?.name ?? '', + value?.department?.name ?? "", style: context.textTheme.body, textAlign: TextAlign.center, ), @@ -69,17 +68,17 @@ class _CircleDetailsDataView extends ConsumerWidget { .map((a) => UrlIconsModel( text: a.name, url: a.link, - )) + ),) .toList() ?? List.empty(), ), const SizedBox(height: DetailsScreenConfig.spacerHeight), AboutUsSection( - text: value?.description ?? '', - ) + text: value?.description ?? "", + ), ]), ), - ]), + ],), }; } } @@ -98,7 +97,7 @@ class _StudyCircleDetailsLoading extends StatelessWidget { SizedBox(height: DetailsScreenConfig.spacerHeight), ContactSectionLoading(), SizedBox(height: DetailsScreenConfig.spacerHeight), - AboutUsSectionLoading() + AboutUsSectionLoading(), ], ), ); diff --git a/lib/features/study_circle_details/widgets/details_screen_about_us_section.dart b/lib/features/study_circle_details/widgets/details_screen_about_us_section.dart index 83ddb33f..1a1d1c3f 100644 --- a/lib/features/study_circle_details/widgets/details_screen_about_us_section.dart +++ b/lib/features/study_circle_details/widgets/details_screen_about_us_section.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'; -import '../../../theme/app_theme.dart'; -import '../../../utils/context_extensions.dart'; +import "package:flutter/material.dart"; +import "package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart"; +import "../../../theme/app_theme.dart"; +import "../../../utils/context_extensions.dart"; class AboutUsSection extends StatelessWidget { const AboutUsSection({super.key, required this.text}); @@ -18,11 +18,11 @@ class AboutUsSection extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(context.localize.about_us, - style: context.textTheme.headline), + style: context.textTheme.headline,), const SizedBox(height: 16), HtmlWidget( text, - textStyle: context.textTheme.body + textStyle: context.textTheme.body, ), ], ), diff --git a/lib/features/study_circle_details/widgets/details_screen_app_bar.dart b/lib/features/study_circle_details/widgets/details_screen_app_bar.dart index 0d5be16e..c88a5949 100644 --- a/lib/features/study_circle_details/widgets/details_screen_app_bar.dart +++ b/lib/features/study_circle_details/widgets/details_screen_app_bar.dart @@ -1,6 +1,6 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../theme/app_theme.dart'; +import "../../../theme/app_theme.dart"; class DetailsScreenAppBar extends AppBar { DetailsScreenAppBar(BuildContext context, {super.key, required String title}) @@ -16,8 +16,8 @@ class DetailsScreenAppBar extends AppBar { padding: EdgeInsets.zero, ), child: Text( - '< $title', + "< $title", style: context.textTheme.boldBodyOrange, - )), + ),), ); } diff --git a/lib/features/study_circle_details/widgets/loading_widgets/about_us_section_loading.dart b/lib/features/study_circle_details/widgets/loading_widgets/about_us_section_loading.dart index 48c43ba3..1fa5e9aa 100644 --- a/lib/features/study_circle_details/widgets/loading_widgets/about_us_section_loading.dart +++ b/lib/features/study_circle_details/widgets/loading_widgets/about_us_section_loading.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; -import '../../../../config/ui_config.dart'; -import '../../../../widgets/loading_widgets/scrolable_loader_builder.dart'; -import '../../../../widgets/loading_widgets/shimmer_loading.dart'; +import "package:flutter/material.dart"; +import "../../../../config/ui_config.dart"; +import "../../../../widgets/loading_widgets/scrolable_loader_builder.dart"; +import "../../../../widgets/loading_widgets/shimmer_loading.dart"; class AboutUsSectionLoading extends StatelessWidget { const AboutUsSectionLoading({super.key}); diff --git a/lib/main.dart b/lib/main.dart index 9935a98c..c8193b4f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,13 +1,13 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import "package:flutter/material.dart"; +import "package:flutter_gen/gen_l10n/app_localizations.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; -import 'config/ui_config.dart'; -import 'features/navigator/root_navigator_widget.dart'; -import 'features/splash_screen/splash_screen.dart'; -import 'features/splash_screen/splash_screen_controller.dart'; -import 'theme/app_theme.dart'; -import 'theme/colors.dart'; +import "config/ui_config.dart"; +import "features/navigator/root_navigator_widget.dart"; +import "features/splash_screen/splash_screen.dart"; +import "features/splash_screen/splash_screen_controller.dart"; +import "theme/app_theme.dart"; +import "theme/colors.dart"; void main() async { SplashScreenController.preserveNativeSplashScreen(); @@ -32,7 +32,7 @@ class MyApp extends StatelessWidget { extensions: const [AppTheme()], colorScheme: const ColorScheme.light().copyWith( surface: ColorsConsts.whiteSoap, - )), + ),), debugShowCheckedModeBanner: false, home: const RootNavigatorWidget(), ); diff --git a/lib/shared_repositories/buildings_repository/building_model.dart b/lib/shared_repositories/buildings_repository/building_model.dart index 51540a0b..89ffcd91 100644 --- a/lib/shared_repositories/buildings_repository/building_model.dart +++ b/lib/shared_repositories/buildings_repository/building_model.dart @@ -1,7 +1,7 @@ -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import "package:google_maps_flutter/google_maps_flutter.dart"; -import '../../features/map_view/controllers/controllers_set.dart'; -import 'map_buildings_repo.dart'; +import "../../features/map_view/controllers/controllers_set.dart"; +import "map_buildings_repo.dart"; class BuildingModel extends Building implements GoogleNavigable { BuildingModel.from(Building building) diff --git a/lib/shared_repositories/buildings_repository/map_buildings_repo.dart b/lib/shared_repositories/buildings_repository/map_buildings_repo.dart index 0e67fc61..4c2fef62 100644 --- a/lib/shared_repositories/buildings_repository/map_buildings_repo.dart +++ b/lib/shared_repositories/buildings_repository/map_buildings_repo.dart @@ -1,17 +1,17 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../api_base/watch_query_adapter.dart'; -import '../../config/ttl_config.dart'; -import 'building_model.dart'; -import 'getMapBuildings.graphql.dart'; +import "../../../api_base/watch_query_adapter.dart"; +import "../../config/ttl_config.dart"; +import "building_model.dart"; +import "getMapBuildings.graphql.dart"; -part 'map_buildings_repo.g.dart'; +part "map_buildings_repo.g.dart"; typedef Building = Query$GetMapBuildings$Buildings; @riverpod Stream?> mapBuildingsRepository( - MapBuildingsRepositoryRef ref) async* { + MapBuildingsRepositoryRef ref,) async* { final stream = ref.watchQueryWithCache( WatchOptions$Query$GetMapBuildings(eagerlyFetchResults: true), TtlKey.mapBuildingsRepository, diff --git a/lib/shared_repositories/departments_repository/departments_extra_params_ext.dart b/lib/shared_repositories/departments_repository/departments_extra_params_ext.dart index 03bb9fa0..98542b82 100644 --- a/lib/shared_repositories/departments_repository/departments_extra_params_ext.dart +++ b/lib/shared_repositories/departments_repository/departments_extra_params_ext.dart @@ -1,21 +1,19 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../config/ui_config.dart'; -import '../../theme/hex_color.dart'; -import '../../utils/colors_sort.dart'; -import 'departments_repository.dart'; +import "../../config/ui_config.dart"; +import "../../theme/hex_color.dart"; +import "../../utils/colors_sort.dart"; +import "departments_repository.dart"; extension DepartmentsExtraParamsExt on Department { LinearGradient get gradient => LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, colors: [ HexColor( gradient_start ?? DepartmentsConfig.defaultColorFirst, ), HexColor( gradient_end ?? DepartmentsConfig.defaultColorSecond, - ) + ), ]..sortByLightness(), ); } diff --git a/lib/shared_repositories/departments_repository/departments_repository.dart b/lib/shared_repositories/departments_repository/departments_repository.dart index 6bbff595..b05a99fe 100644 --- a/lib/shared_repositories/departments_repository/departments_repository.dart +++ b/lib/shared_repositories/departments_repository/departments_repository.dart @@ -1,17 +1,17 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../../api_base/watch_query_adapter.dart'; +import "../../../../api_base/watch_query_adapter.dart"; import "../../config/ttl_config.dart"; -import 'departments_extra_params_ext.dart'; -import 'getDepartments.graphql.dart'; +import "departments_extra_params_ext.dart"; +import "getDepartments.graphql.dart"; -part 'departments_repository.g.dart'; +part "departments_repository.g.dart"; typedef Department = Query$GetDepartments$Departments; @riverpod Stream?> departmentsRepository( - DepartmentsRepositoryRef ref) async* { + DepartmentsRepositoryRef ref,) async* { final stream = ref.watchQueryWithCache( WatchOptions$Query$GetDepartments( eagerlyFetchResults: true, diff --git a/lib/shared_repositories/sci_clubs_repository/scientific_circles_repository.dart b/lib/shared_repositories/sci_clubs_repository/scientific_circles_repository.dart index 361f883f..53f6435e 100644 --- a/lib/shared_repositories/sci_clubs_repository/scientific_circles_repository.dart +++ b/lib/shared_repositories/sci_clubs_repository/scientific_circles_repository.dart @@ -1,17 +1,18 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:riverpod_annotation/riverpod_annotation.dart"; -import '../../../api_base/watch_query_adapter.dart'; -import '../../config/ttl_config.dart'; -import 'getScientificCircles.graphql.dart'; +import "../../../api_base/watch_query_adapter.dart"; +import "../../config/ttl_config.dart"; +import "getScientificCircles.graphql.dart"; -part 'scientific_circles_repository.g.dart'; +part "scientific_circles_repository.g.dart"; -typedef ScientificCircle - = Query$GetScientificCircles$Scientific_Circles; // just alias for shorter type name +typedef ScientificCircle = Query$GetScientificCircles$Scientific_Circles; +// just alias for shorter type name @riverpod Stream?> scientificCirclesRepository( - ScientificCirclesRepositoryRef ref) async* { + ScientificCirclesRepositoryRef ref, +) async* { final stream = ref.watchQueryWithCache( WatchOptions$Query$GetScientificCircles(eagerlyFetchResults: true), TtlKey.sciCirclesRepository, diff --git a/lib/theme/about_us_theme.dart b/lib/theme/about_us_theme.dart index 62c048c8..c761f5f8 100644 --- a/lib/theme/about_us_theme.dart +++ b/lib/theme/about_us_theme.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; -import 'package:theme_tailor_annotation/theme_tailor_annotation.dart'; +import "package:flutter/material.dart"; +import "package:theme_tailor_annotation/theme_tailor_annotation.dart"; -import 'typography.dart'; +import "typography.dart"; -part 'about_us_theme.tailor.dart'; +part "about_us_theme.tailor.dart"; class AboutUsHeadline extends BoldBodyTextStyle { const AboutUsHeadline({super.color}) : super(fontSize: 19); diff --git a/lib/theme/app_color_theme.dart b/lib/theme/app_color_theme.dart index 983dd0fd..e619cec7 100644 --- a/lib/theme/app_color_theme.dart +++ b/lib/theme/app_color_theme.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:theme_tailor_annotation/theme_tailor_annotation.dart'; -import 'hex_color.dart'; +import "package:flutter/material.dart"; +import "package:theme_tailor_annotation/theme_tailor_annotation.dart"; -import 'colors.dart'; +import "colors.dart"; +import "hex_color.dart"; -part 'app_color_theme.tailor.dart'; +part "app_color_theme.tailor.dart"; @tailorMixinComponent class AppColorTheme extends ThemeExtension diff --git a/lib/theme/app_text_theme.dart b/lib/theme/app_text_theme.dart index 4cc50a2f..138b7d6b 100644 --- a/lib/theme/app_text_theme.dart +++ b/lib/theme/app_text_theme.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:theme_tailor_annotation/theme_tailor_annotation.dart'; +import "package:flutter/material.dart"; +import "package:theme_tailor_annotation/theme_tailor_annotation.dart"; -import 'colors.dart'; -import 'typography.dart'; +import "colors.dart"; +import "typography.dart"; -part 'app_text_theme.tailor.dart'; +part "app_text_theme.tailor.dart"; @tailorMixinComponent class AppTextTheme extends ThemeExtension diff --git a/lib/theme/app_theme.dart b/lib/theme/app_theme.dart index c93d5bd0..0aaf7773 100644 --- a/lib/theme/app_theme.dart +++ b/lib/theme/app_theme.dart @@ -1,13 +1,13 @@ -import 'package:flutter/material.dart'; -import 'package:theme_tailor_annotation/theme_tailor_annotation.dart'; +import "package:flutter/material.dart"; +import "package:theme_tailor_annotation/theme_tailor_annotation.dart"; -import 'app_color_theme.dart'; -import 'app_text_theme.dart'; -import 'greeting_theme.dart'; -import 'iparking_theme.dart'; -import 'about_us_theme.dart'; +import "about_us_theme.dart"; +import "app_color_theme.dart"; +import "app_text_theme.dart"; +import "greeting_theme.dart"; +import "iparking_theme.dart"; -part 'app_theme.tailor.dart'; +part "app_theme.tailor.dart"; @TailorMixin() class AppTheme extends ThemeExtension with _$AppThemeTailorMixin { diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart index 3f7d5cad..40eeac7b 100644 --- a/lib/theme/colors.dart +++ b/lib/theme/colors.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; -import 'hex_color.dart'; +import "package:flutter/material.dart"; +import "hex_color.dart"; abstract class ColorsConsts { // Mirage #293241 @@ -22,15 +22,14 @@ abstract class ColorsConsts { // ToPwr LinearGradient #f67448, #ee6645, #df371b static const toPwrGradient = LinearGradient( - begin: Alignment(-1.0, -0.1), - end: Alignment(1.0, 0.1), + begin: Alignment(-1, -0.1), + end: Alignment(1, 0.1), colors: [ Color(0xfff67448), Color(0xffee6645), Color(0xffdf371b), ], stops: [0.0, 0.25, 0.72], - tileMode: TileMode.clamp, ); static const buildingsGradient = LinearGradient( diff --git a/lib/theme/greeting_theme.dart b/lib/theme/greeting_theme.dart index 5942ab90..51eebd07 100644 --- a/lib/theme/greeting_theme.dart +++ b/lib/theme/greeting_theme.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; -import 'package:theme_tailor_annotation/theme_tailor_annotation.dart'; +import "package:flutter/material.dart"; +import "package:theme_tailor_annotation/theme_tailor_annotation.dart"; -import 'typography.dart'; +import "typography.dart"; part "greeting_theme.tailor.dart"; @@ -23,5 +23,5 @@ class GreetingTheme extends ThemeExtension const GreetingTheme( {this.textStyle = const GreetingTextStyle(), - this.boldTextStyle = const GreetingBoldTextStyle()}); + this.boldTextStyle = const GreetingBoldTextStyle(),}); } diff --git a/lib/theme/hex_color.dart b/lib/theme/hex_color.dart index 95e773ba..680b2b6f 100644 --- a/lib/theme/hex_color.dart +++ b/lib/theme/hex_color.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; class HexColor extends Color { /// hexString starts with #, and then 6 or 8 chars long @@ -19,7 +19,7 @@ abstract class _FromHexConverter { static String _supplementWithOpacityChannel(String str) { if (str.length == 6) { - str = "FF$str"; + return "FF$str"; } return str; } @@ -36,7 +36,7 @@ abstract class _ToHexConverter { static String _toBase16Str(int value) => value.toRadixString(16); - static String _fillWith0sToFixedLen(String str) => str.padLeft(8, '0'); + static String _fillWith0sToFixedLen(String str) => str.padLeft(8, "0"); static String _removeOpacityChannelIf255(String str, int alpha) => str.substring(alpha == 255 ? 2 : 0); diff --git a/lib/theme/iparking_theme.dart b/lib/theme/iparking_theme.dart index 770b246d..dd05cfc5 100644 --- a/lib/theme/iparking_theme.dart +++ b/lib/theme/iparking_theme.dart @@ -1,16 +1,16 @@ -import 'package:flutter/material.dart'; -import 'package:theme_tailor_annotation/theme_tailor_annotation.dart'; +import "package:flutter/material.dart"; +import "package:theme_tailor_annotation/theme_tailor_annotation.dart"; -import 'colors.dart'; -import 'typography.dart'; +import "colors.dart"; +import "typography.dart"; -part 'iparking_theme.tailor.dart'; +part "iparking_theme.tailor.dart"; const iparkingShadows = [ Shadow( blurRadius: 4, color: Colors.black26, - offset: Offset(0, 4.0), + offset: Offset(0, 4), ), ]; diff --git a/lib/theme/typography.dart b/lib/theme/typography.dart index ddc40150..6332b7af 100644 --- a/lib/theme/typography.dart +++ b/lib/theme/typography.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../gen/fonts.gen.dart'; -import 'colors.dart'; +import "../gen/fonts.gen.dart"; +import "colors.dart"; class BodyTextStyle extends TextStyle { const BodyTextStyle({ diff --git a/lib/utils/calc_lines.dart b/lib/utils/calc_lines.dart index 13fefa79..fd6068a7 100644 --- a/lib/utils/calc_lines.dart +++ b/lib/utils/calc_lines.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; extension CalcLinesUIUtils on TextSpan { int calculateLines(double availableWidth) { @@ -8,4 +8,4 @@ extension CalcLinesUIUtils on TextSpan { )..layout(maxWidth: availableWidth); return textPainter.computeLineMetrics().length; } -} \ No newline at end of file +} diff --git a/lib/utils/colors_sort.dart b/lib/utils/colors_sort.dart index 09567dc5..24b36627 100644 --- a/lib/utils/colors_sort.dart +++ b/lib/utils/colors_sort.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; extension ColorsSortExt on List { void sortByLightness() { diff --git a/lib/utils/context_extensions.dart b/lib/utils/context_extensions.dart index a64e07cc..b7e83d8b 100644 --- a/lib/utils/context_extensions.dart +++ b/lib/utils/context_extensions.dart @@ -1,6 +1,6 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations_pl.dart'; +import "package:flutter/material.dart"; +import "package:flutter_gen/gen_l10n/app_localizations.dart"; +import "package:flutter_gen/gen_l10n/app_localizations_pl.dart"; extension BuildContextShortcutExtension on BuildContext { AppLocalizations get localize { diff --git a/lib/utils/determine_icon.dart b/lib/utils/determine_icon.dart index ce58136f..051182b6 100644 --- a/lib/utils/determine_icon.dart +++ b/lib/utils/determine_icon.dart @@ -1,7 +1,7 @@ -import 'package:collection/collection.dart'; -import 'package:flutter/widgets.dart'; +import "package:collection/collection.dart"; +import "package:flutter/widgets.dart"; -import '../config/url_icons.dart'; +import "../config/url_icons.dart"; @immutable class UrlIconsModel { diff --git a/lib/utils/launch_url_util.dart b/lib/utils/launch_url_util.dart index 772f30c7..e61ba8a0 100644 --- a/lib/utils/launch_url_util.dart +++ b/lib/utils/launch_url_util.dart @@ -1,10 +1,10 @@ -import 'package:url_launcher/url_launcher.dart'; +import "package:url_launcher/url_launcher.dart"; class LaunchUrlUtil { static Future launch(String uriStr) async { final uri = Uri.parse(uriStr); if (await canLaunchUrl(uri)) { - return await launchUrl(uri); + return launchUrl(uri); } return false; } diff --git a/lib/utils/watch_locale.dart b/lib/utils/watch_locale.dart index e843a7cd..b74b3b6b 100644 --- a/lib/utils/watch_locale.dart +++ b/lib/utils/watch_locale.dart @@ -1,10 +1,10 @@ -import 'dart:ui'; +import "dart:ui"; -import 'package:flutter/widgets.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import "package:flutter/widgets.dart"; +import "package:flutter_gen/gen_l10n/app_localizations.dart"; +import "package:riverpod_annotation/riverpod_annotation.dart"; -part 'watch_locale.g.dart'; +part "watch_locale.g.dart"; @riverpod class WatchLocale extends _$WatchLocale { @@ -23,8 +23,8 @@ class WatchLocale extends _$WatchLocale { static AppLocalizations get _getCurrLocal { var locale = PlatformDispatcher.instance.locale; if (!AppLocalizations.supportedLocales.contains(locale)) { - locale = AppLocalizations.supportedLocales - .first; //TODO: add english as default locale (when there is one) + // TODO(simon-the-shark): Add english as default locale (when there is one). + locale = AppLocalizations.supportedLocales.first; } return lookupAppLocalizations(locale); } diff --git a/lib/widgets/big_preview_card.dart b/lib/widgets/big_preview_card.dart index abc86143..2d9c7a10 100644 --- a/lib/widgets/big_preview_card.dart +++ b/lib/widgets/big_preview_card.dart @@ -1,11 +1,11 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../config/ui_config.dart'; -import '../theme/app_theme.dart'; -import '../utils/context_extensions.dart'; -import 'date_chip.dart'; -import 'dual_text_max_lines.dart'; -import 'my_cached_image.dart'; +import "../config/ui_config.dart"; +import "../theme/app_theme.dart"; +import "../utils/context_extensions.dart"; +import "date_chip.dart"; +import "dual_text_max_lines.dart"; +import "my_cached_image.dart"; class BigPreviewCard extends StatelessWidget { const BigPreviewCard({ @@ -28,7 +28,7 @@ class BigPreviewCard extends StatelessWidget { return Container( decoration: BoxDecoration( color: context.colorTheme.greyLight, - borderRadius: BorderRadius.circular(8)), + borderRadius: BorderRadius.circular(8),), width: BigPreviewCardConfig.cardWidth, child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -43,13 +43,11 @@ class BigPreviewCard extends StatelessWidget { children: [ SizedBox( width: double.maxFinite, - child: MyCachedImage(photoUrl)), - date != null - ? DateChip(date: date!) - : const SizedBox.shrink() + child: MyCachedImage(photoUrl),), + if (date != null) DateChip(date: date!) else const SizedBox.shrink(), ], ), - )), + ),), Expanded( flex: 210, child: Container( @@ -74,7 +72,7 @@ class BigPreviewCard extends StatelessWidget { color: context.colorTheme.orangePomegranade, textColor: context.colorTheme.whiteSoap, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(4)), + borderRadius: BorderRadius.circular(4),), child: Text(context.localize.read_more), ), ], diff --git a/lib/widgets/date_chip.dart b/lib/widgets/date_chip.dart index 7646925d..109e29eb 100644 --- a/lib/widgets/date_chip.dart +++ b/lib/widgets/date_chip.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import '../config/ui_config.dart'; -import '../theme/app_theme.dart'; +import "package:flutter/material.dart"; +import "package:intl/intl.dart"; +import "../config/ui_config.dart"; +import "../theme/app_theme.dart"; class DateChip extends StatelessWidget { const DateChip({ @@ -16,15 +16,15 @@ class DateChip extends StatelessWidget { return Align( alignment: Alignment.topRight, child: Container( - padding: const EdgeInsets.symmetric(horizontal: 6.0), - margin: const EdgeInsets.all(8.0), + padding: const EdgeInsets.symmetric(horizontal: 6), + margin: const EdgeInsets.all(8), decoration: BoxDecoration( color: context.colorTheme.blackMirage, - borderRadius: BorderRadius.circular(20)), + borderRadius: BorderRadius.circular(20),), child: Text( DateFormat(DateChipConfig.dateTimeFormat).format(date), style: context.textTheme.bodyWhite, ), - )); + ),); } } diff --git a/lib/widgets/details_screen_contact_section.dart b/lib/widgets/details_screen_contact_section.dart index 236f73db..603a2405 100644 --- a/lib/widgets/details_screen_contact_section.dart +++ b/lib/widgets/details_screen_contact_section.dart @@ -1,10 +1,10 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/gestures.dart'; +import "package:flutter/cupertino.dart"; +import "package:flutter/gestures.dart"; -import '../theme/app_theme.dart'; -import '../utils/determine_icon.dart'; -import '../utils/launch_url_util.dart'; -import 'my_icon.dart'; +import "../theme/app_theme.dart"; +import "../utils/determine_icon.dart"; +import "../utils/launch_url_util.dart"; +import "my_icon.dart"; class ContactSection extends StatelessWidget { const ContactSection({super.key, required this.list, required this.title}); @@ -26,11 +26,11 @@ class ContactSection extends StatelessWidget { Padding( padding: const EdgeInsets.only(bottom: 16), child: _IconWithUrl( - url: item.url ?? '', - text: item.text ?? '', + url: item.url ?? "", + text: item.text ?? "", icon: item.icon, ), - ) + ), ], ), ); @@ -56,16 +56,20 @@ class _IconWithUrl extends StatelessWidget { const SizedBox(width: 16), Expanded( child: RichText( - overflow: TextOverflow.ellipsis, - maxLines: 2, - text: TextSpan( - text: text, - style: context.textTheme.bodyOrange - .copyWith(decoration: url.isNotEmpty ? TextDecoration.underline : TextDecoration.none), - recognizer: TapGestureRecognizer() - ..onTap = () => LaunchUrlUtil.launch(url), - )), - ) + overflow: TextOverflow.ellipsis, + maxLines: 2, + text: TextSpan( + text: text, + style: context.textTheme.bodyOrange.copyWith( + decoration: url.isNotEmpty + ? TextDecoration.underline + : TextDecoration.none, + ), + recognizer: TapGestureRecognizer() + ..onTap = () async => LaunchUrlUtil.launch(url), + ), + ), + ), ], ); } diff --git a/lib/widgets/details_screen_sliver_header_section.dart b/lib/widgets/details_screen_sliver_header_section.dart index 5da28608..ca6f64f0 100644 --- a/lib/widgets/details_screen_sliver_header_section.dart +++ b/lib/widgets/details_screen_sliver_header_section.dart @@ -1,7 +1,7 @@ -import 'dart:math'; -import 'package:flutter/material.dart'; -import '../config/ui_config.dart'; -import 'my_cached_image.dart'; +import "dart:math"; +import "package:flutter/material.dart"; +import "../config/ui_config.dart"; +import "my_cached_image.dart"; class SliverHeaderSection extends SliverPersistentHeaderDelegate { SliverHeaderSection({ @@ -24,7 +24,7 @@ class SliverHeaderSection extends SliverPersistentHeaderDelegate { double calcLogoSize(double shrinkOffset) { final ratio = min(1, shrinkOffset / DetailsScreenHeaderConfig.logoSize); final adjustedRatio = 1.0 - (ratio * 0.3); - return max(0.0, DetailsScreenHeaderConfig.logoSize * adjustedRatio); + return max(0, DetailsScreenHeaderConfig.logoSize * adjustedRatio); } double calcLogoOpacity(double shrinkOffset, double logoSize) { @@ -85,7 +85,7 @@ class SliverHeaderSection extends SliverPersistentHeaderDelegate { ), ], ), - )), + ),), ], ); } diff --git a/lib/widgets/dual_text_max_lines.dart b/lib/widgets/dual_text_max_lines.dart index af80ca9b..1da1855d 100644 --- a/lib/widgets/dual_text_max_lines.dart +++ b/lib/widgets/dual_text_max_lines.dart @@ -1,22 +1,28 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; class DualTextSpan extends TextSpan { - DualTextSpan(String title, TextStyle? titleStyle, String? subtitle, - TextStyle? subtitleStyle, double spacing) - : super(children: [ - TextSpan( - text: "$title\n", - style: titleStyle, - ), - TextSpan( - text: "\n", // padding/spacing workaround - style: TextStyle(fontSize: spacing, height: 1), - ), - TextSpan( - text: "$subtitle", - style: subtitleStyle, - ), - ]); + DualTextSpan( + String title, + TextStyle? titleStyle, + String? subtitle, + TextStyle? subtitleStyle, + double spacing, + ) : super( + children: [ + TextSpan( + text: "$title\n", + style: titleStyle, + ), + TextSpan( + text: "\n", // padding/spacing workaround + style: TextStyle(fontSize: spacing, height: 1), + ), + TextSpan( + text: "$subtitle", + style: subtitleStyle, + ), + ], + ); } class DualTextMaxLines extends StatelessWidget { @@ -45,4 +51,4 @@ class DualTextMaxLines extends StatelessWidget { text: DualTextSpan(title, titleStyle, subtitle, subtitleStyle, spacing), ); } -} \ No newline at end of file +} diff --git a/lib/widgets/loading_widgets/contact_section_loading.dart b/lib/widgets/loading_widgets/contact_section_loading.dart index cb1a76fb..14d05723 100644 --- a/lib/widgets/loading_widgets/contact_section_loading.dart +++ b/lib/widgets/loading_widgets/contact_section_loading.dart @@ -1,7 +1,7 @@ -import 'package:flutter/material.dart'; -import '../../config/ui_config.dart'; -import '../../theme/app_theme.dart'; -import 'shimmer_loading.dart'; +import "package:flutter/material.dart"; +import "../../config/ui_config.dart"; +import "../../theme/app_theme.dart"; +import "shimmer_loading.dart"; class ContactSectionLoading extends StatelessWidget { const ContactSectionLoading({super.key}); @@ -37,7 +37,7 @@ class ContactSectionLoading extends StatelessWidget { }, separatorBuilder: (BuildContext context, int index) { return const SizedBox( - height: DetailsScreenConfig.spacerHeight); + height: DetailsScreenConfig.spacerHeight,); }, itemCount: 3, ), diff --git a/lib/widgets/loading_widgets/header_section_loading.dart b/lib/widgets/loading_widgets/header_section_loading.dart index d9293896..dc6af5fe 100644 --- a/lib/widgets/loading_widgets/header_section_loading.dart +++ b/lib/widgets/loading_widgets/header_section_loading.dart @@ -1,8 +1,6 @@ +import "package:flutter/material.dart"; - -import 'package:flutter/material.dart'; - -import 'shimmer_loading.dart'; +import "shimmer_loading.dart"; class HeaderSectionLoading extends StatelessWidget { const HeaderSectionLoading({super.key}); @@ -18,7 +16,10 @@ class HeaderSectionLoading extends StatelessWidget { clipBehavior: Clip.none, children: [ Container( - height: 250, width: double.maxFinite, color: Colors.white), + height: 250, + width: double.maxFinite, + color: Colors.white, + ), Positioned( top: 185, child: Container( @@ -54,4 +55,4 @@ class HeaderSectionLoading extends StatelessWidget { ), ); } -} \ No newline at end of file +} diff --git a/lib/widgets/loading_widgets/scrolable_loader_builder.dart b/lib/widgets/loading_widgets/scrolable_loader_builder.dart index cc5c520c..bd4ec8b6 100644 --- a/lib/widgets/loading_widgets/scrolable_loader_builder.dart +++ b/lib/widgets/loading_widgets/scrolable_loader_builder.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; class ScrollableLoaderBuilder extends StatelessWidget { const ScrollableLoaderBuilder({ @@ -35,7 +35,7 @@ class ScrollableLoaderBuilder extends StatelessWidget { if (index.isEven) return itemBuilder(context, index ~/ 2); return _Gap(itemsSpacing); }, - )); + ),); } } diff --git a/lib/widgets/loading_widgets/shimmer_loading.dart b/lib/widgets/loading_widgets/shimmer_loading.dart index 9cac6617..a3e21e37 100644 --- a/lib/widgets/loading_widgets/shimmer_loading.dart +++ b/lib/widgets/loading_widgets/shimmer_loading.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; /// Widget that simplify use of [ShimmerLoadingItem] and [Shimmer] /// Designed to cover only one widget. @@ -72,7 +72,7 @@ class _ShimmerLoadingItemState extends State { final shimmerSize = shimmer.size; final gradient = shimmer.gradient; final offsetWithinShimmer = shimmer.getDescendantOffset( - descendant: context.findRenderObject() as RenderBox, + descendant: context.findRenderObject()! as RenderBox, ); return ShaderMask( @@ -142,13 +142,13 @@ class ShimmerState extends State with SingleTickerProviderStateMixin { bool get isSized => (context.findRenderObject() as RenderBox?)?.hasSize ?? false; - Size get size => (context.findRenderObject() as RenderBox).size; + Size get size => (context.findRenderObject()! as RenderBox).size; Offset getDescendantOffset({ required RenderBox descendant, Offset offset = Offset.zero, }) { - final shimmerBox = context.findRenderObject() as RenderBox; + final shimmerBox = context.findRenderObject()! as RenderBox; return descendant.localToGlobal(offset, ancestor: shimmerBox); } @@ -168,7 +168,7 @@ class _SlidingGradientTransform extends GradientTransform { @override Matrix4? transform(Rect bounds, {TextDirection? textDirection}) { - return Matrix4.translationValues(bounds.width * slidePercent, 0.0, 0.0); + return Matrix4.translationValues(bounds.width * slidePercent, 0, 0); } } @@ -184,8 +184,6 @@ const shimmerGradient = LinearGradient( 0.3, 0.4, ], - begin: Alignment(-1.0, -0.3), - end: Alignment(1.0, 0.3), - tileMode: TileMode.clamp, + begin: Alignment(-1, -0.3), + end: Alignment(1, 0.3), ); - diff --git a/lib/widgets/loading_widgets/simple_previews/preview_card_loading.dart b/lib/widgets/loading_widgets/simple_previews/preview_card_loading.dart index aa968861..4d8d9886 100644 --- a/lib/widgets/loading_widgets/simple_previews/preview_card_loading.dart +++ b/lib/widgets/loading_widgets/simple_previews/preview_card_loading.dart @@ -1,6 +1,6 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../shimmer_loading.dart'; +import "../shimmer_loading.dart"; class PreviewCardLoading extends StatelessWidget { const PreviewCardLoading({ diff --git a/lib/widgets/loading_widgets/simple_previews/preview_text_prototype.dart b/lib/widgets/loading_widgets/simple_previews/preview_text_prototype.dart index f4ef0b98..f70497ee 100644 --- a/lib/widgets/loading_widgets/simple_previews/preview_text_prototype.dart +++ b/lib/widgets/loading_widgets/simple_previews/preview_text_prototype.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; class PreviewTextPrototype extends Container { PreviewTextPrototype({ diff --git a/lib/widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart b/lib/widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart index ab086bc0..795af059 100644 --- a/lib/widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart +++ b/lib/widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/ui_config.dart'; -import '../simple_previews/preview_text_prototype.dart'; -import '../shimmer_loading.dart'; +import "../../../config/ui_config.dart"; +import "../shimmer_loading.dart"; +import "../simple_previews/preview_text_prototype.dart"; class BigPreviewCardLoading extends StatelessWidget { const BigPreviewCardLoading({super.key}); @@ -23,9 +23,9 @@ class BigPreviewCardLoading extends StatelessWidget { ), ), ), - const ShimmerLoadingItem(child: _LoadingText()) + const ShimmerLoadingItem(child: _LoadingText()), ], - )); + ),); } } @@ -40,7 +40,7 @@ class _LoadingText extends StatelessWidget { const SizedBox(height: 16), PreviewTextPrototype(width: BigPreviewCardConfig.cardWidth), const SizedBox(height: 16), - PreviewTextPrototype(width: BigPreviewCardConfig.cardWidth / 1.5) + PreviewTextPrototype(width: BigPreviewCardConfig.cardWidth / 1.5), ], ); } diff --git a/lib/widgets/loading_widgets/specific_imitations/button_loading.dart b/lib/widgets/loading_widgets/specific_imitations/button_loading.dart index d078b8f1..7d12bf76 100644 --- a/lib/widgets/loading_widgets/specific_imitations/button_loading.dart +++ b/lib/widgets/loading_widgets/specific_imitations/button_loading.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; -import '../shimmer_loading.dart'; +import "package:flutter/material.dart"; +import "../shimmer_loading.dart"; class ButtonLoading extends StatelessWidget { const ButtonLoading({super.key}); @@ -21,6 +21,6 @@ class ButtonLoading extends StatelessWidget { ), ), ], - )); + ),); } } diff --git a/lib/widgets/loading_widgets/specific_imitations/wide_tile_loading.dart b/lib/widgets/loading_widgets/specific_imitations/wide_tile_loading.dart index 3ecc1f19..fff3b4d5 100644 --- a/lib/widgets/loading_widgets/specific_imitations/wide_tile_loading.dart +++ b/lib/widgets/loading_widgets/specific_imitations/wide_tile_loading.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../../../config/ui_config.dart'; -import '../shimmer_loading.dart'; -import '../simple_previews/preview_card_loading.dart'; -import '../simple_previews/preview_text_prototype.dart'; +import "../../../config/ui_config.dart"; +import "../shimmer_loading.dart"; +import "../simple_previews/preview_card_loading.dart"; +import "../simple_previews/preview_text_prototype.dart"; class WideTileLoading extends StatelessWidget { const WideTileLoading({super.key}); @@ -51,6 +51,6 @@ class _TitlesColumnLoading extends StatelessWidget { const SizedBox(height: WideTileCardConfig.titlesSpacing), ], ); - }); + },); } } diff --git a/lib/widgets/my_cached_image.dart b/lib/widgets/my_cached_image.dart index 110ecaea..2457566f 100644 --- a/lib/widgets/my_cached_image.dart +++ b/lib/widgets/my_cached_image.dart @@ -1,8 +1,8 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; +import "package:cached_network_image/cached_network_image.dart"; +import "package:flutter/material.dart"; -import '../features/splash_screen/widgets/flutter_splash_screen.dart'; -import 'loading_widgets/shimmer_loading.dart'; +import "../features/splash_screen/widgets/flutter_splash_screen.dart"; +import "loading_widgets/shimmer_loading.dart"; class MyCachedImage extends StatelessWidget { const MyCachedImage( @@ -34,7 +34,7 @@ class MyCachedImage extends StatelessWidget { child: Container( color: Colors.white, ), - )), + ),), errorWidget: (context, url, error) => FlutterSplashScreen(size: size?.height), height: size?.height, diff --git a/lib/widgets/my_error_widget.dart b/lib/widgets/my_error_widget.dart index a42faf5f..d850097f 100644 --- a/lib/widgets/my_error_widget.dart +++ b/lib/widgets/my_error_widget.dart @@ -1,10 +1,10 @@ -import 'package:flutter/material.dart'; -import 'package:logger/logger.dart'; +import "package:flutter/material.dart"; +import "package:logger/logger.dart"; -import '../api_base/watch_query_adapter.dart'; -import '../features/iparking/api_client/iparking_commands.dart'; -import '../features/iparking/widgets/offline_parkings.dart'; -import '../features/offline_messages/widgets/grapgql_offline_message.dart'; +import "../api_base/watch_query_adapter.dart"; +import "../features/iparking/api_client/iparking_commands.dart"; +import "../features/iparking/widgets/offline_parkings.dart"; +import "../features/offline_messages/widgets/grapgql_offline_message.dart"; class MyErrorWidget extends StatelessWidget { const MyErrorWidget(this.error, {super.key}); diff --git a/lib/widgets/my_icon.dart b/lib/widgets/my_icon.dart index f3c1844b..8eec1b93 100644 --- a/lib/widgets/my_icon.dart +++ b/lib/widgets/my_icon.dart @@ -1,6 +1,6 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import '../theme/app_theme.dart'; +import "package:flutter/material.dart"; +import "package:flutter_svg/svg.dart"; +import "../theme/app_theme.dart"; class MyIcon extends StatelessWidget { const MyIcon({ diff --git a/lib/widgets/my_text_button.dart b/lib/widgets/my_text_button.dart index c05029ec..59c0325d 100644 --- a/lib/widgets/my_text_button.dart +++ b/lib/widgets/my_text_button.dart @@ -1,6 +1,6 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../theme/app_theme.dart'; +import "../theme/app_theme.dart"; class MyTextButton extends StatelessWidget { const MyTextButton({ @@ -22,6 +22,6 @@ class MyTextButton extends StatelessWidget { child: Text( actionTitle, style: context.textTheme.boldBodyOrange, - )); + ),); } } diff --git a/lib/widgets/search_box_app_bar.dart b/lib/widgets/search_box_app_bar.dart index ffc46082..7d2c9aad 100644 --- a/lib/widgets/search_box_app_bar.dart +++ b/lib/widgets/search_box_app_bar.dart @@ -1,8 +1,8 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../config/ui_config.dart'; -import '../theme/app_theme.dart'; -import 'search_widget.dart'; +import "../config/ui_config.dart"; +import "../theme/app_theme.dart"; +import "search_widget.dart"; class SearchBoxAppBar extends AppBar { static const defaultBottomPadding = 32.0; diff --git a/lib/widgets/search_widget.dart b/lib/widgets/search_widget.dart index 6b088d01..9e88c4d3 100644 --- a/lib/widgets/search_widget.dart +++ b/lib/widgets/search_widget.dart @@ -1,18 +1,18 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_svg/svg.dart'; +import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; +import "package:flutter_svg/svg.dart"; -import '../config/ui_config.dart'; -import '../gen/assets.gen.dart'; -import '../theme/app_theme.dart'; -import '../utils/context_extensions.dart'; +import "../config/ui_config.dart"; +import "../gen/assets.gen.dart"; +import "../theme/app_theme.dart"; +import "../utils/context_extensions.dart"; class SearchWidget extends ConsumerStatefulWidget { final void Function(String query) onQueryChanged; final VoidCallback? onTap; final String? searchText; const SearchWidget( - {super.key, required this.onQueryChanged, this.onTap, this.searchText}); + {super.key, required this.onQueryChanged, this.onTap, this.searchText,}); @override ConsumerState createState() => _SearchWidgetState(); @@ -21,7 +21,7 @@ class SearchWidget extends ConsumerStatefulWidget { class _SearchWidgetState extends ConsumerState { final controller = TextEditingController(); final focusNode = FocusNode(); - var showCloseIcon = false; + bool showCloseIcon = false; void _onChanged(String query) { setState(() { @@ -56,10 +56,10 @@ class _SearchWidgetState extends ConsumerState { contentPadding: EdgeInsets.zero, filled: true, fillColor: context.colorTheme.greyLight, - hintText: '${widget.searchText ?? context.localize.search}...', + hintText: "${widget.searchText ?? context.localize.search}...", hintStyle: context.textTheme.lightTitle.copyWith(color: color), border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8.0), + borderRadius: BorderRadius.circular(8), borderSide: BorderSide.none, ), prefixIcon: Padding( diff --git a/lib/widgets/subsection_header.dart b/lib/widgets/subsection_header.dart index 3f3bd91b..b1615da4 100644 --- a/lib/widgets/subsection_header.dart +++ b/lib/widgets/subsection_header.dart @@ -1,11 +1,11 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../theme/app_theme.dart'; -import 'my_text_button.dart'; +import "../theme/app_theme.dart"; +import "my_text_button.dart"; class SubsectionHeader extends StatelessWidget { const SubsectionHeader( - {super.key, required this.title, this.actionTitle, this.onClick}); + {super.key, required this.title, this.actionTitle, this.onClick,}); final String title; final String? actionTitle; @@ -14,7 +14,7 @@ class SubsectionHeader extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.only(left: 24.0, top: 16.0, right: 24.0), + padding: const EdgeInsets.only(left: 24, top: 16, right: 24), child: SizedBox( width: double.infinity, child: Row( @@ -22,7 +22,7 @@ class SubsectionHeader extends StatelessWidget { children: [ Text(title, style: context.textTheme.headline), if (actionTitle != null) - MyTextButton(onClick: onClick, actionTitle: "$actionTitle >") + MyTextButton(onClick: onClick, actionTitle: "$actionTitle >"), ], ), ), diff --git a/lib/widgets/tile_splash.dart b/lib/widgets/tile_splash.dart index 67ed56f2..9328b5e0 100644 --- a/lib/widgets/tile_splash.dart +++ b/lib/widgets/tile_splash.dart @@ -1,4 +1,4 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; class TileSplash extends StatelessWidget { const TileSplash({super.key, this.onTap}); diff --git a/lib/widgets/wide_tile_card.dart b/lib/widgets/wide_tile_card.dart index c92fb1ba..ac40babe 100644 --- a/lib/widgets/wide_tile_card.dart +++ b/lib/widgets/wide_tile_card.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart'; +import "package:flutter/material.dart"; -import '../config/ui_config.dart'; -import '../theme/app_theme.dart'; -import 'my_cached_image.dart'; -import '../features/student_research_group_tab/widgets/ensure_visible_tags.dart'; +import "../config/ui_config.dart"; +import "../features/student_research_group_tab/widgets/ensure_visible_tags.dart"; +import "../theme/app_theme.dart"; +import "my_cached_image.dart"; class PhotoTrailingWideTileCard extends WideTileCard { PhotoTrailingWideTileCard({ @@ -26,7 +26,7 @@ class PhotoTrailingWideTileCard extends WideTileCard { class WideTileCard extends StatelessWidget { const WideTileCard({ required this.title, - this.subtitle ="", + this.subtitle = "", this.trailing, this.onTap, this.activeGradient, @@ -64,8 +64,13 @@ class WideTileCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( - child: - _TitlesColumn(title, subtitle, isActive, secondSubtitle)), + child: _TitlesColumn( + title, + subtitle, + secondSubtitle, + isActive: isActive, + ), + ), if (trailing != null) trailing!, ], ), @@ -78,9 +83,9 @@ class _TitlesColumn extends StatelessWidget { const _TitlesColumn( this.title, this.subtitle, - this.isActive, - this.secondSubtitle, - ); + this.secondSubtitle, { + required this.isActive, + }); final String title; final String? subtitle; @@ -89,28 +94,34 @@ class _TitlesColumn extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - const basePadding = WideTileCardConfig.basePadding; + return LayoutBuilder( + builder: (context, constraints) { + const basePadding = WideTileCardConfig.basePadding; - return Padding( - padding: const EdgeInsets.only( - left: basePadding, top: basePadding, right: basePadding), - child: EnsureVisibleTags( - title: title, - titleStyle: - isActive ? context.textTheme.titleWhite : context.textTheme.title, - subtitle: subtitle, - subtitleStyle: - isActive ? context.textTheme.bodyWhite : context.textTheme.body, - spacing: - secondSubtitle == null ? WideTileCardConfig.titlesSpacing : 2, - secondSubtitle: secondSubtitle, - secondSubtitleStyle: isActive - ? context.textTheme.bodyWhite - : context.textTheme.bodyBlue, - maxTotalLines: 5, - ), - ); - }); + return Padding( + padding: const EdgeInsets.only( + left: basePadding, + top: basePadding, + right: basePadding, + ), + child: EnsureVisibleTags( + title: title, + titleStyle: isActive + ? context.textTheme.titleWhite + : context.textTheme.title, + subtitle: subtitle, + subtitleStyle: + isActive ? context.textTheme.bodyWhite : context.textTheme.body, + spacing: + secondSubtitle == null ? WideTileCardConfig.titlesSpacing : 2, + secondSubtitle: secondSubtitle, + secondSubtitleStyle: isActive + ? context.textTheme.bodyWhite + : context.textTheme.bodyBlue, + maxTotalLines: 5, + ), + ); + }, + ); } } diff --git a/pubspec.yaml b/pubspec.yaml index 851a0c66..73c0da58 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -56,7 +56,9 @@ dependencies: fl_chart: ^0.67.0 permission_handler: ^11.3.1 flutter_widget_from_html_core: ^0.14.12 - flutter_gen: ^5.6.0 + html: ^0.15.4 + google_maps_flutter_android: ^2.12.0 + google_maps_flutter_platform_interface: ^2.8.0 dev_dependencies: flutter_test: diff --git a/test/widget_test.dart b/test/widget_test.dart index d5b0cc5f..10d49ac6 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -5,26 +5,26 @@ // gestures. You can also use WidgetTester to find child widgets in the widget // tree, read text, and verify that the values of widget properties are correct. -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; +import "package:flutter/material.dart"; +import "package:flutter_test/flutter_test.dart"; -import 'package:topwr/main.dart'; +import "package:topwr/main.dart"; void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { + testWidgets("Counter increments smoke test", (WidgetTester tester) async { // Build our app and trigger a frame. await tester.pumpWidget(const MyApp()); // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); + expect(find.text("0"), findsOneWidget); + expect(find.text("1"), findsNothing); // Tap the '+' icon and trigger a frame. await tester.tap(find.byIcon(Icons.add)); await tester.pump(); // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); + expect(find.text("0"), findsNothing); + expect(find.text("1"), findsOneWidget); }); } From 36264427bb533939b12f98935c43901f8ea1a80b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kowali=C5=84ski?= Date: Thu, 25 Jul 2024 18:43:53 +0200 Subject: [PATCH 6/8] refactor: run dart format --- lib/api_base/ttl/ttl_service.dart | 3 +- lib/api_base/ttl/ttl_timestamp.dart | 3 +- lib/api_base/watch_query_adapter.dart | 4 +- lib/config/navigator_config.dart | 1 - .../department_details.dart | 89 ++++++++++--------- .../utils/address_formatter.dart | 7 +- .../utils/department_details_gradient.dart | 19 ++-- .../departments_tab_controller.dart | 10 ++- lib/features/guide/guide_view_template.dart | 5 +- .../guide/widgets/about_us/about_us_tab.dart | 7 +- .../about_us/widgets/team_section.dart | 7 +- .../infos_preview_repository.dart | 3 +- ...orizontal_rectangular_section_loading.dart | 17 ++-- lib/features/home_view/widgets/paddings.dart | 12 +-- .../iparking/models/parking_model.dart | 1 - .../chart_elements/labels_left.dart | 31 +++---- lib/features/iparking_chart/chart_widget.dart | 38 ++++---- .../controllers/map_data_controller.dart | 3 +- .../map_view_pop_behaviour.dart | 21 ++--- .../bottom_scroll_sheet/navigate_button.dart | 30 +++---- .../widgets/fade_in_gradient_animation.dart | 11 +-- .../widgets/fade_in_splash_gradient.dart | 12 +-- .../widgets/flutter_splash_screen.dart | 13 +-- .../scientific_circles_tab.dart | 28 +++--- .../widgets/scientific_circle_card.dart | 12 +-- .../widgets/tags_loading.dart | 17 ++-- .../widgets/tags_row.dart | 72 ++++++++------- .../repository/study_circle_repository.dart | 4 +- .../study_circle_details.dart | 82 +++++++++-------- .../details_screen_about_us_section.dart | 6 +- .../widgets/details_screen_app_bar.dart | 21 ++--- lib/main.dart | 9 +- .../map_buildings_repo.dart | 3 +- .../departments_repository.dart | 3 +- lib/theme/greeting_theme.dart | 7 +- lib/widgets/big_preview_card.dart | 41 +++++---- lib/widgets/date_chip.dart | 26 +++--- .../details_screen_sliver_header_section.dart | 57 ++++++------ .../contact_section_loading.dart | 3 +- .../scrolable_loader_builder.dart | 25 +++--- .../big_preview_card_loading.dart | 29 +++--- .../specific_imitations/button_loading.dart | 27 +++--- .../wide_tile_loading.dart | 34 +++---- lib/widgets/my_cached_image.dart | 9 +- lib/widgets/my_text_button.dart | 17 ++-- lib/widgets/search_widget.dart | 8 +- lib/widgets/subsection_header.dart | 8 +- 47 files changed, 489 insertions(+), 406 deletions(-) diff --git a/lib/api_base/ttl/ttl_service.dart b/lib/api_base/ttl/ttl_service.dart index 4fbd9720..d81e11fc 100644 --- a/lib/api_base/ttl/ttl_service.dart +++ b/lib/api_base/ttl/ttl_service.dart @@ -24,7 +24,8 @@ class TtlService extends _$TtlService { ref.watch(localTimestampRepoProvider.call(key).future); Future> interceptAndSaveTimestamps( - QueryResult event,) async { + QueryResult event, + ) async { if (event.source == QueryResultSource.network) { final repo = await repository; await repo.saveTimestamp(event); diff --git a/lib/api_base/ttl/ttl_timestamp.dart b/lib/api_base/ttl/ttl_timestamp.dart index b105662c..3c152263 100644 --- a/lib/api_base/ttl/ttl_timestamp.dart +++ b/lib/api_base/ttl/ttl_timestamp.dart @@ -4,8 +4,7 @@ import "../../utils/timestamp.dart"; class TimestampTtl extends Timestamp { TimestampTtl.nil(this.key) : super.nil(); TimestampTtl.from(super.ts, this.key) : super.from(); - TimestampTtl.tryParse(super.formattedString, this.key) - : super.tryParse(); + TimestampTtl.tryParse(super.formattedString, this.key) : super.tryParse(); final TtlKey key; diff --git a/lib/api_base/watch_query_adapter.dart b/lib/api_base/watch_query_adapter.dart index 943553dc..1285595f 100644 --- a/lib/api_base/watch_query_adapter.dart +++ b/lib/api_base/watch_query_adapter.dart @@ -41,7 +41,9 @@ extension _WatchQueryStreamAdapter on Ref { extension TTLWatchQueryAdapter on AutoDisposeStreamProviderRef { Stream watchQueryWithCache( - WatchQueryOptions watchQueryOptions, TtlKey ttlKey,) async* { + WatchQueryOptions watchQueryOptions, + TtlKey ttlKey, + ) async* { final apiClient = await watch(gqlClientProvider); final ttlService = ttlServiceProvider.call(ttlKey); final ttlFetchPolicy = await watch(ttlService.future); diff --git a/lib/config/navigator_config.dart b/lib/config/navigator_config.dart index 3a893b7b..db1a70a1 100644 --- a/lib/config/navigator_config.dart +++ b/lib/config/navigator_config.dart @@ -10,7 +10,6 @@ abstract class NavigatorConfig { static const initialTab = NavBarEnum.home; } - abstract class TabsConfig { static const tabs = UnmodifiableNavBarEnumMap( home: HomeView(), diff --git a/lib/features/department_details/department_details.dart b/lib/features/department_details/department_details.dart index 0276ea4e..bf7799a1 100644 --- a/lib/features/department_details/department_details.dart +++ b/lib/features/department_details/department_details.dart @@ -40,51 +40,60 @@ class _DepartmentDetailsDataView extends ConsumerWidget { return switch (state) { AsyncLoading() => const DepartmentDetailsLoading(), AsyncError(:final error) => MyErrorWidget(error), - AsyncValue(:final value) => CustomScrollView(slivers: [ - SliverPersistentHeader( + AsyncValue(:final value) => CustomScrollView( + slivers: [ + SliverPersistentHeader( delegate: SliverHeaderSection( - activeGradient: value?.Departments_by_id?.gradient, - logoImageUrl: - value?.Departments_by_id?.logo?.filename_disk?.directusUrl, - backgroundImageUrl: null, - ),), - SliverList( - delegate: SliverChildListDelegate([ - const SizedBox(height: 8), - Text( - value?.Departments_by_id?.name ?? "", - style: context.textTheme.headline, - textAlign: TextAlign.center, - maxLines: 2, - ), - const SizedBox(height: 12), - Text( - value?.Departments_by_id?.address?.divideAddressInto3Lines ?? "", - style: context.textTheme.body.copyWith(height: 1.2), - textAlign: TextAlign.center, + activeGradient: value?.Departments_by_id?.gradient, + logoImageUrl: + value?.Departments_by_id?.logo?.filename_disk?.directusUrl, + backgroundImageUrl: null, + ), ), - const SizedBox(height: DetailsScreenConfig.spacerHeight), - ContactSection( - title: context.localize.deans_office, - list: value?.Departments_by_id?.links.whereNonNull - .map((link) => UrlIconsModel( + SliverList( + delegate: SliverChildListDelegate([ + const SizedBox(height: 8), + Text( + value?.Departments_by_id?.name ?? "", + style: context.textTheme.headline, + textAlign: TextAlign.center, + maxLines: 2, + ), + const SizedBox(height: 12), + Text( + value?.Departments_by_id?.address?.divideAddressInto3Lines ?? + "", + style: context.textTheme.body.copyWith(height: 1.2), + textAlign: TextAlign.center, + ), + const SizedBox(height: DetailsScreenConfig.spacerHeight), + ContactSection( + title: context.localize.deans_office, + list: value?.Departments_by_id?.links.whereNonNull + .map( + (link) => UrlIconsModel( text: link.name, url: link.link, - ),) - .toList() ?? - List.empty(),), - FieldsOfStudySection( - fieldsOfStudy: value - ?.Departments_by_id?.fieldsOfStudies.whereNonNull - .map((e) => e.name) - .toList() ?? - List.empty(), + ), + ) + .toList() ?? + List.empty(), + ), + FieldsOfStudySection( + fieldsOfStudy: value + ?.Departments_by_id?.fieldsOfStudies.whereNonNull + .map((e) => e.name) + .toList() ?? + List.empty(), + ), + DepartmentsStudyCirclesSection( + value?.Scientific_Circles.whereNonNull.toList() ?? + List.empty(), + ), + ]), ), - DepartmentsStudyCirclesSection( - value?.Scientific_Circles.whereNonNull.toList() ?? - List.empty(),), - ]),), - ],), + ], + ), }; } } diff --git a/lib/features/department_details/utils/address_formatter.dart b/lib/features/department_details/utils/address_formatter.dart index 58017257..690dcdbc 100644 --- a/lib/features/department_details/utils/address_formatter.dart +++ b/lib/features/department_details/utils/address_formatter.dart @@ -1,13 +1,10 @@ - - - extension AddressFormatter on String { String get divideAddressInto3Lines { final parts = split(" "); final postalCodeIndex = parts.indexWhere((part) => RegExp(r"^\d{2}-\d{3}$").hasMatch(part)); - final streetStartIndex = - parts.indexWhere((part) => RegExp(r"^(ul\.|wyb\.|plac)").hasMatch(part)); + final streetStartIndex = parts + .indexWhere((part) => RegExp(r"^(ul\.|wyb\.|plac)").hasMatch(part)); final postalCodeAndCity = parts.sublist(postalCodeIndex).join(" "); final streetAddress = parts.sublist(streetStartIndex, postalCodeIndex).join(" "); diff --git a/lib/features/department_details/utils/department_details_gradient.dart b/lib/features/department_details/utils/department_details_gradient.dart index b4b60401..6adf405f 100644 --- a/lib/features/department_details/utils/department_details_gradient.dart +++ b/lib/features/department_details/utils/department_details_gradient.dart @@ -1,4 +1,3 @@ - import "package:flutter/material.dart"; import "../../../config/ui_config.dart"; import "../../../theme/hex_color.dart"; @@ -7,13 +6,13 @@ import "../repositories/department_details_repository.dart"; extension DepartmentsExtraParamsExt on DepartmentDetailsDetails { LinearGradient get gradient => LinearGradient( - colors: [ - HexColor( - gradient_start ?? DepartmentsConfig.defaultColorFirst, - ), - HexColor( - gradient_end ?? DepartmentsConfig.defaultColorSecond, - ), - ]..sortByLightness(), - ); + colors: [ + HexColor( + gradient_start ?? DepartmentsConfig.defaultColorFirst, + ), + HexColor( + gradient_end ?? DepartmentsConfig.defaultColorSecond, + ), + ]..sortByLightness(), + ); } diff --git a/lib/features/departments_tab/departments_tab_controller.dart b/lib/features/departments_tab/departments_tab_controller.dart index 6b2787a2..8ac8e41c 100644 --- a/lib/features/departments_tab/departments_tab_controller.dart +++ b/lib/features/departments_tab/departments_tab_controller.dart @@ -19,9 +19,11 @@ Future?> departmentList(DepartmentListRef ref) async { final originalList = await ref.watch(departmentsRepositoryProvider.future); final query = ref.watch(searchDepartmentsControllerProvider); return originalList - ?.where((element) => - element == null || - element.name.toLowerCase().contains(query.toLowerCase()) || - element.code.toLowerCase().contains(query.toLowerCase()),) + ?.where( + (element) => + element == null || + element.name.toLowerCase().contains(query.toLowerCase()) || + element.code.toLowerCase().contains(query.toLowerCase()), + ) .toList(); } diff --git a/lib/features/guide/guide_view_template.dart b/lib/features/guide/guide_view_template.dart index a1e9678e..6c8b7269 100644 --- a/lib/features/guide/guide_view_template.dart +++ b/lib/features/guide/guide_view_template.dart @@ -33,8 +33,9 @@ class GuideViewTemplate extends ConsumerWidget { child: Text( context.localize.about_us, style: TextStyle( - fontSize: 24, - color: context.colorTheme.orangePomegranade,), + fontSize: 24, + color: context.colorTheme.orangePomegranade, + ), ), ), ), diff --git a/lib/features/guide/widgets/about_us/about_us_tab.dart b/lib/features/guide/widgets/about_us/about_us_tab.dart index 47a510e4..83950edf 100644 --- a/lib/features/guide/widgets/about_us/about_us_tab.dart +++ b/lib/features/guide/widgets/about_us/about_us_tab.dart @@ -35,9 +35,10 @@ class _AboutUsView extends ConsumerWidget { return switch (state) { AsyncLoading() => Center( - child: CircularProgressIndicator( - color: context.colorTheme.orangePomegranade, - ),), + child: CircularProgressIndicator( + color: context.colorTheme.orangePomegranade, + ), + ), AsyncError(:final error) => MyErrorWidget(error), AsyncValue(:final value) => CustomScrollView( slivers: [ diff --git a/lib/features/guide/widgets/about_us/widgets/team_section.dart b/lib/features/guide/widgets/about_us/widgets/team_section.dart index 9b07ba2c..4c7500f6 100644 --- a/lib/features/guide/widgets/about_us/widgets/team_section.dart +++ b/lib/features/guide/widgets/about_us/widgets/team_section.dart @@ -84,8 +84,11 @@ class _Icon extends StatelessWidget { } class _Description extends StatelessWidget { - const _Description( - {required this.name, required this.subtitle, required this.links,}); + const _Description({ + required this.name, + required this.subtitle, + required this.links, + }); final String name; final String subtitle; final List links; diff --git a/lib/features/home_view/repositories/infos_repository/infos_preview_repository.dart b/lib/features/home_view/repositories/infos_repository/infos_preview_repository.dart index 401ee0f9..d597af16 100644 --- a/lib/features/home_view/repositories/infos_repository/infos_preview_repository.dart +++ b/lib/features/home_view/repositories/infos_repository/infos_preview_repository.dart @@ -10,7 +10,8 @@ typedef InfosPreview = Query$GetInfosPreview$Posts; @riverpod Stream?> infosPreviewRepository( - InfosPreviewRepositoryRef ref,) async* { + InfosPreviewRepositoryRef ref, +) async* { final stream = ref.watchQueryWithCache( WatchOptions$Query$GetInfosPreview(eagerlyFetchResults: true), TtlKey.infosPreviewRepository, diff --git a/lib/features/home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart b/lib/features/home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart index 919c623e..348fa0b9 100644 --- a/lib/features/home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart +++ b/lib/features/home_view/widgets/loading_widgets/horizontal_rectangular_section_loading.dart @@ -8,13 +8,14 @@ class HorizontalRectangularSectionLoading extends StatelessWidget { @override Widget build(BuildContext context) { return ShimmeringEffect( - child: Container( - width: double.maxFinite, - height: 69, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(8), - ), - ),); + child: Container( + width: double.maxFinite, + height: 69, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + ), + ), + ); } } diff --git a/lib/features/home_view/widgets/paddings.dart b/lib/features/home_view/widgets/paddings.dart index 9dcfc1a9..0abac8d4 100644 --- a/lib/features/home_view/widgets/paddings.dart +++ b/lib/features/home_view/widgets/paddings.dart @@ -5,14 +5,16 @@ import "../../../config/ui_config.dart"; class SmallHorizontalPadding extends Padding { const SmallHorizontalPadding({super.key, super.child}) : super( - padding: const EdgeInsets.only( - left: HomeScreenConfig.paddingSmall, - right: HomeScreenConfig.paddingSmall,),); + padding: const EdgeInsets.only( + left: HomeScreenConfig.paddingSmall, + right: HomeScreenConfig.paddingSmall, + ), + ); } class MediumLeftPadding extends Padding { const MediumLeftPadding({super.key, super.child}) : super( - padding: - const EdgeInsets.only(left: HomeScreenConfig.paddingMedium),); + padding: const EdgeInsets.only(left: HomeScreenConfig.paddingMedium), + ); } diff --git a/lib/features/iparking/models/parking_model.dart b/lib/features/iparking/models/parking_model.dart index 4044c383..3d662cd5 100644 --- a/lib/features/iparking/models/parking_model.dart +++ b/lib/features/iparking/models/parking_model.dart @@ -11,7 +11,6 @@ part "parking_model.g.dart"; @freezed class ParkingPlace with _$ParkingPlace implements GoogleNavigable { - @Implements() @JsonSerializable(fieldRename: FieldRename.snake) const factory ParkingPlace({ diff --git a/lib/features/iparking_chart/chart_elements/labels_left.dart b/lib/features/iparking_chart/chart_elements/labels_left.dart index 09671c7b..2e7736fd 100644 --- a/lib/features/iparking_chart/chart_elements/labels_left.dart +++ b/lib/features/iparking_chart/chart_elements/labels_left.dart @@ -13,20 +13,21 @@ class LeftLabels extends AxisTitles { LeftLabels(BuildContext context) : super( sideTitles: SideTitles( - showTitles: true, - reservedSize: 30, - getTitlesWidget: (value, meta) { - if (value == meta.max && meta.isMaxLabelOverlapping) { - return const SizedBox.shrink(); - } - return SideTitleWidget( - axisSide: AxisSide.left, - space: 10, - child: Text( - meta.formattedValue, - style: context.iParkingTheme.chart, - ), - ); - },), + showTitles: true, + reservedSize: 30, + getTitlesWidget: (value, meta) { + if (value == meta.max && meta.isMaxLabelOverlapping) { + return const SizedBox.shrink(); + } + return SideTitleWidget( + axisSide: AxisSide.left, + space: 10, + child: Text( + meta.formattedValue, + style: context.iParkingTheme.chart, + ), + ); + }, + ), ); } diff --git a/lib/features/iparking_chart/chart_widget.dart b/lib/features/iparking_chart/chart_widget.dart index 8a52c95d..cc44c18b 100644 --- a/lib/features/iparking_chart/chart_widget.dart +++ b/lib/features/iparking_chart/chart_widget.dart @@ -39,24 +39,28 @@ class ParkingChart extends ConsumerWidget { color: context.colorTheme.greyLight.withOpacity(0.8), child: MyErrorWidget(error), ), - AsyncValue(:final value) => Builder(builder: (context) { - if (value == null) return const SizedBox.shrink(); - final chartPoints = value.toChartPoints().toList(); - if (chartPoints.isEmpty) { - return Center( - child: Text(context.localize.noChartData, - style: context.iParkingTheme.subtitleLight.withoutShadows,), + AsyncValue(:final value) => Builder( + builder: (context) { + if (value == null) return const SizedBox.shrink(); + final chartPoints = value.toChartPoints().toList(); + if (chartPoints.isEmpty) { + return Center( + child: Text( + context.localize.noChartData, + style: context.iParkingTheme.subtitleLight.withoutShadows, + ), + ); + } + return Padding( + padding: const EdgeInsets.only( + top: 20, + right: 25, + bottom: 10, + ), + child: IChart(chartPoints, parkingPlace), ); - } - return Padding( - padding: const EdgeInsets.only( - top: 20, - right: 25, - bottom: 10, - ), - child: IChart(chartPoints, parkingPlace), - ); - },), + }, + ), }; } } diff --git a/lib/features/map_view/controllers/map_data_controller.dart b/lib/features/map_view/controllers/map_data_controller.dart index 2a9d56f4..879013ee 100644 --- a/lib/features/map_view/controllers/map_data_controller.dart +++ b/lib/features/map_view/controllers/map_data_controller.dart @@ -16,7 +16,8 @@ mixin MapDataController final itemsData = await ref.watch(mapControllers.sourceRepo.future); return itemsData?.where( - _filterMethod,); // or elsewhere a whole list, filtered by text field + _filterMethod, + ); // or elsewhere a whole list, filtered by text field } bool filterMethod(T item, String filterStr); diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/map_view_pop_behaviour.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/map_view_pop_behaviour.dart index e511c611..6005927c 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/map_view_pop_behaviour.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/map_view_pop_behaviour.dart @@ -21,15 +21,16 @@ class MapViewPopBehaviour extends ConsumerWidget { final isAnyActive = ref.watch(context.activeMarkerController()) != null; return PopScope( - canPop: !isAnyActive && !isAlmostFullyExtended, - onPopInvoked: (didPop) { - if (!didPop) { - ref - .read(context.mapController().notifier) - .onMapBackgroundTap(null); - ref.read(bottomSheetControllerProvider).resetSafe(); - } - }, - child: child,); + canPop: !isAnyActive && !isAlmostFullyExtended, + onPopInvoked: (didPop) { + if (!didPop) { + ref + .read(context.mapController().notifier) + .onMapBackgroundTap(null); + ref.read(bottomSheetControllerProvider).resetSafe(); + } + }, + child: child, + ); } } diff --git a/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart b/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart index 74c135bd..b886f8ac 100644 --- a/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart +++ b/lib/features/map_view/widgets/bottom_scroll_sheet/navigate_button.dart @@ -18,21 +18,21 @@ class NavigateButton extends ConsumerWidget { right: MapViewBottomSheetConfig.horizontalPadding - 3, ), child: TextButton.icon( - icon: Icon( - IParkingIcons.map_nav, - color: context.colorTheme.orangePomegranade, - size: 16, - ), - onPressed: ref - .watch(context.activeMarkerController().notifier) - .launchLink, - style: TextButton.styleFrom( - padding: EdgeInsets.zero, - ), - label: Text( - context.localize.navigate, - style: context.textTheme.boldBodyOrange, - ),), + icon: Icon( + IParkingIcons.map_nav, + color: context.colorTheme.orangePomegranade, + size: 16, + ), + onPressed: + ref.watch(context.activeMarkerController().notifier).launchLink, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + ), + label: Text( + context.localize.navigate, + style: context.textTheme.boldBodyOrange, + ), + ), ); } } diff --git a/lib/features/splash_screen/widgets/fade_in_gradient_animation.dart b/lib/features/splash_screen/widgets/fade_in_gradient_animation.dart index ee7869dc..b0fdd901 100644 --- a/lib/features/splash_screen/widgets/fade_in_gradient_animation.dart +++ b/lib/features/splash_screen/widgets/fade_in_gradient_animation.dart @@ -2,11 +2,12 @@ import "package:flutter/material.dart"; class FadeInGradientAnimation extends StatefulWidget { /// Animates between two LinearGradients on first build - const FadeInGradientAnimation( - {super.key, - required this.gradientStart, - required this.gradientStop, - required this.duration,}); + const FadeInGradientAnimation({ + super.key, + required this.gradientStart, + required this.gradientStop, + required this.duration, + }); final LinearGradient gradientStart; final LinearGradient gradientStop; diff --git a/lib/features/splash_screen/widgets/fade_in_splash_gradient.dart b/lib/features/splash_screen/widgets/fade_in_splash_gradient.dart index 5f9c1606..4465c9c5 100644 --- a/lib/features/splash_screen/widgets/fade_in_splash_gradient.dart +++ b/lib/features/splash_screen/widgets/fade_in_splash_gradient.dart @@ -8,11 +8,13 @@ class FadeInSplashGradient extends FadeInGradientAnimation { /// Fades in from Android's single color splash to ToPwr LinearGradient on first build const FadeInSplashGradient({super.key}) : super( - gradientStart: const LinearGradient(colors: [ - SplashScreenConfig.androidNativeSplashColor, - SplashScreenConfig.androidNativeSplashColor, - SplashScreenConfig.androidNativeSplashColor, - ],), + gradientStart: const LinearGradient( + colors: [ + SplashScreenConfig.androidNativeSplashColor, + SplashScreenConfig.androidNativeSplashColor, + SplashScreenConfig.androidNativeSplashColor, + ], + ), gradientStop: ColorsConsts.toPwrGradient, duration: SplashScreenConfig.animationDuration, ); diff --git a/lib/features/splash_screen/widgets/flutter_splash_screen.dart b/lib/features/splash_screen/widgets/flutter_splash_screen.dart index 94e1f5be..55475ee0 100644 --- a/lib/features/splash_screen/widgets/flutter_splash_screen.dart +++ b/lib/features/splash_screen/widgets/flutter_splash_screen.dart @@ -18,13 +18,14 @@ class FlutterSplashScreen extends StatelessWidget { children: [ const Positioned.fill(child: FadeInSplashGradient()), Center( - child: SizedBox( - height: size ?? SplashScreenConfig.androidSplashSizeInDp, - width: size ?? SplashScreenConfig.androidSplashSizeInDp, - child: Image.asset( - Assets.splashScreen.splashLogo.path, + child: SizedBox( + height: size ?? SplashScreenConfig.androidSplashSizeInDp, + width: size ?? SplashScreenConfig.androidSplashSizeInDp, + child: Image.asset( + Assets.splashScreen.splashLogo.path, + ), ), - ),), + ), ], ), ); diff --git a/lib/features/student_research_group_tab/scientific_circles_tab.dart b/lib/features/student_research_group_tab/scientific_circles_tab.dart index 9ed84af4..580cb181 100644 --- a/lib/features/student_research_group_tab/scientific_circles_tab.dart +++ b/lib/features/student_research_group_tab/scientific_circles_tab.dart @@ -37,18 +37,20 @@ class _ScientificCirclesBody extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final tags = ref.watch(tagsListRepositoryProvider); - return Column(children: [ - SizedBox( - height: 76, - child: switch (tags) { - AsyncLoading() => const TagsLoading(), - AsyncError() => const SizedBox.shrink(), - AsyncValue(:final value) => TagsRow( - allTags: value.whereNonNull.toList(), - ) - }, - ), - const ScientificCirclesList(), - ],); + return Column( + children: [ + SizedBox( + height: 76, + child: switch (tags) { + AsyncLoading() => const TagsLoading(), + AsyncError() => const SizedBox.shrink(), + AsyncValue(:final value) => TagsRow( + allTags: value.whereNonNull.toList(), + ) + }, + ), + const ScientificCirclesList(), + ], + ); } } diff --git a/lib/features/student_research_group_tab/widgets/scientific_circle_card.dart b/lib/features/student_research_group_tab/widgets/scientific_circle_card.dart index 591072fe..424feeb9 100644 --- a/lib/features/student_research_group_tab/widgets/scientific_circle_card.dart +++ b/lib/features/student_research_group_tab/widgets/scientific_circle_card.dart @@ -24,17 +24,19 @@ class ResearchGroupCard extends StatelessWidget { activeShadows: null, trailing: Padding( padding: const EdgeInsets.only( - right: ScientificCircleCardConfig.trailingPadding, - top: ScientificCircleCardConfig.trailingPadding, - bottom: ScientificCircleCardConfig.trailingPadding,), + right: ScientificCircleCardConfig.trailingPadding, + top: ScientificCircleCardConfig.trailingPadding, + bottom: ScientificCircleCardConfig.trailingPadding, + ), child: SizedBox.square( dimension: WideTileCardConfig.imageSize, child: Container( clipBehavior: Clip.antiAlias, decoration: const BoxDecoration( borderRadius: BorderRadius.only( - topRight: WideTileCardConfig.radius, - bottomRight: WideTileCardConfig.radius,), + topRight: WideTileCardConfig.radius, + bottomRight: WideTileCardConfig.radius, + ), ), child: MyCachedImage( sciCircle.logo?.filename_disk.directusUrl, diff --git a/lib/features/student_research_group_tab/widgets/tags_loading.dart b/lib/features/student_research_group_tab/widgets/tags_loading.dart index 2cc0868b..cf3b07ca 100644 --- a/lib/features/student_research_group_tab/widgets/tags_loading.dart +++ b/lib/features/student_research_group_tab/widgets/tags_loading.dart @@ -9,13 +9,14 @@ class TagsLoading extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.only( - left: ScientificCirclesTabConfig.smallPadding, - ), - child: GridView.builder( - gridDelegate: ScientificCirclesTabConfig.tagsGridDelegate, - itemBuilder: (context, index) => const ButtonLoading(), - physics: const NeverScrollableScrollPhysics(), - ),); + padding: const EdgeInsets.only( + left: ScientificCirclesTabConfig.smallPadding, + ), + child: GridView.builder( + gridDelegate: ScientificCirclesTabConfig.tagsGridDelegate, + itemBuilder: (context, index) => const ButtonLoading(), + physics: const NeverScrollableScrollPhysics(), + ), + ); } } diff --git a/lib/features/student_research_group_tab/widgets/tags_row.dart b/lib/features/student_research_group_tab/widgets/tags_row.dart index b28869ad..2a2bde71 100644 --- a/lib/features/student_research_group_tab/widgets/tags_row.dart +++ b/lib/features/student_research_group_tab/widgets/tags_row.dart @@ -16,14 +16,18 @@ class TagsRow extends ConsumerWidget { return SingleChildScrollView( scrollDirection: Axis.horizontal, child: Padding( - padding: const EdgeInsets.only( - left: ScientificCirclesTabConfig.smallPadding, - right: ScientificCirclesTabConfig.smallPadding, - bottom: ScientificCirclesTabConfig.smallPadding,), - child: Row(children: [ + padding: const EdgeInsets.only( + left: ScientificCirclesTabConfig.smallPadding, + right: ScientificCirclesTabConfig.smallPadding, + bottom: ScientificCirclesTabConfig.smallPadding, + ), + child: Row( + children: [ for (final tag in allTags) _TagsRowItem(tag: tag, selectedTag: selectedTag), - ],),), + ], + ), + ), ); } } @@ -36,30 +40,36 @@ class _TagsRowItem extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { return Padding( - padding: const EdgeInsets.symmetric( - horizontal: ScientificCirclesTabConfig.microPadding,), - child: ChoiceChip( - showCheckmark: false, - label: Text(tag.name), - selected: selectedTag == tag.name, - onSelected: (bool selected) { - ref - .read(selectedTagControllerProvider.notifier) - .handleTagSelected(tag); - }, - selectedColor: context.colorTheme.orangePomegranade, - backgroundColor: Colors.transparent, - labelStyle: TextStyle( - color: selectedTag == tag.name - ? Colors.white - : context.colorTheme.greyPigeon,), - side: BorderSide( - color: selectedTag == tag.name - ? context.colorTheme.orangePomegranade - : context.colorTheme.greyPigeon,), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - ScientificCirclesTabConfig.buttonBorderRadius,),), - ),); + padding: const EdgeInsets.symmetric( + horizontal: ScientificCirclesTabConfig.microPadding, + ), + child: ChoiceChip( + showCheckmark: false, + label: Text(tag.name), + selected: selectedTag == tag.name, + onSelected: (bool selected) { + ref + .read(selectedTagControllerProvider.notifier) + .handleTagSelected(tag); + }, + selectedColor: context.colorTheme.orangePomegranade, + backgroundColor: Colors.transparent, + labelStyle: TextStyle( + color: selectedTag == tag.name + ? Colors.white + : context.colorTheme.greyPigeon, + ), + side: BorderSide( + color: selectedTag == tag.name + ? context.colorTheme.orangePomegranade + : context.colorTheme.greyPigeon, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular( + ScientificCirclesTabConfig.buttonBorderRadius, + ), + ), + ), + ); } } diff --git a/lib/features/study_circle_details/repository/study_circle_repository.dart b/lib/features/study_circle_details/repository/study_circle_repository.dart index f7ac17a8..95f655f8 100644 --- a/lib/features/study_circle_details/repository/study_circle_repository.dart +++ b/lib/features/study_circle_details/repository/study_circle_repository.dart @@ -14,7 +14,9 @@ typedef _GetStudyCircles = WatchOptions$Query$GetScientificCircleDetails; @riverpod Stream studyCircleRepository( - StudyCircleRepositoryRef ref, String id,) async* { + StudyCircleRepositoryRef ref, + String id, +) async* { final stream = ref.watchQueryWithCache( _GetStudyCircles( eagerlyFetchResults: true, diff --git a/lib/features/study_circle_details/study_circle_details.dart b/lib/features/study_circle_details/study_circle_details.dart index 8ae87e6b..8c5cdf0f 100644 --- a/lib/features/study_circle_details/study_circle_details.dart +++ b/lib/features/study_circle_details/study_circle_details.dart @@ -24,9 +24,10 @@ class StudyCircleDetails extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: - DetailsScreenAppBar(context, title: context.localize.study_circles), - body: const _CircleDetailsDataView(),); + appBar: + DetailsScreenAppBar(context, title: context.localize.study_circles), + body: const _CircleDetailsDataView(), + ); } } @@ -40,45 +41,50 @@ class _CircleDetailsDataView extends ConsumerWidget { return switch (state) { AsyncLoading() => const _StudyCircleDetailsLoading(), AsyncError(:final error) => MyErrorWidget(error), - AsyncValue(:final value) => CustomScrollView(slivers: [ - SliverPersistentHeader( + AsyncValue(:final value) => CustomScrollView( + slivers: [ + SliverPersistentHeader( delegate: SliverHeaderSection( - logoImageUrl: value?.logo?.filename_disk?.directusUrl, - backgroundImageUrl: value?.cover?.filename_disk?.directusUrl, - ),), - SliverList( - delegate: SliverChildListDelegate([ - const SizedBox(height: 8), - Text( - value?.name ?? "", - style: context.textTheme.headline, - textAlign: TextAlign.center, - maxLines: 2, - ), - const SizedBox(height: 12), - Text( - value?.department?.name ?? "", - style: context.textTheme.body, - textAlign: TextAlign.center, + logoImageUrl: value?.logo?.filename_disk?.directusUrl, + backgroundImageUrl: value?.cover?.filename_disk?.directusUrl, ), - const SizedBox(height: DetailsScreenConfig.spacerHeight), - ContactSection( - title: context.localize.contact, - list: value?.links.whereNonNull - .map((a) => UrlIconsModel( + ), + SliverList( + delegate: SliverChildListDelegate([ + const SizedBox(height: 8), + Text( + value?.name ?? "", + style: context.textTheme.headline, + textAlign: TextAlign.center, + maxLines: 2, + ), + const SizedBox(height: 12), + Text( + value?.department?.name ?? "", + style: context.textTheme.body, + textAlign: TextAlign.center, + ), + const SizedBox(height: DetailsScreenConfig.spacerHeight), + ContactSection( + title: context.localize.contact, + list: value?.links.whereNonNull + .map( + (a) => UrlIconsModel( text: a.name, url: a.link, - ),) - .toList() ?? - List.empty(), - ), - const SizedBox(height: DetailsScreenConfig.spacerHeight), - AboutUsSection( - text: value?.description ?? "", - ), - ]), - ), - ],), + ), + ) + .toList() ?? + List.empty(), + ), + const SizedBox(height: DetailsScreenConfig.spacerHeight), + AboutUsSection( + text: value?.description ?? "", + ), + ]), + ), + ], + ), }; } } diff --git a/lib/features/study_circle_details/widgets/details_screen_about_us_section.dart b/lib/features/study_circle_details/widgets/details_screen_about_us_section.dart index 1a1d1c3f..69d58a0a 100644 --- a/lib/features/study_circle_details/widgets/details_screen_about_us_section.dart +++ b/lib/features/study_circle_details/widgets/details_screen_about_us_section.dart @@ -17,8 +17,10 @@ class AboutUsSection extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(context.localize.about_us, - style: context.textTheme.headline,), + Text( + context.localize.about_us, + style: context.textTheme.headline, + ), const SizedBox(height: 16), HtmlWidget( text, diff --git a/lib/features/study_circle_details/widgets/details_screen_app_bar.dart b/lib/features/study_circle_details/widgets/details_screen_app_bar.dart index c88a5949..0ebdbfe1 100644 --- a/lib/features/study_circle_details/widgets/details_screen_app_bar.dart +++ b/lib/features/study_circle_details/widgets/details_screen_app_bar.dart @@ -9,15 +9,16 @@ class DetailsScreenAppBar extends AppBar { automaticallyImplyLeading: false, scrolledUnderElevation: 0, title: TextButton( - onPressed: () { - Navigator.pop(context); - }, - style: TextButton.styleFrom( - padding: EdgeInsets.zero, - ), - child: Text( - "< $title", - style: context.textTheme.boldBodyOrange, - ),), + onPressed: () { + Navigator.pop(context); + }, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + ), + child: Text( + "< $title", + style: context.textTheme.boldBodyOrange, + ), + ), ); } diff --git a/lib/main.dart b/lib/main.dart index c8193b4f..afedf0d7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -29,10 +29,11 @@ class MyApp extends StatelessWidget { localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, theme: ThemeData( - extensions: const [AppTheme()], - colorScheme: const ColorScheme.light().copyWith( - surface: ColorsConsts.whiteSoap, - ),), + extensions: const [AppTheme()], + colorScheme: const ColorScheme.light().copyWith( + surface: ColorsConsts.whiteSoap, + ), + ), debugShowCheckedModeBanner: false, home: const RootNavigatorWidget(), ); diff --git a/lib/shared_repositories/buildings_repository/map_buildings_repo.dart b/lib/shared_repositories/buildings_repository/map_buildings_repo.dart index 4c2fef62..8091159d 100644 --- a/lib/shared_repositories/buildings_repository/map_buildings_repo.dart +++ b/lib/shared_repositories/buildings_repository/map_buildings_repo.dart @@ -11,7 +11,8 @@ typedef Building = Query$GetMapBuildings$Buildings; @riverpod Stream?> mapBuildingsRepository( - MapBuildingsRepositoryRef ref,) async* { + MapBuildingsRepositoryRef ref, +) async* { final stream = ref.watchQueryWithCache( WatchOptions$Query$GetMapBuildings(eagerlyFetchResults: true), TtlKey.mapBuildingsRepository, diff --git a/lib/shared_repositories/departments_repository/departments_repository.dart b/lib/shared_repositories/departments_repository/departments_repository.dart index b05a99fe..a10f5d43 100644 --- a/lib/shared_repositories/departments_repository/departments_repository.dart +++ b/lib/shared_repositories/departments_repository/departments_repository.dart @@ -11,7 +11,8 @@ typedef Department = Query$GetDepartments$Departments; @riverpod Stream?> departmentsRepository( - DepartmentsRepositoryRef ref,) async* { + DepartmentsRepositoryRef ref, +) async* { final stream = ref.watchQueryWithCache( WatchOptions$Query$GetDepartments( eagerlyFetchResults: true, diff --git a/lib/theme/greeting_theme.dart b/lib/theme/greeting_theme.dart index 51eebd07..49cc5870 100644 --- a/lib/theme/greeting_theme.dart +++ b/lib/theme/greeting_theme.dart @@ -21,7 +21,8 @@ class GreetingTheme extends ThemeExtension @override final TextStyle boldTextStyle; - const GreetingTheme( - {this.textStyle = const GreetingTextStyle(), - this.boldTextStyle = const GreetingBoldTextStyle(),}); + const GreetingTheme({ + this.textStyle = const GreetingTextStyle(), + this.boldTextStyle = const GreetingBoldTextStyle(), + }); } diff --git a/lib/widgets/big_preview_card.dart b/lib/widgets/big_preview_card.dart index 2d9c7a10..934c2061 100644 --- a/lib/widgets/big_preview_card.dart +++ b/lib/widgets/big_preview_card.dart @@ -27,27 +27,33 @@ class BigPreviewCard extends StatelessWidget { Widget build(BuildContext context) { return Container( decoration: BoxDecoration( - color: context.colorTheme.greyLight, - borderRadius: BorderRadius.circular(8),), + color: context.colorTheme.greyLight, + borderRadius: BorderRadius.circular(8), + ), width: BigPreviewCardConfig.cardWidth, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( - flex: 135, - child: ClipRRect( - borderRadius: - const BorderRadius.vertical(top: Radius.circular(8)), - child: Stack( - alignment: Alignment.topRight, - children: [ - SizedBox( - width: double.maxFinite, - child: MyCachedImage(photoUrl),), - if (date != null) DateChip(date: date!) else const SizedBox.shrink(), - ], - ), - ),), + flex: 135, + child: ClipRRect( + borderRadius: + const BorderRadius.vertical(top: Radius.circular(8)), + child: Stack( + alignment: Alignment.topRight, + children: [ + SizedBox( + width: double.maxFinite, + child: MyCachedImage(photoUrl), + ), + if (date != null) + DateChip(date: date!) + else + const SizedBox.shrink(), + ], + ), + ), + ), Expanded( flex: 210, child: Container( @@ -72,7 +78,8 @@ class BigPreviewCard extends StatelessWidget { color: context.colorTheme.orangePomegranade, textColor: context.colorTheme.whiteSoap, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(4),), + borderRadius: BorderRadius.circular(4), + ), child: Text(context.localize.read_more), ), ], diff --git a/lib/widgets/date_chip.dart b/lib/widgets/date_chip.dart index 109e29eb..98aedf12 100644 --- a/lib/widgets/date_chip.dart +++ b/lib/widgets/date_chip.dart @@ -14,17 +14,19 @@ class DateChip extends StatelessWidget { @override Widget build(BuildContext context) { return Align( - alignment: Alignment.topRight, - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 6), - margin: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: context.colorTheme.blackMirage, - borderRadius: BorderRadius.circular(20),), - child: Text( - DateFormat(DateChipConfig.dateTimeFormat).format(date), - style: context.textTheme.bodyWhite, - ), - ),); + alignment: Alignment.topRight, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 6), + margin: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: context.colorTheme.blackMirage, + borderRadius: BorderRadius.circular(20), + ), + child: Text( + DateFormat(DateChipConfig.dateTimeFormat).format(date), + style: context.textTheme.bodyWhite, + ), + ), + ); } } diff --git a/lib/widgets/details_screen_sliver_header_section.dart b/lib/widgets/details_screen_sliver_header_section.dart index ca6f64f0..2af5fab4 100644 --- a/lib/widgets/details_screen_sliver_header_section.dart +++ b/lib/widgets/details_screen_sliver_header_section.dart @@ -54,38 +54,39 @@ class SliverHeaderSection extends SliverPersistentHeaderDelegate { ), ), Align( - alignment: Alignment.bottomCenter, - child: SizedBox.square( - child: ListView( - reverse: true, - physics: const NeverScrollableScrollPhysics(), - children: [ - Opacity( - opacity: logoOpacity, - child: Card( - elevation: 3, - shape: const CircleBorder(), - clipBehavior: Clip.antiAlias, - child: Container( - width: logoSize, - height: logoSize, - decoration: BoxDecoration( - gradient: activeGradient, - ), - child: FittedBox( - fit: BoxFit.scaleDown, - child: MyCachedImage( - size: Size.square(logoSize * scaleFactor), - logoImageUrl, - boxFit: BoxFit.scaleDown, - ), + alignment: Alignment.bottomCenter, + child: SizedBox.square( + child: ListView( + reverse: true, + physics: const NeverScrollableScrollPhysics(), + children: [ + Opacity( + opacity: logoOpacity, + child: Card( + elevation: 3, + shape: const CircleBorder(), + clipBehavior: Clip.antiAlias, + child: Container( + width: logoSize, + height: logoSize, + decoration: BoxDecoration( + gradient: activeGradient, + ), + child: FittedBox( + fit: BoxFit.scaleDown, + child: MyCachedImage( + size: Size.square(logoSize * scaleFactor), + logoImageUrl, + boxFit: BoxFit.scaleDown, ), ), ), ), - ], - ), - ),), + ), + ], + ), + ), + ), ], ); } diff --git a/lib/widgets/loading_widgets/contact_section_loading.dart b/lib/widgets/loading_widgets/contact_section_loading.dart index 14d05723..cc3ebe53 100644 --- a/lib/widgets/loading_widgets/contact_section_loading.dart +++ b/lib/widgets/loading_widgets/contact_section_loading.dart @@ -37,7 +37,8 @@ class ContactSectionLoading extends StatelessWidget { }, separatorBuilder: (BuildContext context, int index) { return const SizedBox( - height: DetailsScreenConfig.spacerHeight,); + height: DetailsScreenConfig.spacerHeight, + ); }, itemCount: 3, ), diff --git a/lib/widgets/loading_widgets/scrolable_loader_builder.dart b/lib/widgets/loading_widgets/scrolable_loader_builder.dart index bd4ec8b6..2efcc89d 100644 --- a/lib/widgets/loading_widgets/scrolable_loader_builder.dart +++ b/lib/widgets/loading_widgets/scrolable_loader_builder.dart @@ -24,18 +24,19 @@ class ScrollableLoaderBuilder extends StatelessWidget { final isHorizontal = scrollDirection == Axis.horizontal; final crossAxisSize = crossAxisForcedSize ?? double.infinity; return SizedBox( - width: isHorizontal ? double.infinity : crossAxisSize, - height: !isHorizontal ? double.infinity : crossAxisSize, - child: ListView.builder( - scrollDirection: scrollDirection, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { - /// it's a workaround for ListView.separated, but without itemCount (infinite scrolling) - /// for some reasons ListView.builder can be infinite, and ListView.separated not - if (index.isEven) return itemBuilder(context, index ~/ 2); - return _Gap(itemsSpacing); - }, - ),); + width: isHorizontal ? double.infinity : crossAxisSize, + height: !isHorizontal ? double.infinity : crossAxisSize, + child: ListView.builder( + scrollDirection: scrollDirection, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + /// it's a workaround for ListView.separated, but without itemCount (infinite scrolling) + /// for some reasons ListView.builder can be infinite, and ListView.separated not + if (index.isEven) return itemBuilder(context, index ~/ 2); + return _Gap(itemsSpacing); + }, + ), + ); } } diff --git a/lib/widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart b/lib/widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart index 795af059..ef5c00b4 100644 --- a/lib/widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart +++ b/lib/widgets/loading_widgets/specific_imitations/big_preview_card_loading.dart @@ -10,22 +10,23 @@ class BigPreviewCardLoading extends StatelessWidget { @override Widget build(BuildContext context) { return Shimmer( - linearGradient: shimmerGradient, - child: Column( - children: [ - ShimmerLoadingItem( - child: Container( - width: BigPreviewCardConfig.cardWidth, - height: 135, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(8), - ), + linearGradient: shimmerGradient, + child: Column( + children: [ + ShimmerLoadingItem( + child: Container( + width: BigPreviewCardConfig.cardWidth, + height: 135, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), ), ), - const ShimmerLoadingItem(child: _LoadingText()), - ], - ),); + ), + const ShimmerLoadingItem(child: _LoadingText()), + ], + ), + ); } } diff --git a/lib/widgets/loading_widgets/specific_imitations/button_loading.dart b/lib/widgets/loading_widgets/specific_imitations/button_loading.dart index 7d12bf76..f3a1ad4a 100644 --- a/lib/widgets/loading_widgets/specific_imitations/button_loading.dart +++ b/lib/widgets/loading_widgets/specific_imitations/button_loading.dart @@ -7,20 +7,21 @@ class ButtonLoading extends StatelessWidget { @override Widget build(BuildContext context) { return Shimmer( - linearGradient: shimmerGradient, - child: Column( - children: [ - ShimmerLoadingItem( - child: Container( - width: 110, - height: 36, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(100), - ), + linearGradient: shimmerGradient, + child: Column( + children: [ + ShimmerLoadingItem( + child: Container( + width: 110, + height: 36, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(100), ), ), - ], - ),); + ), + ], + ), + ); } } diff --git a/lib/widgets/loading_widgets/specific_imitations/wide_tile_loading.dart b/lib/widgets/loading_widgets/specific_imitations/wide_tile_loading.dart index fff3b4d5..25e6c313 100644 --- a/lib/widgets/loading_widgets/specific_imitations/wide_tile_loading.dart +++ b/lib/widgets/loading_widgets/specific_imitations/wide_tile_loading.dart @@ -36,21 +36,23 @@ class _TitlesColumnLoading extends StatelessWidget { @override Widget build(BuildContext context) { - return LayoutBuilder(builder: (context, constraints) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - PreviewTextPrototype( - width: constraints.maxWidth * _firstTextLoadingWidthFraction, - ), - const SizedBox(height: WideTileCardConfig.titlesSpacing), - PreviewTextPrototype( - width: constraints.maxWidth * _secondTextLoadingWidthFraction, - ), - const SizedBox(height: WideTileCardConfig.titlesSpacing), - ], - ); - },); + return LayoutBuilder( + builder: (context, constraints) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + PreviewTextPrototype( + width: constraints.maxWidth * _firstTextLoadingWidthFraction, + ), + const SizedBox(height: WideTileCardConfig.titlesSpacing), + PreviewTextPrototype( + width: constraints.maxWidth * _secondTextLoadingWidthFraction, + ), + const SizedBox(height: WideTileCardConfig.titlesSpacing), + ], + ); + }, + ); } } diff --git a/lib/widgets/my_cached_image.dart b/lib/widgets/my_cached_image.dart index 2457566f..523530e4 100644 --- a/lib/widgets/my_cached_image.dart +++ b/lib/widgets/my_cached_image.dart @@ -30,11 +30,12 @@ class MyCachedImage extends StatelessWidget { placeholder: noShimmeringLoading ? null : (context, url) => Center( - child: ShimmeringEffect( - child: Container( - color: Colors.white, + child: ShimmeringEffect( + child: Container( + color: Colors.white, + ), ), - ),), + ), errorWidget: (context, url, error) => FlutterSplashScreen(size: size?.height), height: size?.height, diff --git a/lib/widgets/my_text_button.dart b/lib/widgets/my_text_button.dart index 59c0325d..968e5f5a 100644 --- a/lib/widgets/my_text_button.dart +++ b/lib/widgets/my_text_button.dart @@ -15,13 +15,14 @@ class MyTextButton extends StatelessWidget { @override Widget build(BuildContext context) { return TextButton( - onPressed: onClick, - style: TextButton.styleFrom( - padding: EdgeInsets.zero, - ), - child: Text( - actionTitle, - style: context.textTheme.boldBodyOrange, - ),); + onPressed: onClick, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + ), + child: Text( + actionTitle, + style: context.textTheme.boldBodyOrange, + ), + ); } } diff --git a/lib/widgets/search_widget.dart b/lib/widgets/search_widget.dart index 9e88c4d3..dec134d0 100644 --- a/lib/widgets/search_widget.dart +++ b/lib/widgets/search_widget.dart @@ -11,8 +11,12 @@ class SearchWidget extends ConsumerStatefulWidget { final void Function(String query) onQueryChanged; final VoidCallback? onTap; final String? searchText; - const SearchWidget( - {super.key, required this.onQueryChanged, this.onTap, this.searchText,}); + const SearchWidget({ + super.key, + required this.onQueryChanged, + this.onTap, + this.searchText, + }); @override ConsumerState createState() => _SearchWidgetState(); diff --git a/lib/widgets/subsection_header.dart b/lib/widgets/subsection_header.dart index b1615da4..2dc04f68 100644 --- a/lib/widgets/subsection_header.dart +++ b/lib/widgets/subsection_header.dart @@ -4,8 +4,12 @@ import "../theme/app_theme.dart"; import "my_text_button.dart"; class SubsectionHeader extends StatelessWidget { - const SubsectionHeader( - {super.key, required this.title, this.actionTitle, this.onClick,}); + const SubsectionHeader({ + super.key, + required this.title, + this.actionTitle, + this.onClick, + }); final String title; final String? actionTitle; From 01e87488692ca8d5c5a0737294e181332f9733bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kowali=C5=84ski?= Date: Thu, 25 Jul 2024 23:18:24 +0200 Subject: [PATCH 7/8] ci: add gh workflow --- .github/workflows/lint_and_format.yml | 31 +++++++++++++++++++++++++++ README.md | 17 +++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 .github/workflows/lint_and_format.yml diff --git a/.github/workflows/lint_and_format.yml b/.github/workflows/lint_and_format.yml new file mode 100644 index 00000000..c6e641cd --- /dev/null +++ b/.github/workflows/lint_and_format.yml @@ -0,0 +1,31 @@ +name: Lint & formatting + +on: + push: + branches: ["**"] + pull_request: + branches: ["**"] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: subosito/flutter-action@v2 + with: + flutter-version: "3.22.3" + channel: "stable" + - run: flutter --version + + - name: Install dependencies + run: dart pub get + + - name: generate files + run: dart run build_runner build --delete-conflicting-outputs + + - name: Verify formatting + run: dart format --output=none --set-exit-if-changed . + + - name: Analyze project source + run: flutter analyze --fatal-infos diff --git a/README.md b/README.md index b5511c9f..ecf01ac9 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,23 @@ fvm flutter run 3. Api helper module instructions: https://github.com/Solvro/topwr-mobile/tree/main/lib/api_base 4. We use `flutter_gen` for generating asset paths: https://pub.dev/packages/flutter_gen +# Before you push a commit +- run the linter +```bash +flutter analyze +``` +- if you have any problems listed, try to autofix with +```bash +dart fix --apply +``` +- run `analyze` again, if problems still persist, correct them manually. If you disagree with some of the rules, we can still discuss and adjust them. Hit me up @simon-the-shark or open an issue. +- run formatter +```bash +dart format . +``` +## Github workflow +Don't worry if you've forgotten about the steps, automatic gh action will run the checks for you and notify if somthing's wrong. + ## Working with git From 8db8bd6fb08c519d6fd4d1d67528f1f14d80b6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Kowali=C5=84ski?= Date: Fri, 26 Jul 2024 13:57:49 +0200 Subject: [PATCH 8/8] fix(ci): add example.env --- .github/workflows/lint_and_format.yml | 3 +++ .gitignore | 1 - example.env | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 example.env diff --git a/.github/workflows/lint_and_format.yml b/.github/workflows/lint_and_format.yml index c6e641cd..22e70f6f 100644 --- a/.github/workflows/lint_and_format.yml +++ b/.github/workflows/lint_and_format.yml @@ -21,6 +21,9 @@ jobs: - name: Install dependencies run: dart pub get + - name: Example .env + run: cp example.env .env + - name: generate files run: dart run build_runner build --delete-conflicting-outputs diff --git a/.gitignore b/.gitignore index 0340c9c3..2d983ca1 100644 --- a/.gitignore +++ b/.gitignore @@ -149,7 +149,6 @@ app.*.symbols #Env setup -*.env .env *.env.dev .env.dev diff --git a/example.env b/example.env new file mode 100644 index 00000000..04802474 --- /dev/null +++ b/example.env @@ -0,0 +1,3 @@ +API_URL="https://<...>" +ASSETS_URL="https://<...>" +IPARKING_URL="https://<...>" \ No newline at end of file