1

我想知道在使用 RESTFUL API 完成 HTTP 请求后何时/何地执行操作。我使用 StateNotifdier 作为 Controller 来执行简单的 CRUD 操作,例如retrieveItems、和.addItemupdateItemdeleteItem

例如,我需要对我的 UI 进行排序、分组、过滤和获取最后 n 个项目,因为我必须显示当天、本周的一些统计信息,并显示当月的项目列表。这种UI仪表板实际上。根据您的意见在哪里编码?我需要为这些操作中的每一个创建一个新的提供者吗?


final itemListControllerProvider = StateNotifierProvider<
    ItemListController, AsyncValue<List<Item>>>((ref) {
  return ItemListController(ref.read);
});

class ItemListController
    extends StateNotifier<AsyncValue<List<Item>>> {
  final Reader _read;

  ItemListController(this._read) : super(AsyncValue.loading());

  Future<void> retrieveItems({required type, bool isRefreshing = false}) async {
     try {
        final items = await _read(itemRepositoryProvider).getData(type: type);    
        state = Async.data(items);
     } catch (e) {
     }
  }

  Future<void> addItem({required type, dynamic data}) async {
     try {
        final item = await _read(itemRepositoryProvider).addData(type: type, data: data);    
        state.whenData((items) => state=Async.data(items..add(item)) );
     } catch (e) {
     }
  }

  Future<void> updateItem({required type, dynamic data}) async {
  }
 
  Future<void> deleteItem({required type, dynamic data}) async {
  }
}

4

1 回答 1

0

我需要为这些操作中的每一个创建一个新的提供者吗?

简短的回答:不!

您可以为每个操作添加方法并获取要对其进行排序的数据,例如:

Class ItemListController
    extends StateNotifier<AsyncValue<List<Item>>> { 
  ...

  Future<void> sortList({ List<Item> list }) {
    final _sortedList = list.reverse();

    state = ItemListState.sorted(_sortedList);
  }

  ​Future<void> groupList({ List<Item> list }) {
    ​final _groupedList = list.filter((item) => true);

    ​state = ItemListState.grouped(_groupedList);
  ​}
}

为这些操作中的每一个创建一个新的提供者只会给你的代码增加不必要的复杂性,保持简单,除非你发现这个改变是必要的。

于 2021-09-09T14:46:12.690 回答