首页 > 解决方案 > 提供者的通用类返回?

问题描述

我确定有办法从riverpod FutureProvider 返回一个类dynamic或一个类的实例?generic

我可以从 API 获取不同的跟踪器数据。例如,它可以用于体育活动或体重数据。到目前为止,我尝试了这个但不起作用,甚至没有编译:

final trackerDataProvider = FutureProvider.family<AbstractTrackerData, TrackerType>((ref, trackerType) async {
  final repository = ref.read(trackerRepositoryProvider);
  AbstractTrackerData trackerData =
      await repository.getTrackerData(trackerType);
  return trackerData;
});

在我的小部件中

class PhysicalActivityLandingTrackerScreen extends HookWidget {

 @override
 Widget build(BuildContext context) {
    final trackerData = useProvider(trackerDataProvider(TrackerType.physicalactivity));
    ...
   }
}

和我的跟踪器数据类

class SmokeFree extends AbstractTrackerData {
...
}
class PhysicalActivity extends AbstractTrackerData {
...
}
class Weight extends AbstractTrackerData {
...
}

和枚举

enum TrackerType {
  physicalactivity,
  exercise,
  weeklyweight,
  bloodpressure,
  saltyfoodsubstitution,
  goodfatsubstitution,
  medicationuse,
  smokefree
}

标签: flutterriverpod

解决方案


是的,因为泛型方法在方法声明的返回类型之前有一个类型参数(包含类型的菱形运算符)。... 泛型方法可以在方法签名中使用逗号分隔的不同类型参数。泛型方法的方法体就像普通方法一样。因此我们可以说它是由提供者返回的。


推荐阅读