minor fixes

This commit is contained in:
Thibault Deckers 2020-04-01 09:21:37 +09:00
parent 5844e4b32a
commit 99271e0428
2 changed files with 54 additions and 42 deletions

View file

@ -103,7 +103,12 @@ class ImageSearchDelegate extends SearchDelegate<CollectionFilter> {
@override @override
Widget buildResults(BuildContext context) { Widget buildResults(BuildContext context) {
final cleanQuery = query.trim(); final cleanQuery = query.trim();
WidgetsBinding.instance.addPostFrameCallback((_) {
// `buildResults` is called in the build phase,
// so we post the call that will filter the collection
// and possibly trigger a rebuild here
close(context, cleanQuery.isNotEmpty ? QueryFilter(cleanQuery) : null); close(context, cleanQuery.isNotEmpty ? QueryFilter(cleanQuery) : null);
});
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
} }

View file

@ -8,6 +8,7 @@ import 'package:aves/model/image_entry.dart';
import 'package:aves/utils/color_utils.dart'; import 'package:aves/utils/color_utils.dart';
import 'package:aves/utils/constants.dart'; import 'package:aves/utils/constants.dart';
import 'package:aves/widgets/album/collection_page.dart'; import 'package:aves/widgets/album/collection_page.dart';
import 'package:aves/widgets/album/empty.dart';
import 'package:aves/widgets/common/aves_filter_chip.dart'; import 'package:aves/widgets/common/aves_filter_chip.dart';
import 'package:aves/widgets/common/data_providers/media_query_data_provider.dart'; import 'package:aves/widgets/common/data_providers/media_query_data_provider.dart';
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
@ -46,19 +47,17 @@ class StatsPage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget child;
if (collection.isEmpty) {
child = EmptyContent();
} else {
final catalogued = entries.where((entry) => entry.isCatalogued); final catalogued = entries.where((entry) => entry.isCatalogued);
final withGps = catalogued.where((entry) => entry.hasGps); final withGps = catalogued.where((entry) => entry.hasGps);
final withGpsPercent = withGps.length / collection.entryCount; final withGpsPercent = withGps.length / collection.entryCount;
final Map<String, int> byMimeTypes = groupBy(entries, (entry) => entry.mimeType).map((k, v) => MapEntry(k, v.length)); final Map<String, int> byMimeTypes = groupBy(entries, (entry) => entry.mimeType).map((k, v) => MapEntry(k, v.length));
final imagesByMimeTypes = Map.fromEntries(byMimeTypes.entries.where((kv) => kv.key.startsWith('image/'))); final imagesByMimeTypes = Map.fromEntries(byMimeTypes.entries.where((kv) => kv.key.startsWith('image/')));
final videoByMimeTypes = Map.fromEntries(byMimeTypes.entries.where((kv) => kv.key.startsWith('video/'))); final videoByMimeTypes = Map.fromEntries(byMimeTypes.entries.where((kv) => kv.key.startsWith('video/')));
return MediaQueryDataProvider( child = ListView(
child: Scaffold(
appBar: AppBar(
title: const Text('Stats'),
),
body: SafeArea(
child: ListView(
children: [ children: [
Wrap( Wrap(
alignment: WrapAlignment.center, alignment: WrapAlignment.center,
@ -91,7 +90,15 @@ class StatsPage extends StatelessWidget {
..._buildTopFilters(context, 'Top countries', entryCountPerCountry, (s) => LocationFilter(LocationLevel.country, s)), ..._buildTopFilters(context, 'Top countries', entryCountPerCountry, (s) => LocationFilter(LocationLevel.country, s)),
..._buildTopFilters(context, 'Top tags', entryCountPerTag, (s) => TagFilter(s)), ..._buildTopFilters(context, 'Top tags', entryCountPerTag, (s) => TagFilter(s)),
], ],
);
}
return MediaQueryDataProvider(
child: Scaffold(
appBar: AppBar(
title: const Text('Stats'),
), ),
body: SafeArea(
child: child,
), ),
), ),
); );
@ -122,7 +129,7 @@ class StatsPage extends StatelessWidget {
return LayoutBuilder(builder: (context, constraints) { return LayoutBuilder(builder: (context, constraints) {
final mq = MediaQuery.of(context); final mq = MediaQuery.of(context);
final availableWidth = constraints.maxWidth; final availableWidth = constraints.maxWidth;
final double dim = max(mimeDonutMinWidth, availableWidth / (mq.orientation == Orientation.landscape && availableWidth > 4 * mimeDonutMinWidth ? 4 : 2)); final double dim = max(mimeDonutMinWidth, availableWidth / (availableWidth > 4 * mimeDonutMinWidth ? 4 : 2));
final donut = Container( final donut = Container(
width: dim, width: dim,