diff --git a/kitchenowl/lib/cubits/household_add_update/household_update_cubit.dart b/kitchenowl/lib/cubits/household_add_update/household_update_cubit.dart index 567188380..a56e2eaef 100644 --- a/kitchenowl/lib/cubits/household_add_update/household_update_cubit.dart +++ b/kitchenowl/lib/cubits/household_add_update/household_update_cubit.dart @@ -48,8 +48,9 @@ class HouseholdUpdateCubit } Future refresh() async { - Future fHousehold = - ApiService.getInstance().getHousehold(this.household); + Future fHousehold = ApiService.getInstance() + .getHousehold(this.household) + .then((res) => res.household); Future?> shoppingLists = ApiService.getInstance().getShoppingLists(this.household); diff --git a/kitchenowl/lib/cubits/household_member_cubit.dart b/kitchenowl/lib/cubits/household_member_cubit.dart index 4f6ad0da7..aa8f61e95 100644 --- a/kitchenowl/lib/cubits/household_member_cubit.dart +++ b/kitchenowl/lib/cubits/household_member_cubit.dart @@ -3,6 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:kitchenowl/models/household.dart'; import 'package:kitchenowl/models/member.dart'; import 'package:kitchenowl/services/api/api_service.dart'; +import 'package:kitchenowl/services/transaction_handler.dart'; +import 'package:kitchenowl/services/transactions/household.dart'; class HouseholdMemberCubit extends Cubit { final Household household; @@ -16,7 +18,9 @@ class HouseholdMemberCubit extends Cubit { Future refresh() async { Future fHousehold = - ApiService.getInstance().getHousehold(this.household); + TransactionHandler.getInstance().runTransaction( + TransactionHouseholdGet(household: this.household), + ); Household household = await fHousehold ?? this.household; diff --git a/kitchenowl/lib/services/api/household.dart b/kitchenowl/lib/services/api/household.dart index b11d0ed88..596220235 100644 --- a/kitchenowl/lib/services/api/household.dart +++ b/kitchenowl/lib/services/api/household.dart @@ -16,11 +16,16 @@ extension HouseholdApi on ApiService { return body.map((e) => Household.fromJson(e)).toList(); } - Future getHousehold(Household household) async { + Future<({Household? household, int statusCode})> getHousehold( + Household household) async { final res = await get("$baseRoute/${household.id}"); - if (res.statusCode != 200) return null; + if (res.statusCode != 200) + return (household: null, statusCode: res.statusCode); - return Household.fromJson(jsonDecode(res.body)); + return ( + household: Household.fromJson(jsonDecode(res.body)), + statusCode: 200, + ); } Future updateHousehold(Household household) async { diff --git a/kitchenowl/lib/services/transactions/household.dart b/kitchenowl/lib/services/transactions/household.dart index 5ddd5318b..e0058feba 100644 --- a/kitchenowl/lib/services/transactions/household.dart +++ b/kitchenowl/lib/services/transactions/household.dart @@ -44,19 +44,25 @@ class TransactionHouseholdGet extends Transaction { @override Future runOnline() async { - final household = - await ApiService.getInstance().getHousehold(this.household); - if (household != null) { + final res = await ApiService.getInstance().getHousehold(this.household); + if (res.household != null) { final households = await MemStorage.getInstance().readHouseholds() ?? []; final i = households.indexWhere((e) => e.id == household.id); if (i >= 0) { - households[i] = household; + households[i] = res.household!; } else { - households.add(household); + households.add(res.household!); } MemStorage.getInstance().writeHouseholds(households); + } else if (res.statusCode == 403) { + final households = await MemStorage.getInstance().readHouseholds() ?? []; + final i = households.indexWhere((e) => e.id == household.id); + if (i >= 0) { + households.removeAt(i); + MemStorage.getInstance().writeHouseholds(households); + } } - return household; + return res.household; } }