Skip to content

Commit 8feeaa8

Browse files
committed
Simulation wizard: finish mode screen and country screen (at least in 90%).
1 parent c4a9e1f commit 8feeaa8

34 files changed

+2676
-281
lines changed

countries.json

Lines changed: 1986 additions & 0 deletions
Large diffs are not rendered by default.

hills.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"name":"Paul-Ausserleitner-Schanze","locality":"Bischoschofen","country":"at","k":125.0,"hs":142.0,"landingEase":-1,"profileType":1,"jumpsVariability":0,"typicalWindDirection":"tailwind","typicalWindStrength":2.11,"pointsForGate":4.86,"pointsForHeadwind":10.8,"pointsForTailwind":16.2},{"name":"Średnia Krokiew","locality":"Zakopane","country":"pl","k":95.0,"hs":105.0,"landingEase":1,"profileType":2,"jumpsVariability":0,"typicalWindStrength":2.77,"pointsForGate":7.0,"pointsForHeadwind":8.0,"pointsForTailwind":12.0},{"name":"Letalnica","locality":"Planica","country":"si","k":202.0,"hs":240.0,"landingEase":-1,"profileType":-1,"jumpsVariability":1,"typicalWindDirection":"leftTailwind","pointsForGate":8.64,"pointsForHeadwind":14.4,"pointsForTailwind":21.6}]

jumpers_female.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"age":35,"name":"Philipp","surname":"Aschenwald","country":"at","sex":1,"skills":{"qualityOnSmallerHills":82.0,"qualityOnLargerHills":72.0,"landingStyle":-1,"jumpsConsistency":-1}},{"age":32,"name":"Daniel","surname":"Huber","country":"at","sex":1,"skills":{"qualityOnSmallerHills":81.24,"qualityOnLargerHills":88.0,"landingStyle":1,"jumpsConsistency":1}},{"age":37,"name":"Kamil","surname":"Stoch","country":"pl","sex":1,"skills":{"qualityOnSmallerHills":82.0,"qualityOnLargerHills":83.0,"landingStyle":3,"jumpsConsistency":2}},{"age":31,"name":"Stefan","surname":"Kraft","country":"at","sex":1,"skills":{"qualityOnSmallerHills":88.0,"qualityOnLargerHills":95.0,"landingStyle":3,"jumpsConsistency":1}},{"age":37,"name":"Dawid","surname":"Kubacki","country":"pl","sex":1,"skills":{"qualityOnSmallerHills":91.25,"qualityOnLargerHills":81.0,"landingStyle":1,"jumpsConsistency":0}}]

jumpers_male.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"age":35,"name":"Philipp","surname":"Aschenwald","country":"at","sex":0,"skills":{"qualityOnSmallerHills":82.0,"qualityOnLargerHills":72.0,"landingStyle":-1,"jumpsConsistency":-1}},{"age":37,"name":"Kamil","surname":"Stoch","country":"pl","sex":0,"skills":{"qualityOnSmallerHills":82.0,"qualityOnLargerHills":83.0,"landingStyle":3,"jumpsConsistency":2}},{"age":31,"name":"Stefan","surname":"Kraft","country":"at","sex":0,"skills":{"qualityOnSmallerHills":88.0,"qualityOnLargerHills":95.0,"landingStyle":3,"jumpsConsistency":1}},{"age":27,"name":"Andrzej","surname":"Stękała","country":"pl","sex":0,"skills":{"qualityOnSmallerHills":68.0,"qualityOnLargerHills":84.0,"landingStyle":2,"jumpsConsistency":-2}},{"age":32,"name":"Daniel","surname":"Huber","country":"at","sex":0,"skills":{"qualityOnSmallerHills":81.24,"qualityOnLargerHills":88.0,"landingStyle":1,"jumpsConsistency":1}},{"age":37,"name":"Konrad","surname":"Kubacki","country":"pl","sex":0,"skills":{"qualityOnSmallerHills":91.25,"qualityOnLargerHills":81.0,"landingStyle":1,"jumpsConsistency":0}}]

