【发布时间】:2021-07-22 22:22:37
【问题描述】:
我已经使用“.family”修饰符实现了 StateNotifierProvider:
class OrderReviewNotifier extends StateNotifier<OrderReviewState> {
final OrderReviewRepository repository;
OrderReviewNotifier(
this.repository,
int orderId,
) : super(OrderReviewState.initial(orderId));
Future<void> getOrderItems() async {
//.....
}
}
final orderReviewProvider = StateNotifierProvider.autoDispose
.family<OrderReviewNotifier, OrderReviewState, int>(
(ref, orderId) {
return OrderReviewNotifier(
ref.watch(orderReviewRepositoryProvider),
orderId,
);
},
);
然后在 Consumer 我看它:
Consumer(
builder: (context, watch, child) {
final state = watch(orderReviewProvider(order.id));
//.....
},
);
但是当我想阅读它时,我也需要通过order.id:
onTap: () {
context
.read(orderReviewProvider(order.id).notifier)
.getOrderItems();
},
当我想从另一个文件向通知程序发送事件时,我没有order.id。
如何摆脱这种局面?
感谢您的帮助!
【问题讨论】:
-
是否有理由不能将 id 作为参数传递给其他组件?从提供的示例中很难判断。
-
@AlexHartford,没有理由,我可以这样做,但看起来不干净。或者我只是在戏剧化。
-
在组件周围传递 id 绝对没有错!
-
@AlexHartford,但是这个 id 在其他小部件中没用,只在 StateNotifier 中需要。
-
我在这里得到了相同的用例:我可以为其他小部件传递相同的 id,但它看起来并不干净。
标签: flutter dart provider riverpod