map: sort entries by date when opening from filter grid

This commit is contained in:
Thibault Deckers 2021-09-15 10:34:51 +09:00
parent 9a59bec05a
commit d10fa5dc5e

View file

@ -110,6 +110,12 @@ abstract class ChipSetActionDelegate<T extends CollectionFilter> with FeedbackMi
} }
} }
Iterable<AvesEntry> _selectedEntries(BuildContext context, Set<dynamic> filters) {
final source = context.read<CollectionSource>();
final visibleEntries = source.visibleEntries;
return filters.isEmpty ? visibleEntries : visibleEntries.where((entry) => filters.any((f) => f.test(entry)));
}
Future<void> _showSortDialog(BuildContext context) async { Future<void> _showSortDialog(BuildContext context) async {
final factor = await showDialog<ChipSortFactor>( final factor = await showDialog<ChipSortFactor>(
context: context, context: context,
@ -131,30 +137,26 @@ abstract class ChipSetActionDelegate<T extends CollectionFilter> with FeedbackMi
} }
void _goToMap(BuildContext context, Set<T> filters) { void _goToMap(BuildContext context, Set<T> filters) {
final source = context.read<CollectionSource>();
final entries = filters.isEmpty ? source.visibleEntries : source.visibleEntries.where((entry) => filters.any((f) => f.test(entry)));
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
settings: const RouteSettings(name: MapPage.routeName), settings: const RouteSettings(name: MapPage.routeName),
builder: (context) => MapPage( builder: (context) => MapPage(
entries: entries.where((entry) => entry.hasGps).toList(), entries: _selectedEntries(context, filters).where((entry) => entry.hasGps).toList()..sort(AvesEntry.compareByDate),
), ),
), ),
); );
} }
void _goToStats(BuildContext context, Set<T> filters) { void _goToStats(BuildContext context, Set<T> filters) {
final source = context.read<CollectionSource>();
final entries = filters.isEmpty ? source.visibleEntries : source.visibleEntries.where((entry) => filters.any((f) => f.test(entry)));
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
settings: const RouteSettings(name: StatsPage.routeName), settings: const RouteSettings(name: StatsPage.routeName),
builder: (context) { builder: (context) {
return StatsPage( return StatsPage(
entries: entries.toSet(), entries: _selectedEntries(context, filters).toSet(),
source: source, source: context.read<CollectionSource>(),
); );
}, },
), ),