feat(models): Add filters support and auto-validation for model-specific filters

This commit is contained in:
cogwheel0
2025-12-05 22:19:31 +05:30
parent f676f50c85
commit c630ce8c27
18 changed files with 469 additions and 4 deletions

View File

@@ -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,