Riverpod Flutter:寻找将 FutureProvider 与 StateNotifierProvider 结合的最佳方式
Riverpod Flutter: Looking for best way to combine FutureProvider with StateNotifierProvider
我正在开发一个基本的支持票系统。我从 Firebase 获得门票(作为流或未来)。
我想允许一些过滤选项(例如按状态和类别排序)。
为此,我考虑使用 Future Provider 来获取列表,并使用 StateNotiferProvider 根据正在使用的过滤器更新列表。
这是我到目前为止的代码:
final ticketListStreamProvider =
RP.FutureProvider((_) => FirestoreService.getTicketList());
class TicketListNotifier extends RP.StateNotifier<List<Ticket>> {
TicketListNotifier() : super([]);
void addTicket(Ticket ticket) {
state = List.from(state)..add(ticket);
}
void removeTicket(Ticket ticket) {
state = List.from(state)..remove(ticket);
}
}
final ticketsController =
RP.StateNotifierProvider<TicketListNotifier, List<Ticket>>(
(ref) => TicketListNotifier(),
);
我对此有多个问题。首先它不起作用。
StateNotifier 接受 List 而不是 Future。我需要以某种方式转换它或重写 StateNotifier 以接受 Future。
我试图接近官方示例之一。
(https://github.com/rrousselGit/riverpod/tree/master/examples/todos)
不幸的是,他们不使用来自外部来源(如 firebase)的数据来执行此操作。
使用哪种提供商组合解决此问题的最佳方法是什么?
谢谢
- 您可以在
TicketListNotifier
中获取您的票单,并使用您的票单设置其状态。
class TicketListNotifier extends RP.StateNotifier<List<Ticket>> {
TicketListNotifier() : super([]);
Future<void> fetchTicketList() async {
FirestoreService.getTicketList().when(
//success
// state = fetched_data_from_firestore
// error
// error handle
)
}
}
final ticketsController =
RP.StateNotifierProvider<TicketListNotifier, List<Ticket>>(
(ref) => TicketListNotifier(),
);
- 在你想要获取它的地方调用这个方法/*也许在你的小部件的 initState 方法中
ref.read(ticketsController.notifier).fetchTicketList();
现在ref.read(ticketsController);
将return您的票单
- 由于您在 TicketListNotifier 的状态下拥有票证列表,因此您可以像这样使用 add/remove 方法:
ref.read(ticketsController.notifier).addTicket(someTicket);
我正在开发一个基本的支持票系统。我从 Firebase 获得门票(作为流或未来)。 我想允许一些过滤选项(例如按状态和类别排序)。 为此,我考虑使用 Future Provider 来获取列表,并使用 StateNotiferProvider 根据正在使用的过滤器更新列表。 这是我到目前为止的代码:
final ticketListStreamProvider =
RP.FutureProvider((_) => FirestoreService.getTicketList());
class TicketListNotifier extends RP.StateNotifier<List<Ticket>> {
TicketListNotifier() : super([]);
void addTicket(Ticket ticket) {
state = List.from(state)..add(ticket);
}
void removeTicket(Ticket ticket) {
state = List.from(state)..remove(ticket);
}
}
final ticketsController =
RP.StateNotifierProvider<TicketListNotifier, List<Ticket>>(
(ref) => TicketListNotifier(),
);
我对此有多个问题。首先它不起作用。
StateNotifier 接受 List 而不是 Future。我需要以某种方式转换它或重写 StateNotifier 以接受 Future。
我试图接近官方示例之一。
(https://github.com/rrousselGit/riverpod/tree/master/examples/todos)
不幸的是,他们不使用来自外部来源(如 firebase)的数据来执行此操作。
使用哪种提供商组合解决此问题的最佳方法是什么?
谢谢
- 您可以在
TicketListNotifier
中获取您的票单,并使用您的票单设置其状态。
class TicketListNotifier extends RP.StateNotifier<List<Ticket>> {
TicketListNotifier() : super([]);
Future<void> fetchTicketList() async {
FirestoreService.getTicketList().when(
//success
// state = fetched_data_from_firestore
// error
// error handle
)
}
}
final ticketsController =
RP.StateNotifierProvider<TicketListNotifier, List<Ticket>>(
(ref) => TicketListNotifier(),
);
- 在你想要获取它的地方调用这个方法/*也许在你的小部件的 initState 方法中
ref.read(ticketsController.notifier).fetchTicketList();
现在ref.read(ticketsController);
将return您的票单
- 由于您在 TicketListNotifier 的状态下拥有票证列表,因此您可以像这样使用 add/remove 方法:
ref.read(ticketsController.notifier).addTicket(someTicket);