Skip to content

Commit

Permalink
Merge branch 'main' into fix-adjust-sks-menu-animation/icon-in-horizo…
Browse files Browse the repository at this point in the history
…ntal-mode

# Conflicts:
#	lib/features/sks-menu/presentation/sks_menu_screen.dart
  • Loading branch information
jakubbaldyga committed Jan 23, 2025
2 parents 13779b1 + 3abd001 commit 436a88a
Show file tree
Hide file tree
Showing 56 changed files with 1,185 additions and 138 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ WIREDASH_SECRET="<...>" # can be left empty
SKS_URL="https://<...>/api/v1"
DIGITAL_GUIDE_URL="https://<...>/api"
DIGITAL_GUIDE_AUTHORIZATION_TOKEN="<...>"
DIGITAL_GUIDE_ADDONS_URL="<...>"
```
If you need our server url please write us an email [kn.solvro@pwr.edu.pl](mailto:kn.solvro@pwr.edu.pl) or contact us via our [website](https://solvro.pwr.edu.pl/contact/)

Expand Down
3 changes: 2 additions & 1 deletion example.env
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ WIREDASH_ID="<...>"
WIREDASH_SECRET="<...>"
SKS_URL="<...>"
DIGITAL_GUIDE_URL="<...>"
DIGITAL_GUIDE_AUTHORIZATION_TOKEN="<...>"
DIGITAL_GUIDE_AUTHORIZATION_TOKEN="<...>"
DIGITAL_GUIDE_ADDONS_URL="<...>"
2 changes: 2 additions & 0 deletions lib/config/env.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,6 @@ abstract class Env {
@EnviedField()
static final String digitalGuideAuthorizationToken =
_Env.digitalGuideAuthorizationToken;
@EnviedField()
static final String digitalGuideAddonsUrl = _Env.digitalGuideAddonsUrl;
}
9 changes: 9 additions & 0 deletions lib/config/ui_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,12 @@ abstract class FilterConfig {
static const paddingMedium = 8.0;
static const spacingBetweenWidgets = 12.0;
static final radius = BorderRadius.circular(8);
static const buttonPadding =
EdgeInsets.symmetric(vertical: 10, horizontal: 20);
}

class DialogsConfig {
static final padding = const EdgeInsets.all(20).copyWith(top: 6);
}

abstract class LottieAnimationConfig {
Expand Down Expand Up @@ -242,6 +248,8 @@ abstract class DigitalGuideConfig {
EdgeInsets.symmetric(vertical: 24, horizontal: 24);
static const borderRadiusSmall = 4.0;
static const borderRadiusMedium = 8.0;
static const borderRadiusBig = 16.0;
static const borderRadiusHuge = 32.0;
static const heightTiny = 4.0;
static const heightSmall = 8.0;
static const heightMedium = 16.0;
Expand All @@ -252,6 +260,7 @@ abstract class DigitalGuideConfig {
static const mediumButtonPadding =
EdgeInsets.symmetric(vertical: 8, horizontal: 14);
static const paddingMedium = 16.0;
static const paddingBig = 24.0;
static const difficultiesCardIconSize = 35.0;
static const photoRowHeight = 75.0;

Expand Down
5 changes: 3 additions & 2 deletions lib/features/about_us_view/about_us_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import "../../config/ui_config.dart";
import "../../utils/context_extensions.dart";
import "../../widgets/detail_views/detail_view_app_bar.dart";
import "../../widgets/detail_views/sliver_header_section.dart";
import "../../widgets/horizontal_symmetric_safe_area.dart";
import "../../widgets/loading_widgets/scrolable_loader_builder.dart";
import "../../widgets/loading_widgets/simple_previews/preview_card_loading.dart";
import "../../widgets/my_error_widget.dart";
Expand All @@ -23,7 +24,7 @@ class AboutUsView extends StatelessWidget {

@override
Widget build(BuildContext context) {
return Scaffold(
return HorizontalSymmetricSafeAreaScaffold(
appBar: DetailViewAppBar(),
body: const _AboutUsView(),
);
Expand Down Expand Up @@ -92,7 +93,7 @@ class _AboutUsLoading extends StatelessWidget {
Padding(
padding: const EdgeInsets.all(AboutUsConfig.defaultPadding),
child: SizedBox(
height: MediaQuery.of(context).size.height / 4,
height: MediaQuery.sizeOf(context).height / 4,
child: ScrollableLoaderBuilder(
itemsSpacing: 8,
scrollDirection: Axis.vertical,
Expand Down
5 changes: 3 additions & 2 deletions lib/features/app_changelog/app_changelog.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import "package:auto_route/auto_route.dart";
import "package:flutter/material.dart";

import "../../theme/app_theme.dart";
import "repository/changelog_repository.dart";
import "widgets/app_changelog_header.dart";
Expand All @@ -19,8 +20,8 @@ class AppChangelog extends StatelessWidget {
child: Container(
padding: const EdgeInsets.all(25),
constraints: BoxConstraints(
maxHeight: MediaQuery.of(context).size.height * 0.6,
maxWidth: MediaQuery.of(context).size.width * 0.7,
maxHeight: MediaQuery.sizeOf(context).height * 0.6,
maxWidth: MediaQuery.sizeOf(context).width * 0.7,
),
decoration: BoxDecoration(
color: context.colorTheme.whiteSoap,
Expand Down
2 changes: 1 addition & 1 deletion lib/features/app_changelog/widgets/app_changelog_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class _ListItem extends StatelessWidget {
return Row(
children: [
Container(
width: MediaQuery.of(context).size.width * 0.2,
width: MediaQuery.sizeOf(context).width * 0.2,
alignment: Alignment.center,
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 8),
decoration: BoxDecoration(
Expand Down
1 change: 0 additions & 1 deletion lib/features/bottom_scroll_sheet/sheet_layout_scheme.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ class SheetLayoutScheme<T extends GoogleNavigable> extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final appBar = SearchBoxAppBar(
context,
primary: false,
title: context.mapViewTexts<T>().title,
onQueryChanged: ref
.watch(context.mapDataController<T>().notifier)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import "../../utils/determine_contact_icon.dart";
import "../../utils/where_non_null_iterable.dart";
import "../../widgets/detail_views/contact_section.dart";
import "../../widgets/detail_views/detail_view_app_bar.dart";
import "../../widgets/horizontal_symmetric_safe_area.dart";
import "../../widgets/my_error_widget.dart";
import "repository/department_details_repository.dart";
import "utils/address_formatter.dart";
Expand All @@ -27,7 +28,7 @@ class DepartmentDetailView extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final state = ref.watch(departmentDetailsRepositoryProvider(id));
return Scaffold(
return HorizontalSymmetricSafeAreaScaffold(
appBar: DetailViewAppBar(),
body: switch (state) {
AsyncError(:final error) => MyErrorWidget(error),
Expand Down
4 changes: 3 additions & 1 deletion lib/features/departments_view/departments_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import "package:flutter_riverpod/flutter_riverpod.dart";

import "../../config/ui_config.dart";
import "../../utils/context_extensions.dart";
import "../../widgets/horizontal_symmetric_safe_area.dart";
import "../../widgets/my_error_widget.dart";
import "../../widgets/search_box_app_bar.dart";
import "../../widgets/search_not_found.dart";
Expand Down Expand Up @@ -34,8 +35,9 @@ class _DepartmentsView extends ConsumerWidget {

@override
Widget build(BuildContext context, WidgetRef ref) {
return Scaffold(
return HorizontalSymmetricSafeAreaScaffold(
appBar: SearchBoxAppBar(
primary: true,
addLeadingPopButton: true,
context,
title: context.localize.departments,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ part "digital_guide_response.g.dart";
class DigitalGuideResponse with _$DigitalGuideResponse {
const factory DigitalGuideResponse({
required int id,
@JsonKey(name: "external_id") required int externalId,
required DigitalGuideTranslations translations,
@JsonKey(name: "number_of_storeys") required int numberOfStoreys,
@JsonKey(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import "../../../utils/context_extensions.dart";
import "../../../utils/determine_contact_icon.dart";
import "../../../widgets/detail_views/contact_section.dart";
import "../../../widgets/detail_views/detail_view_app_bar.dart";
import "../../../widgets/horizontal_symmetric_safe_area.dart";
import "../../../widgets/my_error_widget.dart";
import "../../../widgets/zoomable_images.dart";
import "../data/models/digital_guide_response.dart";
Expand Down Expand Up @@ -40,12 +41,12 @@ class DigitalGuideView extends ConsumerWidget {
ref.watch(digitalGuideRepositoryProvider(ourId));
return asyncDigitalGuideData.when(
data: (data) => _DigitalGuideView(data.digitalGuideData, data.photoUrl),
error: (error, stackTrace) => Scaffold(
error: (error, stackTrace) => HorizontalSymmetricSafeAreaScaffold(
appBar: DetailViewAppBar(),
body: MyErrorWidget(error),
),
// TODO(Bartosh): shimmer loading
loading: () => Scaffold(
loading: () => HorizontalSymmetricSafeAreaScaffold(
appBar: DetailViewAppBar(),
body: const Center(
child: CircularProgressIndicator(),
Expand Down Expand Up @@ -103,7 +104,7 @@ class _DigitalGuideView extends ConsumerWidget {
const SizedBox(height: DigitalGuideConfig.heightHuge),
];

return Scaffold(
return HorizontalSymmetricSafeAreaScaffold(
appBar: DetailViewAppBar(
actions: [AccessibilityButton()],
),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
import "dart:async";

import "package:flutter/material.dart";

import "../../../../config/ui_config.dart";
import "../../../../theme/app_theme.dart";
import "../../tabs/accessibility_dialog/presentation/accessibility_dialog.dart";

class AccessibilityButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(right: 8),
child: OutlinedButton(
onPressed: () {},
onPressed: () {
unawaited(
showDialog(
context: context,
builder: (_) => const AccessibilityDialog(),
),
);
},
style: OutlinedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import "../../tabs/adapted_toilets/presentation/adapted_toilets_expansion_tile_c
import "../../tabs/amenities/presentation/amenities_expansion_tile_content.dart";
import "../../tabs/evacuation/evacuation_widget.dart";
import "../../tabs/localization/presentation/localization_expansion_tile_content.dart";
import "../../tabs/lodge/presentation/digital_guide_lodge_expansion_tile_content.dart";
import "../../tabs/micronavigation/presentation/micronavigation_expansion_tile_content.dart";
import "../../tabs/rooms/presentation/digital_guide_rooms_expansion_tile_content.dart";
import "../../tabs/surrounding/presentation/surroundings_expansion_tile_content.dart";

Expand Down Expand Up @@ -75,7 +77,11 @@ class DigitalGuideFeaturesSection extends ConsumerWidget {
),
(
title: context.localize.micro_navigation,
content: [LocalizationExpansionTileContent()],
content: [
MicronavigationExpansionTileContent(
digitalGuideData: digitalGuideData,
),
],
),
(
title: context.localize.building_structure,
Expand All @@ -97,6 +103,14 @@ class DigitalGuideFeaturesSection extends ConsumerWidget {
),
],
),
(
title: context.localize.lodge,
content: [
DigitalGuideLodgeExpansionTileContent(
digitalGuideData,
),
],
),
];

return SliverList(
Expand Down
14 changes: 12 additions & 2 deletions lib/features/digital_guide_view/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
* Two variables should be added to .env
* DIGITAL_GUIDE_URL
* DIGITAL_GUIDE_AUTHORIZATION_TOKEN
* DIGITAL_GUIDE_URL (no token required)

# Tips
* All HTTP requests must include the authorization token ("Token ${Env.digitalGuideAuthorizationToken"})
Expand All @@ -13,8 +14,17 @@
* DIGITAL_GUIDE_URL/buildings/{id}
* DIGITAL_GUIDE_URL/images/{id}
2) Surroundings data
* /surrounding/data/repository/surrounding_repository.dart
* tabs/surrounding/data/repository/surrounding_repository.dart
* DIGITAL_GUIDE_URL/surroundings/{id}
3) Rooms data

3) Micronavigation data
* /tabs/micronavigation/data/repository/micronavigation_repository.dart
* DIGITAL_GUIDE_ADDONS_URL/beaconplus/?location={external_id}

4) Rooms data
* /rooms/data/repository/rooms_repository.dart
* DIGITAL_GUIDE_URL/rooms/{id}

5) Lodges data
* /lodges/?building={buildingId}

Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import "dart:async";

import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:riverpod_annotation/riverpod_annotation.dart";

import "../data/accessibility_mode_repository.dart";
import "../data/modes.dart";

part "accessibility_mode_service.g.dart";

// if the mode has children, it will be calculated based on them
// if the mode has a key, it will be calculated based on the repository
@riverpod
class AccessibilityModeService extends _$AccessibilityModeService {
@override
Future<bool> build(AccessibilityMode mode) async {
return switch (mode) {
ModeWithChildren() => _calculateModeWithChildrenState(mode),
ModeWithKey() => ref.watch(
accessibilityModeRepositoryProvider(mode).future,
),
};
}

Future<void> setMode({required bool newValue}) async {
final modeStronglyTyped = mode; // needed for typing system
await switch (modeStronglyTyped) {
ModeWithChildren() =>
_setModeWithChildrenState(modeStronglyTyped, newValue),
ModeWithKey() => _setSingularModeState(modeStronglyTyped, newValue),
};
}

// true if any of its children are true
Future<bool> _calculateModeWithChildrenState(ModeWithChildren mode) async {
final submodesValues = await Future.wait(
mode.children.map(
(child) => ref.watch(accessibilityModeServiceProvider(child).future),
),
);
return submodesValues.anyIs(true);
}

// sets all childrens' of the mode to newValue
Future<void> _setModeWithChildrenState(
ModeWithChildren mode,
bool newValue,
) async {
for (final child in mode.children) {
await ref
.read(accessibilityModeServiceProvider(child).notifier)
.setMode(newValue: newValue);
}
}

// calls directly the repository
Future<void> _setSingularModeState(
ModeWithKey modeStronglyTyped,
bool newValue,
) {
return ref
.read(
accessibilityModeRepositoryProvider(modeStronglyTyped).notifier,
)
.setMode(newValue: newValue);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import "../data/modes.dart";

final topLevelModes = [
const MotorImpairment(),
const VisualImpairment(),
const SensorySensitivity(),
const CognitiveImpairment(),
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import "dart:async";

import "package:riverpod_annotation/riverpod_annotation.dart";

import "../../../../../config/shared_prefs.dart";
import "modes.dart";

part "accessibility_mode_repository.g.dart";

@riverpod
class AccessibilityModeRepository extends _$AccessibilityModeRepository {
@override
Future<bool> build(ModeWithKey mode) async {
final prefs = await ref.watch(sharedPreferencesSingletonProvider.future);
return prefs.getBool(mode.sharedPrefsKey) ?? false;
}

Future<void> setMode({required bool newValue}) async {
state = AsyncValue.data(newValue);
final prefs = await ref.watch(sharedPreferencesSingletonProvider.future);
await prefs.setBool(mode.sharedPrefsKey, newValue);
}
}
Loading

0 comments on commit 436a88a

Please sign in to comment.