empty content placeholder fix

This commit is contained in:
Thibault Deckers 2020-06-11 15:17:32 +09:00
parent a6c7f48799
commit 049840bd73
3 changed files with 30 additions and 11 deletions

View file

@ -7,8 +7,8 @@ class EmptyContent extends StatelessWidget {
final AlignmentGeometry alignment; final AlignmentGeometry alignment;
const EmptyContent({ const EmptyContent({
this.icon = AIcons.image, @required this.icon = AIcons.image,
this.text = 'No images', @required this.text = 'No images',
this.alignment = const FractionalOffset(.5, .35), this.alignment = const FractionalOffset(.5, .35),
}); });

View file

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:aves/model/collection_lens.dart'; import 'package:aves/model/collection_lens.dart';
import 'package:aves/model/collection_source.dart';
import 'package:aves/model/filters/favourite.dart'; import 'package:aves/model/filters/favourite.dart';
import 'package:aves/model/filters/mime.dart'; import 'package:aves/model/filters/mime.dart';
import 'package:aves/model/mime_types.dart'; import 'package:aves/model/mime_types.dart';
@ -206,16 +207,31 @@ class _CollectionScrollViewState extends State<CollectionScrollView> {
} }
Widget _buildEmptyCollectionPlaceholder(CollectionLens collection) { Widget _buildEmptyCollectionPlaceholder(CollectionLens collection) {
return collection.filters.any((filter) => filter is FavouriteFilter) return ValueListenableBuilder<SourceState>(
? const EmptyContent( valueListenable: collection.source.stateNotifier,
builder: (context, sourceState, child) {
if (sourceState == SourceState.loading) {
return const SizedBox.shrink();
}
if (collection.filters.any((filter) => filter is FavouriteFilter)) {
return const EmptyContent(
icon: AIcons.favourite, icon: AIcons.favourite,
text: 'No favourites', text: 'No favourites',
) );
: collection.filters.any((filter) => filter is MimeFilter && filter.mime == MimeTypes.ANY_VIDEO) }
? const EmptyContent( debugPrint('collection.filters=${collection.filters}');
if (collection.filters.any((filter) => filter is MimeFilter && filter.mime == MimeTypes.ANY_VIDEO)) {
return const EmptyContent(
icon: AIcons.video, icon: AIcons.video,
) text: 'No videos',
: const EmptyContent(); );
}
return const EmptyContent(
icon: AIcons.image,
text: 'No images',
);
},
);
} }
void _onScrollChange() { void _onScrollChange() {

View file

@ -49,7 +49,10 @@ class StatsPage extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget child; Widget child;
if (collection.isEmpty) { if (collection.isEmpty) {
child = const EmptyContent(); child = const EmptyContent(
icon: AIcons.image,
text: 'No images',
);
} else { } else {
final byMimeTypes = groupBy(entries, (entry) => entry.mimeType).map<String, int>((k, v) => MapEntry(k, v.length)); final byMimeTypes = groupBy(entries, (entry) => entry.mimeType).map<String, int>((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/')));