我可以在Riverpod ChangeNotifierProvider家族中传递一个参数和ProviderScope。但我需要传递多个参数/依赖项。例如,我必须通过www.example.com(提供者)传递上下文以访问其他提供者值,并且从UI小部件传递依赖项,也可能更多。context.read(provider) and dependencies from UI widget, may be some more also.
示例如下:
final restaurantProvider = ChangeNotifierProvider.family(
(ref, BuildContext context, Restaurant? restaurant) => RestaurantNotifier(
context: context,
restaurant: restaurant,
),
);
class RestaurantNotifier extends ChangeNotifier {
RestaurantNotifier(
{required BuildContext context, required Restaurant? restaurant}) {
getPlaceMark(restaurant);
checkIsSaved(context, restaurant!.id);
}
getPlaceMark(Restaurant? restaurant) async {
if (restaurant!.latitude != null && restaurant.longitude != null) {
List<Placemark> placemarkData = await LocationHelper.getPlaceMark(
lat: double.tryParse(restaurant.latitude!)!,
long: double.tryParse(restaurant.longitude!)!,
);
placemark = placemarkData[0];
}
}
checkIsSaved(BuildContext context, int? id) {
final savedRestaurantsId = context.read(savedRestaurantsIdProvider.state);
isSaved = savedRestaurantsId.contains(id);
notifyListeners();
}
}
2条答案
按热度按时间wlp8pajw1#
如果您想在创建
Provider
时将多个值传递给它,则可以将family
修饰符与自定义类型一起使用。例如,在此示例中,您可能希望将
String
值替换为Person
值:现在,您可以在创建
Provider
时将Person
值传递到Provider
:这可以无限扩展,如果你现在有多个类要传入,你可以把它们组合成一个逻辑单元。
例如,这可能看起来像:
这展示了如何解决使用
family
必须将多个值传入Provider
的问题。ref .
nfs0ujit2#
这是提供多个参数的另一种方式。使用
List<dynamic>>