Skip to content

Commit 02f9517

Browse files
authored
Remember what store the user selected last (#595)
Feedback: several people scanned several times for the wrong store because the default one was always the same. Now we put in the storage the ID of the last store selected by the user, so that when s/he comes back on MyECL during an event on behalf of one club, the virtual money goes the right store.
1 parent 10279a1 commit 02f9517

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

lib/paiement/providers/selected_store_provider.dart

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,50 @@
11
import 'package:hooks_riverpod/hooks_riverpod.dart';
22
import 'package:titan/paiement/class/user_store.dart';
33
import 'package:titan/paiement/providers/my_stores_provider.dart';
4+
import 'package:shared_preferences/shared_preferences.dart';
45

56
class SelectedStoreNotifier extends StateNotifier<UserStore> {
67
SelectedStoreNotifier(super.store);
78

89
void updateStore(UserStore store) {
910
state = store;
11+
SharedPreferences.getInstance().then((pref) {
12+
pref.setString('selectedStoreId', store.id);
13+
});
14+
}
15+
}
16+
17+
class LoadSelectedStoreIdProvider extends StateNotifier<String?> {
18+
LoadSelectedStoreIdProvider() : super(null);
19+
20+
void loadSelectedStoreId() {
21+
SharedPreferences.getInstance().then((pref) {
22+
state = pref.getString('selectedStoreId');
23+
});
1024
}
1125
}
1226

27+
final loadSelectedStoreIdProvider =
28+
StateNotifierProvider<LoadSelectedStoreIdProvider, String?>((ref) {
29+
LoadSelectedStoreIdProvider loadSelectedStoreIdProvider =
30+
LoadSelectedStoreIdProvider();
31+
loadSelectedStoreIdProvider.loadSelectedStoreId();
32+
return loadSelectedStoreIdProvider;
33+
});
34+
1335
final selectedStoreProvider =
1436
StateNotifierProvider<SelectedStoreNotifier, UserStore>((ref) {
1537
final myStores = ref.watch(myStoresProvider);
38+
final selectedStoreId = ref.watch(loadSelectedStoreIdProvider);
1639
final store = myStores.maybeWhen<UserStore>(
1740
orElse: () => UserStore.empty(),
1841
data: (value) {
19-
if (value.isEmpty) {
20-
return UserStore.empty();
21-
}
22-
return value.first;
42+
if (value.isEmpty) return UserStore.empty();
43+
if (selectedStoreId == null) return value.first;
44+
return value.firstWhere(
45+
(store) => store.id == selectedStoreId,
46+
orElse: () => value.first,
47+
);
2348
},
2449
);
2550
return SelectedStoreNotifier(store);

0 commit comments

Comments
 (0)