diff --git a/lib/screens/admin/offices_screen.dart b/lib/screens/admin/offices_screen.dart index 301bc33b..83ff7ff3 100644 --- a/lib/screens/admin/offices_screen.dart +++ b/lib/screens/admin/offices_screen.dart @@ -178,7 +178,6 @@ class _OfficesScreenState extends ConsumerState { bool saving = false; return StatefulBuilder( builder: (context, setState) { - final servicesAsync = ref.watch(servicesOnceProvider); return AlertDialog( shape: AppSurfaces.of(context).dialogShape, title: Text(office == null ? 'Create Office' : 'Edit Office'), diff --git a/lib/screens/tasks/task_detail_screen.dart b/lib/screens/tasks/task_detail_screen.dart index b4345ddb..87189706 100644 --- a/lib/screens/tasks/task_detail_screen.dart +++ b/lib/screens/tasks/task_detail_screen.dart @@ -394,19 +394,34 @@ class _TaskDetailScreenState extends ConsumerState final assignmentList = assignments; final profilesList = profilesAsync.valueOrNull ?? []; + + // Read the services stream; if the office is linked to a service + // but the stream hasn't yielded yet, fetch once and await it final servicesAsync = ref.read(servicesProvider); - final servicesById = { + final servicesById = { for (final s in servicesAsync.valueOrNull ?? []) s.id: s, }; - final serviceName = officeId == null + + final officeServiceId = officeId == null + ? null + : officeById[officeId]?.serviceId; + + if (officeServiceId != null && + (servicesAsync.valueOrNull == null || + (servicesAsync.valueOrNull?.isEmpty ?? true))) { + final servicesOnce = await ref.read( + servicesOnceProvider.future, + ); + for (final s in servicesOnce) { + servicesById[s.id] = s; + } + } + + final serviceName = officeServiceId == null ? '' - : (officeById[officeId]?.serviceId == null - ? '' - : (servicesById[officeById[officeId]! - .serviceId] - ?.name ?? - '')); + : (servicesById[officeServiceId]?.name ?? ''); + await showTaskPdfPreview( context, task, @@ -2973,8 +2988,9 @@ class _TaskDetailScreenState extends ConsumerState showErrorSnackBar(context, e.toString()); } } finally { - if (context.mounted) + if (context.mounted) { setState(() => isSaving = false); + } } }, child: isSaving