Wrapped Offices and Services dropdown with consumer to watch if they are already available

This commit is contained in:
2026-02-28 19:12:58 +08:00
parent 6882fdcac8
commit e75d61ac64
2 changed files with 168 additions and 50 deletions
+35 -27
View File
@@ -175,10 +175,10 @@ class _OfficesScreenState extends ConsumerState<OfficesScreen> {
await showDialog<void>(
context: context,
builder: (dialogContext) {
final servicesAsync = ref.watch(servicesOnceProvider);
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'),
@@ -194,35 +194,43 @@ class _OfficesScreenState extends ConsumerState<OfficesScreen> {
enabled: !saving,
),
const SizedBox(height: 12),
servicesAsync.when(
data: (services) {
return DropdownButtonFormField<String?>(
initialValue: selectedServiceId,
decoration: const InputDecoration(
labelText: 'Service',
),
items: [
const DropdownMenuItem<String?>(
value: null,
child: Text('None'),
),
...services.map(
(s) => DropdownMenuItem<String?>(
value: s.id,
child: Text(s.name),
Consumer(
builder: (ctx, dialogRef, _) {
final servicesAsync = dialogRef.watch(
servicesOnceProvider,
);
return servicesAsync.when(
data: (services) {
return DropdownButtonFormField<String?>(
initialValue: selectedServiceId,
decoration: const InputDecoration(
labelText: 'Service',
),
),
],
onChanged: saving
? null
: (v) => setState(() => selectedServiceId = v),
items: [
const DropdownMenuItem<String?>(
value: null,
child: Text('None'),
),
...services.map(
(s) => DropdownMenuItem<String?>(
value: s.id,
child: Text(s.name),
),
),
],
onChanged: saving
? null
: (v) =>
setState(() => selectedServiceId = v),
);
},
loading: () => const Padding(
padding: EdgeInsets.symmetric(vertical: 8.0),
child: LinearProgressIndicator(),
),
error: (e, _) => Text('Failed to load services: $e'),
);
},
loading: () => const Padding(
padding: EdgeInsets.symmetric(vertical: 8.0),
child: LinearProgressIndicator(),
),
error: (e, _) => Text('Failed to load services: $e'),
),
],
),