From 7d44e2cd919517e9b8416b1e333b58d95bb2c6e9 Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Wed, 3 May 2023 18:04:45 +0530 Subject: [PATCH] Update Collection providers --- lib/providers/collection_providers.dart | 26 ++++++++++++++----- lib/screens/home_page/collection_pane.dart | 22 +--------------- .../home_page/editor_pane/url_card.dart | 4 +-- 3 files changed, 23 insertions(+), 29 deletions(-) diff --git a/lib/providers/collection_providers.dart b/lib/providers/collection_providers.dart index 09c72fed..5d624199 100644 --- a/lib/providers/collection_providers.dart +++ b/lib/providers/collection_providers.dart @@ -28,6 +28,8 @@ final StateNotifierProvider?> class CollectionStateNotifier extends StateNotifier?> { CollectionStateNotifier(this.ref, this.hiveHandler) : super(null) { loadData(); + Future.microtask(() => + ref.read(activeIdStateProvider.notifier).update((s) => state?[0].id)); } final Ref ref; @@ -42,12 +44,14 @@ class CollectionStateNotifier extends StateNotifier?> { return state![idx]; } - String add() { + void add() { final newRequestModel = RequestModel( id: uuid.v1(), ); state = [newRequestModel, ...state!]; - return newRequestModel.id; + ref + .read(activeIdStateProvider.notifier) + .update((state) => newRequestModel.id); } void reorder(int oldIdx, int newIdx) { @@ -56,11 +60,21 @@ class CollectionStateNotifier extends StateNotifier?> { } void remove(String id) { - hiveHandler.delete(id); + int idx = idxOfId(id); + String? newId; + if (idx == 0 && state!.length > 1) { + newId = state![1].id; + } else if (state!.length > 2) { + newId = state![idx - 1].id; + } else { + newId = null; + } + state = [ for (final model in state!) if (model.id != id) model, ]; + ref.read(activeIdStateProvider.notifier).update((state) => newId); } void duplicate(String id) { @@ -146,16 +160,15 @@ class CollectionStateNotifier extends StateNotifier?> { state = []; } - Future loadData() async { + void loadData() { var ids = hiveHandler.getIds(); - if (ids == null) { + if (ids == null || ids.length == 0) { state = [ RequestModel( id: uuid.v1(), ), ]; } else { - await hiveHandler.removeUnused(); List data = []; for (var id in ids) { var jsonModel = hiveHandler.getRequestModel(id); @@ -175,5 +188,6 @@ class CollectionStateNotifier extends StateNotifier?> { for (var e in state!) { await hiveHandler.setRequestModel(e.id, e.toJson()); } + await hiveHandler.removeUnused(); } } diff --git a/lib/screens/home_page/collection_pane.dart b/lib/screens/home_page/collection_pane.dart index 0a2260c9..075e852c 100644 --- a/lib/screens/home_page/collection_pane.dart +++ b/lib/screens/home_page/collection_pane.dart @@ -38,21 +38,6 @@ class _CollectionPaneState extends ConsumerState { Wrap( alignment: WrapAlignment.spaceBetween, children: [ - TextButton.icon( - onPressed: () { - ref - .read(activeIdStateProvider.notifier) - .update((state) => null); - }, - icon: const Icon( - Icons.home, - size: 20, - ), - label: const Text( - 'Home', - style: kTextStyleButton, - ), - ), TextButton.icon( onPressed: savingData ? null @@ -82,11 +67,7 @@ class _CollectionPaneState extends ConsumerState { //const Spacer(), ElevatedButton( onPressed: () { - String newId = - ref.read(collectionStateNotifierProvider.notifier).add(); - ref - .read(activeIdStateProvider.notifier) - .update((state) => newId); + ref.read(collectionStateNotifierProvider.notifier).add(); }, child: const Text( kLabelPlusNew, @@ -205,7 +186,6 @@ class _RequestItemState extends ConsumerState { }, onMenuSelected: (RequestItemMenuOption item) { if (item == RequestItemMenuOption.delete) { - ref.read(activeIdStateProvider.notifier).update((state) => null); ref.read(collectionStateNotifierProvider.notifier).remove(widget.id); } if (item == RequestItemMenuOption.duplicate) { diff --git a/lib/screens/home_page/editor_pane/url_card.dart b/lib/screens/home_page/editor_pane/url_card.dart index 7cb9209c..2647695a 100644 --- a/lib/screens/home_page/editor_pane/url_card.dart +++ b/lib/screens/home_page/editor_pane/url_card.dart @@ -71,15 +71,15 @@ class _DropdownButtonHTTPMethodState @override Widget build(BuildContext context) { - final activeId = ref.watch(activeIdStateProvider); final method = ref.watch(activeRequestModelProvider.select((value) => value?.method)); return DropdownButtonHttpMethod( method: method, onChanged: (HTTPVerb? value) { + final activeId = ref.read(activeRequestModelProvider)!.id; ref .read(collectionStateNotifierProvider.notifier) - .update(activeId!, method: value); + .update(activeId, method: value); }, ); }