aves/lib/widgets/settings/navigation/drawer_tab_albums.dart
2024-12-03 00:25:12 +01:00

75 lines
2.6 KiB
Dart

import 'package:aves/model/filters/covered/stored_album.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/buttons/outlined_button.dart';
import 'package:aves/widgets/dialogs/pick_dialogs/album_pick_page.dart';
import 'package:aves/widgets/navigation/drawer/tile.dart';
import 'package:aves/widgets/settings/navigation/drawer_editor_banner.dart';
import 'package:flutter/material.dart';
class DrawerAlbumTab extends StatefulWidget {
final List<AlbumBaseFilter> items;
const DrawerAlbumTab({
super.key,
required this.items,
});
@override
State<DrawerAlbumTab> createState() => _DrawerAlbumTabState();
}
class _DrawerAlbumTabState extends State<DrawerAlbumTab> {
List<AlbumBaseFilter> get items => widget.items;
@override
Widget build(BuildContext context) {
return Column(
children: [
if (!settings.useTvLayout) ...[
const DrawerEditorBanner(),
const Divider(height: 0),
],
Flexible(
child: ReorderableListView.builder(
itemBuilder: (context, index) {
final filter = items[index];
void onPressed() => setState(() => items.remove(filter));
return ListTile(
key: ValueKey(filter.key),
leading: DrawerFilterIcon(filter: filter),
title: DrawerFilterTitle(filter: filter),
trailing: IconButton(
icon: const Icon(AIcons.clear),
onPressed: onPressed,
tooltip: context.l10n.actionRemove,
),
onTap: settings.useTvLayout ? onPressed : null,
);
},
itemCount: items.length,
onReorder: (oldIndex, newIndex) {
setState(() {
if (oldIndex < newIndex) newIndex -= 1;
items.insert(newIndex, items.removeAt(oldIndex));
});
},
shrinkWrap: true,
),
),
const Divider(height: 0),
const SizedBox(height: 8),
AvesOutlinedButton(
icon: const Icon(AIcons.add),
label: context.l10n.settingsNavigationDrawerAddAlbum,
onPressed: () async {
final albumFilter = await pickAlbum(context: context, moveType: null, storedAlbumsOnly: false);
if (albumFilter == null || items.contains(albumFilter)) return;
setState(() => items.add(albumFilter));
},
),
],
);
}
}