66 lines
1.4 KiB
Dart
66 lines
1.4 KiB
Dart
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<ItemsState> {
|
|
ItemsCubit()
|
|
: super(
|
|
const ItemsState(
|
|
<Item>[],
|
|
false,
|
|
),
|
|
);
|
|
|
|
final ServerApi api = ServerApi();
|
|
|
|
Future<void> load() async {
|
|
refresh();
|
|
}
|
|
|
|
Future<void> refresh() async {
|
|
emit(state.copyWith(isLoading: true));
|
|
final resp = await api.getItems();
|
|
final List<Item> items = resp.data;
|
|
if (items.isNotEmpty) {
|
|
emit(
|
|
ItemsState(
|
|
items,
|
|
false,
|
|
),
|
|
);
|
|
} else {
|
|
emit(state.copyWith(isLoading: false));
|
|
}
|
|
}
|
|
|
|
Future<void> create(final Item item) async {
|
|
await api.createItem(item);
|
|
|
|
final List<Item> items = List<Item>.from(state.items);
|
|
items.add(item);
|
|
emit(state.copyWith(items: items));
|
|
}
|
|
|
|
Future<void> delete(final Item item) async {
|
|
final List<Item> items = List<Item>.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(
|
|
<Item>[],
|
|
false,
|
|
),
|
|
);
|
|
}
|
|
}
|