From 83f5241ebc8b2e1fa92dec42ae9a33fc707cfa42 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Tue, 27 Dec 2022 09:19:59 +0400 Subject: [PATCH] feat: Add cubits --- lib/logic/courierscubit.dart | 57 +++++++++++++++++++++++++++++++ lib/logic/couriersstate.dart | 20 +++++++++++ lib/logic/itemscubit.dart | 65 ++++++++++++++++++++++++++++++++++++ lib/logic/itemsstate.dart | 20 +++++++++++ lib/logic/orderscubit.dart | 58 ++++++++++++++++++++++++++++++++ lib/logic/ordersstate.dart | 20 +++++++++++ 6 files changed, 240 insertions(+) create mode 100644 lib/logic/courierscubit.dart create mode 100644 lib/logic/couriersstate.dart create mode 100644 lib/logic/itemscubit.dart create mode 100644 lib/logic/itemsstate.dart create mode 100644 lib/logic/orderscubit.dart create mode 100644 lib/logic/ordersstate.dart diff --git a/lib/logic/courierscubit.dart b/lib/logic/courierscubit.dart new file mode 100644 index 0000000..457d61b --- /dev/null +++ b/lib/logic/courierscubit.dart @@ -0,0 +1,57 @@ +import 'package:cubit_form/cubit_form.dart'; +import 'package:equatable/equatable.dart'; +import 'package:selfprivacy/models/courier.dart'; +import 'package:selfprivacy/logic/server_api.dart'; +export 'package:provider/provider.dart'; + +part 'couriersstate.dart'; + +class CouriersCubit extends Cubit { + CouriersCubit() + : super( + const CouriersState( + [], + false, + ), + ); + + final ServerApi api = ServerApi(); + + Future load() async { + refresh(); + } + + Future refresh() async { + emit(state.copyWith(isLoading: true)); + final resp = await api.getCouriers(); + final List items = resp.data; + if (items.isNotEmpty) { + emit( + CouriersState( + items, + false, + ), + ); + } else { + emit(state.copyWith(isLoading: false)); + } + } + + Future create(final Courier item) async { + await api.addCourier(item); + + final List items = List.from(state.couriers); + items.add(item); + emit(state.copyWith(couriers: items)); + } + + @override + void clear() async { + emit( + const CouriersState( + [], + false, + ), + ); + } +} diff --git a/lib/logic/couriersstate.dart b/lib/logic/couriersstate.dart new file mode 100644 index 0000000..0585164 --- /dev/null +++ b/lib/logic/couriersstate.dart @@ -0,0 +1,20 @@ +part of 'courierscubit.dart'; + +class CouriersState extends Equatable { + const CouriersState(this.couriers, this.isLoading); + + final List couriers; + final bool isLoading; + + @override + List get props => [couriers, isLoading]; + + CouriersState copyWith({ + final List? couriers, + final bool? isLoading, + }) => + CouriersState( + couriers ?? this.couriers, + isLoading ?? this.isLoading, + ); +} diff --git a/lib/logic/itemscubit.dart b/lib/logic/itemscubit.dart new file mode 100644 index 0000000..d9a63b5 --- /dev/null +++ b/lib/logic/itemscubit.dart @@ -0,0 +1,65 @@ +import 'package:cubit_form/cubit_form.dart'; +import 'package:equatable/equatable.dart'; +import 'package:selfprivacy/models/item.dart'; +import 'package:selfprivacy/logic/server_api.dart'; + +export 'package:provider/provider.dart'; + +part 'itemsstate.dart'; + +class ItemsCubit extends Cubit { + ItemsCubit() + : super( + const ItemsState( + [], + false, + ), + ); + + final ServerApi api = ServerApi(); + + Future load() async { + refresh(); + } + + Future refresh() async { + emit(state.copyWith(isLoading: true)); + final resp = await api.getItems(); + final List items = resp.data; + if (items.isNotEmpty) { + emit( + ItemsState( + items, + false, + ), + ); + } else { + emit(state.copyWith(isLoading: false)); + } + } + + Future create(final Item item) async { + await api.createItem(item); + + final List items = List.from(state.items); + items.add(item); + emit(state.copyWith(items: items)); + } + + Future delete(final Item item) async { + final List items = List.from(state.items); + await api.deleteItem(item); + items.removeWhere((final Item u) => u.id == item.id); + emit(state.copyWith(items: items)); + } + + @override + void clear() async { + emit( + const ItemsState( + [], + false, + ), + ); + } +} diff --git a/lib/logic/itemsstate.dart b/lib/logic/itemsstate.dart new file mode 100644 index 0000000..b5b5665 --- /dev/null +++ b/lib/logic/itemsstate.dart @@ -0,0 +1,20 @@ +part of 'itemscubit.dart'; + +class ItemsState extends Equatable { + const ItemsState(this.items, this.isLoading); + + final List items; + final bool isLoading; + + @override + List get props => [items, isLoading]; + + ItemsState copyWith({ + final List? items, + final bool? isLoading, + }) => + ItemsState( + items ?? this.items, + isLoading ?? this.isLoading, + ); +} diff --git a/lib/logic/orderscubit.dart b/lib/logic/orderscubit.dart new file mode 100644 index 0000000..a9ed87b --- /dev/null +++ b/lib/logic/orderscubit.dart @@ -0,0 +1,58 @@ +import 'package:cubit_form/cubit_form.dart'; +import 'package:equatable/equatable.dart'; +import 'package:selfprivacy/logic/server_api.dart'; +import 'package:selfprivacy/models/order.dart'; + +export 'package:provider/provider.dart'; + +part 'ordersstate.dart'; + +class ItemsCubit extends Cubit { + ItemsCubit() + : super( + const OrdersState( + [], + false, + ), + ); + + final ServerApi api = ServerApi(); + + Future load() async { + refresh(); + } + + Future refresh() async { + emit(state.copyWith(isLoading: true)); + final resp = await api.getOrders(); + final List items = resp.data; + if (items.isNotEmpty) { + emit( + OrdersState( + items, + false, + ), + ); + } else { + emit(state.copyWith(isLoading: false)); + } + } + + Future create(final Order order) async { + await api.createOrder(order); + + final List items = List.from(state.orders); + items.add(order); + emit(state.copyWith(orders: items)); + } + + @override + void clear() async { + emit( + const OrdersState( + [], + false, + ), + ); + } +} diff --git a/lib/logic/ordersstate.dart b/lib/logic/ordersstate.dart new file mode 100644 index 0000000..d768ac6 --- /dev/null +++ b/lib/logic/ordersstate.dart @@ -0,0 +1,20 @@ +part of 'orderscubit.dart'; + +class OrdersState extends Equatable { + const OrdersState(this.orders, this.isLoading); + + final List orders; + final bool isLoading; + + @override + List get props => [orders, isLoading]; + + OrdersState copyWith({ + final List? orders, + final bool? isLoading, + }) => + OrdersState( + orders ?? this.orders, + isLoading ?? this.isLoading, + ); +}