options method
Future<OptionsPage>
options(
- String resourceKey, {
- required String field,
- Object? recordId,
- required Map<
String, dynamic> values, - required String query,
override
POST /{resource}/options — the options for a select whose list /schema
refused to inline.
values carries the form's current state because options depend on
siblings: a pilot measured a dependent picker narrowing 6 -> 2 -> 1 as its
parent changed. Sending an empty map makes every dependent select wrong.
Implementation
@override
Future<OptionsPage> options(
String resourceKey, {
required String field,
Object? recordId,
required Map<String, dynamic> values,
required String query,
}) async {
final response = await _transport.post('$prefix/$resourceKey/options', {
'field': field,
'record_id': recordId,
'state': values,
'q': query,
});
// Like `state()` and unlike the writes: there is no data-carrying failure
// outcome to return, so a non-2xx throws rather than letting an error
// body's absent `options` key parse as "this select has none" — a silently
// empty picker is indistinguishable from a genuine empty result.
if (response.statusCode < 200 || response.statusCode >= 300) {
throw FilamentTransportException(_messageOf(response.body));
}
final raw = response.body['options'];
return OptionsPage(
options: [
if (raw is List)
for (final entry in raw)
if (entry is Map<String, dynamic> && entry['value'] != null)
SelectOption(
value: entry['value'] as Object,
label: '${entry['label'] ?? entry['value']}',
),
],
hasMore: response.body['hasMore'] == true,
);
}