filter grids: added empty content placeholder
This commit is contained in:
parent
02d869c02a
commit
755e75dc6a
3 changed files with 50 additions and 22 deletions
|
@ -13,6 +13,7 @@ import 'package:aves/model/settings.dart';
|
|||
import 'package:aves/utils/android_file_utils.dart';
|
||||
import 'package:aves/widgets/about/about_page.dart';
|
||||
import 'package:aves/widgets/album/collection_page.dart';
|
||||
import 'package:aves/widgets/album/empty.dart';
|
||||
import 'package:aves/widgets/common/aves_logo.dart';
|
||||
import 'package:aves/widgets/common/icons.dart';
|
||||
import 'package:aves/widgets/debug_page.dart';
|
||||
|
@ -259,6 +260,10 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
title: 'Albums',
|
||||
filterEntries: source.getAlbumEntries(),
|
||||
filterBuilder: (s) => AlbumFilter(s, source.getUniqueAlbumName(s)),
|
||||
emptyBuilder: () => const EmptyContent(
|
||||
icon: AIcons.album,
|
||||
text: 'No albums!',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -274,6 +279,10 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
title: 'Countries',
|
||||
filterEntries: source.getCountryEntries(),
|
||||
filterBuilder: (s) => LocationFilter(LocationLevel.country, s),
|
||||
emptyBuilder: () => const EmptyContent(
|
||||
icon: AIcons.location,
|
||||
text: 'No countries!',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -289,6 +298,10 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
title: 'Tags',
|
||||
filterEntries: source.getTagEntries(),
|
||||
filterBuilder: (s) => TagFilter(s),
|
||||
emptyBuilder: () => const EmptyContent(
|
||||
icon: AIcons.tag,
|
||||
text: 'No tags!',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
@ -8,6 +8,7 @@ import 'package:aves/model/metadata_db.dart';
|
|||
import 'package:aves/services/android_app_service.dart';
|
||||
import 'package:aves/services/image_file_service.dart';
|
||||
import 'package:aves/widgets/album/app_bar.dart';
|
||||
import 'package:aves/widgets/album/empty.dart';
|
||||
import 'package:aves/widgets/common/action_delegates/create_album_dialog.dart';
|
||||
import 'package:aves/widgets/common/action_delegates/permission_aware.dart';
|
||||
import 'package:aves/widgets/common/entry_actions.dart';
|
||||
|
@ -84,6 +85,10 @@ class SelectionActionDelegate with PermissionAwareMixin {
|
|||
),
|
||||
filterEntries: source.getAlbumEntries(),
|
||||
filterBuilder: (s) => AlbumFilter(s, source.getUniqueAlbumName(s)),
|
||||
emptyBuilder: () => const EmptyContent(
|
||||
icon: AIcons.album,
|
||||
text: 'No albums!',
|
||||
),
|
||||
onPressed: (filter) => Navigator.pop<String>(context, (filter as AlbumFilter)?.album),
|
||||
);
|
||||
},
|
||||
|
|
|
@ -24,12 +24,14 @@ class FilterNavigationPage extends StatelessWidget {
|
|||
final String title;
|
||||
final Map<String, ImageEntry> filterEntries;
|
||||
final CollectionFilter Function(String key) filterBuilder;
|
||||
final Widget Function() emptyBuilder;
|
||||
|
||||
const FilterNavigationPage({
|
||||
@required this.source,
|
||||
@required this.title,
|
||||
@required this.filterEntries,
|
||||
@required this.filterBuilder,
|
||||
@required this.emptyBuilder,
|
||||
});
|
||||
|
||||
@override
|
||||
|
@ -42,6 +44,7 @@ class FilterNavigationPage extends StatelessWidget {
|
|||
),
|
||||
filterEntries: filterEntries,
|
||||
filterBuilder: filterBuilder,
|
||||
emptyBuilder: emptyBuilder,
|
||||
onPressed: (filter) => Navigator.pushAndRemoveUntil(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
|
@ -63,6 +66,7 @@ class FilterGridPage extends StatelessWidget {
|
|||
final Widget appBar;
|
||||
final Map<String, ImageEntry> filterEntries;
|
||||
final CollectionFilter Function(String key) filterBuilder;
|
||||
final Widget Function() emptyBuilder;
|
||||
final FilterCallback onPressed;
|
||||
|
||||
const FilterGridPage({
|
||||
|
@ -70,6 +74,7 @@ class FilterGridPage extends StatelessWidget {
|
|||
@required this.appBar,
|
||||
@required this.filterEntries,
|
||||
@required this.filterBuilder,
|
||||
@required this.emptyBuilder,
|
||||
@required this.onPressed,
|
||||
});
|
||||
|
||||
|
@ -86,28 +91,33 @@ class FilterGridPage extends StatelessWidget {
|
|||
child: CustomScrollView(
|
||||
slivers: [
|
||||
appBar,
|
||||
SliverPadding(
|
||||
padding: const EdgeInsets.all(AvesFilterChip.outlineWidth),
|
||||
sliver: SliverGrid(
|
||||
delegate: SliverChildBuilderDelegate(
|
||||
(context, i) {
|
||||
final key = filterKeys[i];
|
||||
return DecoratedFilterChip(
|
||||
source: source,
|
||||
filter: filterBuilder(key),
|
||||
entry: filterEntries[key],
|
||||
onPressed: onPressed,
|
||||
);
|
||||
},
|
||||
childCount: filterKeys.length,
|
||||
),
|
||||
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
|
||||
maxCrossAxisExtent: maxCrossAxisExtent,
|
||||
mainAxisSpacing: 8,
|
||||
crossAxisSpacing: 8,
|
||||
),
|
||||
),
|
||||
),
|
||||
filterKeys.isEmpty
|
||||
? SliverFillRemaining(
|
||||
child: emptyBuilder(),
|
||||
hasScrollBody: false,
|
||||
)
|
||||
: SliverPadding(
|
||||
padding: const EdgeInsets.all(AvesFilterChip.outlineWidth),
|
||||
sliver: SliverGrid(
|
||||
delegate: SliverChildBuilderDelegate(
|
||||
(context, i) {
|
||||
final key = filterKeys[i];
|
||||
return DecoratedFilterChip(
|
||||
source: source,
|
||||
filter: filterBuilder(key),
|
||||
entry: filterEntries[key],
|
||||
onPressed: onPressed,
|
||||
);
|
||||
},
|
||||
childCount: filterKeys.length,
|
||||
),
|
||||
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
|
||||
maxCrossAxisExtent: maxCrossAxisExtent,
|
||||
mainAxisSpacing: 8,
|
||||
crossAxisSpacing: 8,
|
||||
),
|
||||
),
|
||||
),
|
||||
SliverToBoxAdapter(
|
||||
child: Selector<MediaQueryData, double>(
|
||||
selector: (context, mq) => mq.viewInsets.bottom,
|
||||
|
|
Loading…
Reference in a new issue