Add remove selected button, UI improved.

This commit is contained in:
Stonegate 2020-12-31 23:23:12 +08:00
parent 26d49b4da3
commit bb4f26cd34
1 changed files with 37 additions and 3 deletions

View File

@ -18,24 +18,49 @@ class PlaylistDetail extends StatefulWidget {
class _PlaylistDetailState extends State<PlaylistDetail> { class _PlaylistDetailState extends State<PlaylistDetail> {
final List<EpisodeBrief> _selectedEpisodes = []; final List<EpisodeBrief> _selectedEpisodes = [];
bool _resetSelected;
@override
void setState(fn) {
_resetSelected = false;
super.setState(fn);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final s = context.s; final s = context.s;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
leading: IconButton(
splashRadius: 20,
icon: Icon(Icons.close),
tooltip: context.s.back,
onPressed: () {
Navigator.maybePop(context);
},
),
title: Text(_selectedEpisodes.isEmpty title: Text(_selectedEpisodes.isEmpty
? widget.playlist.name ? widget.playlist.name
: '${_selectedEpisodes.length} selected'), : '${_selectedEpisodes.length} selected'),
actions: [ actions: [
IconButton( IconButton(
icon: Icon(Icons.delete), splashRadius: 20,
icon: Icon(Icons.delete_outline_rounded),
onPressed: () { onPressed: () {
context.read<AudioPlayerNotifier>().removeEpisodeFromPlaylist( context.read<AudioPlayerNotifier>().removeEpisodeFromPlaylist(
widget.playlist, widget.playlist,
episodes: _selectedEpisodes); episodes: _selectedEpisodes);
setState(_selectedEpisodes.clear); setState(_selectedEpisodes.clear);
}), }),
if (_selectedEpisodes.isNotEmpty)
IconButton(
splashRadius: 20,
icon: Icon(Icons.select_all_outlined),
onPressed: () {
setState(() {
_selectedEpisodes.clear();
_resetSelected = !_resetSelected;
});
}),
SizedBox( SizedBox(
height: 40, height: 40,
width: 40, width: 40,
@ -89,7 +114,7 @@ class _PlaylistDetailState extends State<PlaylistDetail> {
}, onRemove: (episode) { }, onRemove: (episode) {
_selectedEpisodes.remove(episode); _selectedEpisodes.remove(episode);
setState(() {}); setState(() {});
}); }, reset: _resetSelected);
}).toList()); }).toList());
}), }),
); );
@ -98,10 +123,11 @@ class _PlaylistDetailState extends State<PlaylistDetail> {
class _PlaylistItem extends StatefulWidget { class _PlaylistItem extends StatefulWidget {
final EpisodeBrief episode; final EpisodeBrief episode;
final bool reset;
final ValueChanged<EpisodeBrief> onSelect; final ValueChanged<EpisodeBrief> onSelect;
final ValueChanged<EpisodeBrief> onRemove; final ValueChanged<EpisodeBrief> onRemove;
_PlaylistItem(this.episode, _PlaylistItem(this.episode,
{@required this.onSelect, @required this.onRemove, Key key}) {@required this.onSelect, @required this.onRemove, this.reset, Key key})
: super(key: key); : super(key: key);
@override @override
@ -135,6 +161,14 @@ class __PlaylistItemState extends State<_PlaylistItem>
}); });
} }
@override
void didUpdateWidget(covariant _PlaylistItem oldWidget) {
if (oldWidget.reset != widget.reset && _animation.value == 1.0) {
_controller.reverse();
}
super.didUpdateWidget(oldWidget);
}
@override @override
void dispose() { void dispose() {
_controller.dispose(); _controller.dispose();