lib/bloc/database_editing/copied_local_db_cubit.dart

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ import 'dart:io';
33
import 'package:flutter/widgets.dart';
44
import 'package:flutter_bloc/flutter_bloc.dart';
55
import 'package:sj_manager/json/db_items_json.dart';
6-
import 'package:sj_manager/models/db/db_items_file_system_entity.dart';
6+
import 'package:sj_manager/models/db/db_file_system_entity_names.dart';
77
import 'package:sj_manager/models/db/hill/hill.dart';
88
import 'package:sj_manager/models/db/jumper/jumper.dart';
99
import 'package:sj_manager/models/db/local_db_repo.dart';
1010
import 'package:sj_manager/repositories/database_editing/db_items_json_configuration.dart';
1111
import 'package:sj_manager/utils/file_system.dart';
1212

13+
import 'package:path/path.dart' as path;
14+
1315
class CopiedLocalDbCubit extends Cubit<LocalDbRepo?> {
1416
CopiedLocalDbCubit({
1517
required this.originalDb,
@@ -46,7 +48,7 @@ class CopiedLocalDbCubit extends Cubit<LocalDbRepo?> {
4648
.setItems(state!.editableByGenericType<T>().lastItems);
4749
_saveItemsToJsonByType<T>(
4850
context: context,
49-
file: context.read<DbItemsFileSystemEntity<T>>().entity as File,
51+
file: File(context.read<DbFileSystemEntityNames>().byGenericType<T>()),
5052
);
5153
}
5254

@@ -55,23 +57,23 @@ class CopiedLocalDbCubit extends Cubit<LocalDbRepo?> {
5557
context: context,
5658
file: fileInDirectory(
5759
directory,
58-
context.read<DbItemsFileSystemEntity<MaleJumper>>().basename,
60+
path.basename(context.read<DbFileSystemEntityNames>().maleJumpers),
5961
),
6062
);
6163
if (!context.mounted) return;
6264
await _saveItemsToJsonByType<FemaleJumper>(
6365
context: context,
6466
file: fileInDirectory(
6567
directory,
66-
context.read<DbItemsFileSystemEntity<FemaleJumper>>().basename,
68+
path.basename(context.read<DbFileSystemEntityNames>().femaleJumpers),
6769
),
6870
);
6971
if (!context.mounted) return;
7072
await _saveItemsToJsonByType<Hill>(
7173
context: context,
7274
file: fileInDirectory(
7375
directory,
74-
context.read<DbItemsFileSystemEntity<Hill>>().basename,
76+
path.basename(context.read<DbFileSystemEntityNames>().hills),
7577
),
7678
);
7779
}
@@ -91,7 +93,7 @@ class CopiedLocalDbCubit extends Cubit<LocalDbRepo?> {
9193
context: context,
9294
file: fileInDirectory(
9395
directory,
94-
context.read<DbItemsFileSystemEntity<MaleJumper>>().basename,
96+
path.basename(context.read<DbFileSystemEntityNames>().maleJumpers),
9597
),
9698
);
9799
state!.maleJumpers.setItems(males);
@@ -100,7 +102,7 @@ class CopiedLocalDbCubit extends Cubit<LocalDbRepo?> {
100102
context: context,
101103
file: fileInDirectory(
102104
directory,
103-
context.read<DbItemsFileSystemEntity<FemaleJumper>>().basename,
105+
path.basename(context.read<DbFileSystemEntityNames>().femaleJumpers),
104106
),
105107
);
106108
state!.femaleJumpers.setItems(females);
@@ -109,7 +111,7 @@ class CopiedLocalDbCubit extends Cubit<LocalDbRepo?> {
109111
context: context,
110112
file: fileInDirectory(
111113
directory,
112-
context.read<DbItemsFileSystemEntity<Hill>>().basename,
114+
path.basename(context.read<DbFileSystemEntityNames>().hills),
113115
),
114116
);
115117
state!.hills.setItems(hills);
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import 'package:rxdart/rxdart.dart';
2+
3+
class LinearNavigationPermissionsRepo {
4+
LinearNavigationPermissionsRepo({bool initialForward = true, bool initialBack = true})
5+
: _canGoForward = initialForward,
6+
_canGoBack = initialBack {
7+
_forwardNavSubject.add(_canGoForward);
8+
_backNavSubject.add(_canGoBack);
9+
}
10+
11+
final _forwardNavSubject = BehaviorSubject<bool>();
12+
final _backNavSubject = BehaviorSubject<bool>();
13+
14+
bool _canGoForward;
15+
bool _canGoBack;
16+
17+
bool get canGoForward => _canGoForward;
18+
bool get canGoBack => _canGoBack;
19+
20+
ValueStream<bool> get canGoForwardStream => _forwardNavSubject.stream;
21+
ValueStream<bool> get canGoBackStream => _backNavSubject.stream;
22+
23+
set canGoForward(bool other) {
24+
_canGoForward = other;
25+
_forwardNavSubject.add(_canGoForward);
26+
}
27+
28+
set canGoBack(bool other) {
29+
_canGoBack = other;
30+
_backNavSubject.add(_canGoBack);
31+
}
32+
33+
void entirelyBlock() {
34+
canGoForward = false;
35+
canGoBack = false;
36+
}
37+
38+
void entirelyAllow() {
39+
canGoForward = true;
40+
canGoBack = true;
41+
}
42+
}

lib/bloc/simulation_wizard/simulation_wizard_navigation_cubit.dart

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,19 @@
11
import 'package:flutter_bloc/flutter_bloc.dart';
2+
import 'package:sj_manager/bloc/simulation_wizard/linear_navigation_permissions_repo.dart';
23
import 'package:sj_manager/bloc/simulation_wizard/simulation_wizard_screen.dart';
34
import 'package:sj_manager/bloc/simulation_wizard/simulation_wizard_navigation_state.dart';
45

5-
// Musimy udostępnić w stanie cubita info o tym, czy można przejść do przodu/do tyłu
6-
// Czy screens też? Kto tego potrzebuje? MOże też być potrzebne
7-
// Tak jak current
8-
9-
// Jak więc usunąć opóżnienie?
10-
116
class SimulationWizardNavigationCubit extends Cubit<SimulationWizardNavigationState> {
12-
SimulationWizardNavigationCubit()
7+
SimulationWizardNavigationCubit({required this.navPermissions})
138
: super(const UninitializedSimulationWizardNavigationState());
149

10+
final LinearNavigationPermissionsRepo navPermissions;
11+
1512
void setUp({
1613
required List<SimulationWizardScreen> screens,
1714
}) {
1815
emit(InitializedSimulationWizardNavigationState(
1916
screens: screens,
20-
canGoBack: _canGoBack(currentScreenIndex: 0),
21-
canGoForward: _canGoForward(screens: screens, currentScreenIndex: 0),
2217
currentScreenIndex: 0,
2318
));
2419
}
@@ -33,16 +28,11 @@ class SimulationWizardNavigationCubit extends Cubit<SimulationWizardNavigationSt
3328

3429
void _tryGoForward() {
3530
final prevState = state as InitializedSimulationWizardNavigationState;
36-
if (prevState.canGoForward) {
31+
if (navPermissions.canGoForward) {
3732
final int currentIndex = prevState.currentScreenIndex + 1;
3833
emit(InitializedSimulationWizardNavigationState(
3934
screens: prevState.screens,
4035
currentScreenIndex: currentIndex,
41-
canGoBack: prevState.canGoBack,
42-
canGoForward: _canGoForward(
43-
screens: prevState.screens,
44-
currentScreenIndex: currentIndex,
45-
),
4636
));
4737
} else {
4838
_throwCannotGoForwardError();
@@ -59,32 +49,17 @@ class SimulationWizardNavigationCubit extends Cubit<SimulationWizardNavigationSt
5949

6050
void _tryGoBack() {
6151
final prevState = state as InitializedSimulationWizardNavigationState;
62-
if (prevState.canGoBack) {
52+
if (navPermissions.canGoBack) {
6353
final currentIndex = prevState.currentScreenIndex - 1;
6454
emit(InitializedSimulationWizardNavigationState(
6555
screens: prevState.screens,
6656
currentScreenIndex: currentIndex,
67-
canGoForward: prevState.canGoForward,
68-
canGoBack: _canGoBack(currentScreenIndex: currentIndex),
6957
));
7058
} else {
7159
_throwCannotGoBackError();
7260
}
7361
}
7462

75-
bool _canGoForward({
76-
required List<SimulationWizardScreen> screens,
77-
required int currentScreenIndex,
78-
}) {
79-
return currentScreenIndex + 1 < screens.length;
80-
}
81-
82-
bool _canGoBack({
83-
required int currentScreenIndex,
84-
}) {
85-
return currentScreenIndex > 0;
86-
}
87-
8863
void _throwCannotGoForwardError() {
8964
throw StateError(
9065
'SimulationWizardCubit cannot go forward in the actual state ($state)');

lib/bloc/simulation_wizard/simulation_wizard_navigation_state.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,21 @@ class InitializedSimulationWizardNavigationState extends SimulationWizardNavigat
1717
const InitializedSimulationWizardNavigationState({
1818
required this.screens,
1919
required this.currentScreenIndex,
20-
required this.canGoForward,
21-
required this.canGoBack,
2220
});
2321

2422
final List<SimulationWizardScreen> screens;
2523
final int currentScreenIndex;
26-
final bool canGoForward;
27-
final bool canGoBack;
24+
2825
SimulationWizardScreen get currentScreen => screens[currentScreenIndex];
2926

27+
bool get indexAllowsGoingBack {
28+
return currentScreenIndex > 0;
29+
}
30+
31+
bool get indexAllowsGoingForward {
32+
return currentScreenIndex + 1 < screens.length;
33+
}
34+
3035
@override
3136
List<Object?> get props => [screens, currentScreenIndex];
3237
}

lib/main.dart

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
33
import 'package:flutter_bloc/flutter_bloc.dart';
44
import 'package:provider/provider.dart';
55
import 'package:sj_manager/models/db/country.dart';
6-
import 'package:sj_manager/models/db/db_items_file_system_entity.dart';
6+
import 'package:sj_manager/models/db/db_file_system_entity_names.dart';
77
import 'package:sj_manager/models/db/hill/hill.dart';
88
import 'package:sj_manager/models/db/local_db_repo.dart';
99
import 'package:sj_manager/repositories/database_editing/db_editing_defaults_repo.dart';
@@ -19,7 +19,6 @@ import 'package:sj_manager/repositories/database_editing/editable_db_items_repo.
1919
import 'package:sj_manager/setup/set_up_app.dart';
2020
import 'package:sj_manager/ui/app.dart';
2121
import 'package:sj_manager/ui/providers/locale_notifier.dart';
22-
import 'package:sj_manager/ui/reusable_widgets/countries/country_flag.dart';
2322
import 'package:sj_manager/ui/reusable_widgets/database_item_images/hill_image/hill_image_generating_setup.dart';
2423
import 'package:sj_manager/ui/reusable_widgets/database_item_images/jumper_image/jumper_image_generating_setup.dart';
2524
import 'package:sj_manager/ui/screens/main_screen/main_screen.dart';
@@ -120,24 +119,13 @@ void main() async {
120119
});
121120
}),
122121
Provider(
123-
create: (context) => DbItemsFileSystemEntity<MaleJumper>(
124-
userDataFile(pathsCache, 'database/jumpers_male.json')),
125-
),
126-
Provider(
127-
create: (context) => DbItemsFileSystemEntity<FemaleJumper>(
128-
userDataFile(pathsCache, 'database/jumpers_female.json')),
129-
),
130-
Provider(
131-
create: (context) => DbItemsFileSystemEntity<Hill>(
132-
userDataFile(pathsCache, 'database/hills.json')),
133-
),
134-
Provider(
135-
create: (context) => DbItemsFileSystemEntity<Country>(
136-
userDataFile(pathsCache, 'database/countries.json')),
137-
),
138-
Provider(
139-
create: (context) => DbItemsFileSystemEntity<CountryFlag>(
140-
userDataDirectory(pathsCache, 'database/country_flags')),
122+
create: (context) => const DbFileSystemEntityNames(
123+
maleJumpers: 'jumpers_male.json',
124+
femaleJumpers: 'jumpers_female.json',
125+
hills: 'hills.json',
126+
countries: 'countries.json',
127+
countryFlags: 'country_flags',
128+
),
141129
),
142130
Provider(create: (context) {
143131
return DbItemsJsonConfiguration<MaleJumper>(
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import 'package:sj_manager/models/db/country.dart';
2+
import 'package:sj_manager/models/db/hill/hill.dart';
3+
import 'package:sj_manager/models/db/jumper/jumper.dart';
4+
import 'package:sj_manager/ui/reusable_widgets/countries/country_flag.dart';
5+
6+
class DbFileSystemEntityNames {
7+
const DbFileSystemEntityNames({
8+
required this.maleJumpers,
9+
required this.femaleJumpers,
10+
required this.hills,
11+
required this.countries,
12+
required this.countryFlags,
13+
});
14+
15+
final String maleJumpers;
16+
final String femaleJumpers;
17+
final String hills;
18+
final String countries;
19+
final String countryFlags;
20+
21+
String byGenericType<T>() {
22+
if (T == MaleJumper) return maleJumpers;
23+
if (T == FemaleJumper) return femaleJumpers;
24+
if (T == Hill) return hills;
25+
if (T == Country) return countries;
26+
if (T == CountryFlag) return countryFlags;
27+
throw StateError('Invalid generic type ($T)');
28+
}
29+
}

lib/models/db/db_items_file_system_entity.dart

Lines changed: 0 additions & 11 deletions
This file was deleted.

lib/models/db/local_db_repo.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
// ignore_for_file: public_member_api_docs, sort_constructors_first
2+
import 'dart:io';
3+
24
import 'package:equatable/equatable.dart';
5+
import 'package:flutter/material.dart';
6+
import 'package:flutter_bloc/flutter_bloc.dart';
37
import 'package:sj_manager/enums/db_editable_item_type.dart';
8+
import 'package:sj_manager/json/db_items_json.dart';
49

510
import 'package:sj_manager/models/db/country.dart';
11+
import 'package:sj_manager/models/db/db_file_system_entity_names.dart';
612
import 'package:sj_manager/models/db/hill/hill.dart';
713
import 'package:sj_manager/models/db/jumper/jumper.dart';
814
import 'package:sj_manager/repositories/countries/countries_repo.dart';
15+
import 'package:sj_manager/repositories/database_editing/db_items_json_configuration.dart';
916
import 'package:sj_manager/repositories/database_editing/db_items_repo.dart';
1017
import 'package:sj_manager/repositories/database_editing/editable_db_items_repo.dart';
1118

@@ -45,6 +52,42 @@ class LocalDbRepo with EquatableMixin {
4552
throw ArgumentError('Invalid type');
4653
}
4754

55+
static Future<LocalDbRepo> fromDirectory(Directory dir,
56+
{required BuildContext context}) async {
57+
final dbFsEntityNames = context.read<DbFileSystemEntityNames>();
58+
File getFile(String fileName) => File('${dir.path}/$fileName');
59+
60+
final maleJumpers = EditableDbItemsRepo(
61+
initial: await loadItemsListFromJsonFile(
62+
file: getFile(dbFsEntityNames.maleJumpers),
63+
fromJson: context.read<DbItemsJsonConfiguration<MaleJumper>>().fromJson,
64+
));
65+
if (!context.mounted) throw StateError('The context is unmounted');
66+
final femaleJumpers = EditableDbItemsRepo(
67+
initial: await loadItemsListFromJsonFile(
68+
file: getFile(dbFsEntityNames.femaleJumpers),
69+
fromJson: context.read<DbItemsJsonConfiguration<FemaleJumper>>().fromJson,
70+
));
71+
if (!context.mounted) throw StateError('The context is unmounted');
72+
final hills = EditableDbItemsRepo(
73+
initial: await loadItemsListFromJsonFile(
74+
file: getFile(dbFsEntityNames.hills),
75+
fromJson: context.read<DbItemsJsonConfiguration<Hill>>().fromJson,
76+
));
77+
if (!context.mounted) throw StateError('The context is unmounted');
78+
final countries = CountriesRepo(
79+
initial: await loadItemsListFromJsonFile(
80+
file: getFile(dbFsEntityNames.countries),
81+
fromJson: context.read<DbItemsJsonConfiguration<Country>>().fromJson,
82+
));
83+
return LocalDbRepo(
84+
maleJumpers: maleJumpers,
85+
femaleJumpers: femaleJumpers,
86+
hills: hills,
87+
countries: countries,
88+
);
89+
}
90+
4891
LocalDbRepo copyWith({
4992
EditableDbItemsRepo<MaleJumper>? maleJumpers,
5093
EditableDbItemsRepo<FemaleJumper>? femaleJumpers,

lib/models/simulations/simulation_setup_config.dart

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)