diff --git a/lib/backend/authentication/frederic_auth_event.dart b/lib/backend/authentication/frederic_auth_event.dart index c01a4a21..71b0fcd6 100644 --- a/lib/backend/authentication/frederic_auth_event.dart +++ b/lib/backend/authentication/frederic_auth_event.dart @@ -74,6 +74,7 @@ class FredericSignOutEvent extends FredericAuthEvent { @override Future process(FredericUserManager userManager) async { + FredericBackend.instance.deleteEverythingFromDisk(); FredericBackend.instance.dispose(); await userManager.authInterface.logOut(); return FredericUser.noAuth(); diff --git a/lib/backend/database/firebase/firestore_caching_data_interface.dart b/lib/backend/database/firebase/firestore_caching_data_interface.dart index d71cefde..d4222b8d 100644 --- a/lib/backend/database/firebase/firestore_caching_data_interface.dart +++ b/lib/backend/database/firebase/firestore_caching_data_interface.dart @@ -78,9 +78,6 @@ class FirestoreCachingDataInterface @override Future> reload() async { - if (name == "Goals") { - print("G"); - } if (_box == null) { _box = await Hive.openBox(name); } else { @@ -109,4 +106,9 @@ class FirestoreCachingDataInterface _box!.putAll(entries); return data; } + + @override + Future deleteFromDisk() { + return Hive.deleteBoxFromDisk(name); + } } diff --git a/lib/backend/database/frederic_data_interface.dart b/lib/backend/database/frederic_data_interface.dart index a50417ad..c43bc22a 100644 --- a/lib/backend/database/frederic_data_interface.dart +++ b/lib/backend/database/frederic_data_interface.dart @@ -10,8 +10,14 @@ abstract class FredericDataInterface { /// Reloads data from remote DB /// Future> reload(); + Future update(T object); + Future delete(T object); + Future create(T object); + Future createFromMap(Map data); + + Future deleteFromDisk(); } diff --git a/lib/backend/frederic_backend.dart b/lib/backend/frederic_backend.dart index 8f948f1f..118cc563 100644 --- a/lib/backend/frederic_backend.dart +++ b/lib/backend/frederic_backend.dart @@ -274,6 +274,13 @@ class FredericBackend implements FredericMessageProcessor { void dispose() { _purchaseManager.dispose(); } + + Future deleteEverythingFromDisk() async { + await activityManager.dataInterface.deleteFromDisk(); + await workoutManager.dataInterface.deleteFromDisk(); + await setManager.dataInterface.deleteFromDisk(); + await goalManager.dataInterface.deleteFromDisk(); + } } class FredericDefaults { diff --git a/lib/backend/goals/frederic_goal_manager.dart b/lib/backend/goals/frederic_goal_manager.dart index 90b041a5..b3b28763 100644 --- a/lib/backend/goals/frederic_goal_manager.dart +++ b/lib/backend/goals/frederic_goal_manager.dart @@ -16,10 +16,10 @@ class FredericGoalManager on(_onEvent); } - late final FredericDataInterface _dataInterface; + late final FredericDataInterface dataInterface; void setDataInterface(FredericDataInterface interface) => - _dataInterface = interface; + dataInterface = interface; HashMap _goals = HashMap(); @@ -30,9 +30,8 @@ class FredericGoalManager Future reload([bool fullReloadFromDB = true]) async { List changed = []; _goals.clear(); - List list = await (fullReloadFromDB - ? _dataInterface.reload() - : _dataInterface.get()); + List list = + await (fullReloadFromDB ? dataInterface.reload() : dataInterface.get()); for (FredericGoal goal in list) { _goals[goal.id] = goal; changed.add(goal.id); @@ -52,16 +51,16 @@ class FredericGoalManager if (_goals.containsKey(event.updatedGoal.id)) { _goals[event.updatedGoal.id] = event.updatedGoal; } - await _dataInterface.update(event.updatedGoal); + await dataInterface.update(event.updatedGoal); emit(FredericGoalListData(event.changed, _goals)); } else if (event is FredericGoalCreateEvent) { - final newGoalFromDatabase = await _dataInterface.create(event.newGoal); + final newGoalFromDatabase = await dataInterface.create(event.newGoal); _goals[event.newGoal.id] = newGoalFromDatabase; emit(FredericGoalListData(event.changed, _goals)); FredericBackend.instance.analytics.logGoalCreated(); } else if (event is FredericGoalDeleteEvent) { _goals.remove(event.goal.id); - await _dataInterface.delete(event.goal); + await dataInterface.delete(event.goal); emit(FredericGoalListData(event.changed, _goals)); FredericBackend.instance.analytics.logGoalDeleted(); } else { diff --git a/lib/backend/sets/frederic_set_manager.dart b/lib/backend/sets/frederic_set_manager.dart index 6e25950b..d236f4f7 100644 --- a/lib/backend/sets/frederic_set_manager.dart +++ b/lib/backend/sets/frederic_set_manager.dart @@ -40,11 +40,6 @@ class FredericSetManager extends Bloc { bool _canFullReload = true; - FredericSetList operator [](String value) { - if (!_sets.containsKey(value)) _sets[value] = FredericSetList.create(value); - return _sets[value]!; - } - void setDataInterface(FredericDataInterface interface) => dataInterface = interface; diff --git a/lib/screens/activity_list_screen.dart b/lib/screens/activity_list_screen.dart index c830813c..f02ff55c 100644 --- a/lib/screens/activity_list_screen.dart +++ b/lib/screens/activity_list_screen.dart @@ -36,38 +36,13 @@ class ActivityListScreen extends StatelessWidget { child: FredericScaffold( floatingActionButton: FloatingActionButton( key: ValueKey('fab_activitylistscreen'), - heroTag: 'fab_activitylistscreen', - onPressed: () { - // if (CupertinoScaffold.of(context) == null) { - if (false) { - showModalBottomSheet( - enableDrag: true, - isScrollControlled: true, - isDismissible: true, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), - context: context, - builder: (newContext) { - return ClipRRect( - borderRadius: BorderRadius.circular(10), - child: Container( - height: MediaQuery.of(context).size.height * 0.93, - child: EditActivityScreen(FredericActivity.create( - FredericBackend.instance.userManager.state.id)), - ), - ); - }); - } else { - showFredericBottomSheet( - enableDrag: true, - context: context, - builder: (newContext) { - return EditActivityScreen(FredericActivity.create( - FredericBackend.instance.userManager.state.id)); - }); - } - }, + onPressed: () => showFredericBottomSheet( + enableDrag: true, + context: context, + builder: (newContext) { + return EditActivityScreen(FredericActivity.create( + FredericBackend.instance.userManager.state.id)); + }), child: Icon( Icons.post_add_outlined, color: Colors.white, diff --git a/lib/screens/edit_workout_screen.dart b/lib/screens/edit_workout_screen.dart index 8a953a63..ed103b01 100644 --- a/lib/screens/edit_workout_screen.dart +++ b/lib/screens/edit_workout_screen.dart @@ -52,7 +52,9 @@ class _EditWorkoutScreenState extends State { return FredericScaffold( floatingActionButton: workout.canEdit ? FloatingActionButton( - key: UniqueKey(), + // This seems to have fixed itself without a key and hero tag + // key: UniqueKey(), + // heroTag: UniqueKey(), // because the FAB disappears after resulting sheet is closed, // the unique key combined with the setState after the sheet is closed makes it reappear backgroundColor: theme.mainColor, diff --git a/lib/widgets/settings_screen/account_deleter.dart b/lib/widgets/settings_screen/account_deleter.dart index bf6c744e..3a113985 100644 --- a/lib/widgets/settings_screen/account_deleter.dart +++ b/lib/widgets/settings_screen/account_deleter.dart @@ -130,7 +130,8 @@ class _AccountDeleterState extends State { await FredericBackend.instance.userManager.authInterface .deleteAccount(user); SharedPreferences prefs = await SharedPreferences.getInstance(); - prefs.clear(); + await prefs.clear(); + await FredericBackend.instance.deleteEverythingFromDisk(); FredericBase.forceFullRestart(context); }, mainColor: confirmed ? theme.negativeColor : theme.greyColor, diff --git a/test/mock_database/test_activity_data_interface.dart b/test/mock_database/test_activity_data_interface.dart index 5163ac91..68c1742a 100644 --- a/test/mock_database/test_activity_data_interface.dart +++ b/test/mock_database/test_activity_data_interface.dart @@ -8,6 +8,7 @@ class TestActivityDataInterface HashMap database = HashMap(); int index = 0; + void initData() { addActivity('Werner', FredericActivityType.Weighted, [FredericActivityMuscleGroup.Arms]); @@ -68,4 +69,10 @@ class TestActivityDataInterface // TODO: implement reload throw UnimplementedError(); } + + @override + Future deleteFromDisk() { + // TODO: implement deleteFromDisk + throw UnimplementedError(); + } }