mirror of
https://github.com/stonega/tsacdop
synced 2025-02-17 20:10:37 +01:00
Add remove selected button, UI improved.
This commit is contained in:
parent
26d49b4da3
commit
bb4f26cd34
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user