feat(models): Add filters support and auto-validation for model-specific filters
This commit is contained in:
@@ -306,7 +306,18 @@ class AppCustomizationPage extends ConsumerWidget {
|
||||
data: (value) => value,
|
||||
orElse: () => const <Tool>[],
|
||||
);
|
||||
final allowed = <String>{'web', 'image', ...tools.map((t) => t.id)};
|
||||
|
||||
// Get filters from the selected model
|
||||
final selectedModel = ref.watch(selectedModelProvider);
|
||||
final filters = selectedModel?.filters ?? const [];
|
||||
|
||||
// Include filter IDs in allowed set (prefixed with 'filter:' to avoid collisions)
|
||||
final allowed = <String>{
|
||||
'web',
|
||||
'image',
|
||||
...tools.map((t) => t.id),
|
||||
...filters.map((f) => 'filter:${f.id}'),
|
||||
};
|
||||
|
||||
final selected = selectedRaw
|
||||
.where((id) => allowed.contains(id))
|
||||
@@ -344,6 +355,20 @@ class AppCustomizationPage extends ConsumerWidget {
|
||||
}).toList();
|
||||
}
|
||||
|
||||
List<Widget> buildFilterChips() {
|
||||
return filters.map((filter) {
|
||||
final filterId = 'filter:${filter.id}';
|
||||
final isSelected = selected.contains(filterId);
|
||||
final canSelect = selectedCount < maxPills || isSelected;
|
||||
return ConduitChip(
|
||||
label: filter.name,
|
||||
icon: Platform.isIOS ? CupertinoIcons.sparkles : Icons.auto_awesome,
|
||||
isSelected: isSelected,
|
||||
onTap: canSelect ? () => toggle(filterId) : null,
|
||||
);
|
||||
}).toList();
|
||||
}
|
||||
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final selectedCountText = l10n.quickActionsSelectedCount(selectedCount);
|
||||
|
||||
@@ -378,6 +403,7 @@ class AppCustomizationPage extends ConsumerWidget {
|
||||
: null,
|
||||
),
|
||||
...buildToolChips(),
|
||||
...buildFilterChips(),
|
||||
if (selected.isNotEmpty)
|
||||
ConduitChip(
|
||||
label: l10n.clear,
|
||||
|
||||
Reference in New Issue
Block a user