Is it possible to use single futureprovider or streem provider with 2 different value at the same time?

47 Views Asked by At

In My application, I have list provider and detail provider for list and detail screen. Based on the detail provider's value, timelistProvider, laborListProvider, auditListProvider, historyListProvider and many provider value will be fetched from the database. Detail provider, timelistProvider, laborListProvider, auditListProvider, historyListProvider values are used to display in detail screen.

Inside detail screen, history list will be displayed. If user tap on any one of the item in historylist, then it will open historyDetail screen, It is same as detail screen. Inside history detail, I need to display timelist, laborlist, auditlist based on the history detail provider.

Is it possible to reuse timelistprovider, laborlistprovider, auditlistprovider and many providers? Because at the same time I have to maintain laborlistprovider for detail screen, laborlistprovider for history detail screen.

My timelistprovider code sample

@riverpod
Stream<List<LabTrans>> timeSpentList(TimeSpentListRef ref) {
  final database = GetIt.I.get<Database>();
  final workOrder = ref.watch(workOrderDetailProvider);
  return database.getLabTrans(
    orgID: workOrder.value?.orgID ?? '',
    siteID: workOrder.value?.siteID ?? '',
    woID: workOrder.valur?.workorderid ?? ",
  );
}

@riverpod
Stream<List<LabTrans>> historyTimeSpentList(TimeSpentListRef ref) {
  final database = GetIt.I.get<Database>();
  final workOrder = ref.watch(history WorkOrderDetailProvider);
  return database.getLabTrans(
    orgID: workOrder.value?.orgID ?? '',
    siteID: workOrder.value?.siteID ?? '',
    woID: workOrder.valur?.workorderid ?? ",
  );
}

Instead rewrittig same provider twice, how to reuse the provider for above scenario?

1

There are 1 best solutions below

0
On

Maybe add a parameter to the riverpod method like this?

@riverpod
Stream<List<LabTrans>> timeSpentList(TimeSpentListRef ref, {bool isHistory = false}) {
  final database = GetIt.I.get<Database>();
  final workOrder = isHistory ?  ref.watch(historyWorkOrderDetailProvider) : ref.watch(workOrderDetailProvider);
  return database.getLabTrans(
    orgID: workOrder.value?.orgID ?? '',
    siteID: workOrder.value?.siteID ?? '',
    woID: workOrder.valur?.workorderid ?? ",
  );
}