#50 settings: scrollable hidden filter list

This commit is contained in:
Thibault Deckers 2021-07-03 22:53:08 +09:00
parent 3709e0cb07
commit 3a2e0349e2

View file

@ -40,52 +40,71 @@ class HiddenFilterPage extends StatelessWidget {
title: Text(context.l10n.settingsHiddenFiltersTitle),
),
body: SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: Row(
child: Selector<Settings, Set<CollectionFilter>>(
selector: (context, s) => settings.hiddenFilters,
builder: (context, hiddenFilters, child) {
if (hiddenFilters.isEmpty) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Icon(AIcons.info),
const SizedBox(width: 16),
Expanded(child: Text(context.l10n.settingsHiddenFiltersBanner)),
],
),
),
const Divider(),
Expanded(
child: Padding(
padding: const EdgeInsets.all(8),
child: Selector<Settings, Set<CollectionFilter>>(
selector: (context, s) => settings.hiddenFilters,
builder: (context, hiddenFilters, child) {
if (hiddenFilters.isEmpty) {
return EmptyContent(
const _Header(),
const Divider(),
Expanded(
child: Padding(
padding: const EdgeInsets.all(8),
child: EmptyContent(
icon: AIcons.hide,
text: context.l10n.settingsHiddenFiltersEmpty,
);
}
final filterList = hiddenFilters.toList()..sort();
return Wrap(
spacing: 8,
runSpacing: 8,
children: filterList
.map((filter) => AvesFilterChip(
filter: filter,
removable: true,
onTap: (filter) => context.read<CollectionSource>().changeFilterVisibility(filter, true),
onLongPress: null,
))
.toList(),
);
},
),
),
),
],
);
}
final filterList = hiddenFilters.toList()..sort();
return ListView(
children: [
const _Header(),
const Divider(),
Padding(
padding: const EdgeInsets.all(8),
child: Wrap(
spacing: 8,
runSpacing: 8,
children: filterList
.map((filter) => AvesFilterChip(
filter: filter,
removable: true,
onTap: (filter) => context.read<CollectionSource>().changeFilterVisibility(filter, true),
onLongPress: null,
))
.toList(),
),
),
),
),
],
],
);
},
),
),
);
}
}
class _Header extends StatelessWidget {
const _Header({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: Row(
children: [
const Icon(AIcons.info),
const SizedBox(width: 16),
Expanded(child: Text(context.l10n.settingsHiddenFiltersBanner)),
],
),
);
}
}