flutter FutureProvider未缓存响应

ffscu2ro  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(121)

我使用futureProvider从服务器获取一些响应,但当我在futureProvider中放入参数时,它拒绝缓存数据。当我删除这些参数时,它就可以完美地缓存。

final getCoursesByCategoriesProvider =
    FutureProvider.family<List<Course>, ArgsModel>((ref, vendocode) async {
  return ref.watch(courseControllerProvider).getCoursesByCategories(
      category: vendocode.firstParams, context: vendocode.secondParams);
});

我也想把这些数据保存起来。这可能吗

ctrmrzij

ctrmrzij1#

提供程序不缓存数据的原因可能是因为传递给提供程序的每个ArgsModel都是不同的示例,即使其中的参数具有相同的值。要解决这个问题,需要在ArgsModel类中覆盖operator ==hashCode。按照这里的例子。
或者,您可以使用Riverpod的最新语法,该语法使用code generation。这允许您为提供程序定义多个参数,并且不再需要ArgsModel
下面是一个示例代码(注意,我假设类型为firstParamssecondParams):

@riverpod
Future<List<Course>> coursesByCategories(
  CoursesByCategoriesRef ref, {
  required String firstParams,
  required String secondParams,
}) async {
  return ref.watch(courseControllerProvider).getCoursesByCategories(
    category: firstParams,
    context: secondParams,
  );
}

相关问题