Bug fix, refresh page after podcast update.

This commit is contained in:
stonega 2021-01-09 13:27:21 +08:00
parent ffead02039
commit e97752bea5
4 changed files with 220 additions and 227 deletions

View File

@ -31,7 +31,7 @@ import 'audioplayer.dart';
import 'download_list.dart';
import 'home_groups.dart';
import 'home_menu.dart';
import 'import_ompl.dart';
import 'import_opml.dart';
import 'playlist.dart';
import 'search_podcast.dart';
@ -452,9 +452,9 @@ class __PlaylistButtonState extends State<_PlaylistButton> {
),
),
),
PopupMenuDivider(
height: 1,
),
//PopupMenuDivider(
// height: 1,
//),
// PopupMenuItem(
// value: 2,
// child: Container(
@ -723,11 +723,11 @@ class _RecentUpdateState extends State<_RecentUpdate>
Widget build(BuildContext context) {
super.build(context);
final s = context.s;
return Selector<RefreshWorker, bool>(
selector: (_, worker) => worker.complete,
builder: (_, complete, __) => Selector<GroupList, bool>(
selector: (_, worker) => worker.created,
builder: (context, created, child) {
return Selector2<RefreshWorker, GroupList, Tuple2<bool, bool>>(
selector: (_, refreshWorkder, groupWorker) =>
Tuple2(refreshWorkder.created, groupWorker.created),
builder: (_, data, __) {
print('${data.item1}Refresh completed');
return FutureBuilder<List<EpisodeBrief>>(
future: _getRssItem(_top, _group, hideListened: _hideListened),
builder: (context, snapshot) {
@ -741,8 +741,7 @@ class _RecentUpdateState extends State<_RecentUpdate>
Icon(LineIcons.cloud_download_alt_solid,
size: 80, color: Colors.grey[500]),
Padding(
padding:
EdgeInsets.symmetric(vertical: 10)),
padding: EdgeInsets.symmetric(vertical: 10)),
Text(
s.noEpisodeRecent,
style: TextStyle(color: Colors.grey[500]),
@ -821,18 +820,16 @@ class _RecentUpdateState extends State<_RecentUpdate>
Material(
color: Colors.transparent,
child: IconButton(
tooltip:
context.s.refresh,
tooltip: context.s.refresh,
icon: Icon(
LineIcons
.redo_alt_solid,
LineIcons.redo_alt_solid,
size: 16),
onPressed: () {
_updateRssItem();
Fluttertoast.showToast(
msg: s.refreshStarted,
gravity: ToastGravity
.BOTTOM,
gravity:
ToastGravity.BOTTOM,
);
}),
),
@ -840,20 +837,17 @@ class _RecentUpdateState extends State<_RecentUpdate>
Material(
color: Colors.transparent,
child: IconButton(
tooltip:
s.hideListenedSetting,
tooltip: s.hideListenedSetting,
icon: SizedBox(
width: 30,
height: 15,
child: HideListened(
hideListened:
_hideListened ??
false,
_hideListened ?? false,
),
),
onPressed: () {
setState(() =>
_hideListened =
setState(() => _hideListened =
!_hideListened);
},
),
@ -875,14 +869,14 @@ class _RecentUpdateState extends State<_RecentUpdate>
width: 20,
height: 10,
child: CustomPaint(
painter: MultiSelectPainter(
painter:
MultiSelectPainter(
color: context
.accentColor)),
),
onPressed: () {
setState(() {
_selectedEpisodes =
[];
_selectedEpisodes = [];
_multiSelect = true;
});
},
@ -909,7 +903,7 @@ class _RecentUpdateState extends State<_RecentUpdate>
: Center();
},
);
}),
},
);
}

View File

@ -108,9 +108,10 @@ class _ScrollPodcastsState extends State<ScrollPodcasts>
Widget build(BuildContext context) {
final width = MediaQuery.of(context).size.width;
final s = context.s;
return Selector<GroupList, tuple.Tuple2<List<PodcastGroup>, bool>>(
selector: (_, groupList) =>
tuple.Tuple2(groupList.groups, groupList.created),
return Selector2<GroupList, RefreshWorker,
tuple.Tuple3<List<PodcastGroup>, bool, bool>>(
selector: (_, groupList, refreshWorker) => tuple.Tuple3(
groupList.groups, groupList.created, refreshWorker.created),
builder: (_, data, __) {
var groups = data.item1;
var import = data.item2;
@ -513,11 +514,10 @@ class _PodcastPreviewState extends State<PodcastPreview> {
return Column(
children: <Widget>[
Expanded(
child: Selector<RefreshWorker, bool>(
selector: (_, worker) => worker.complete,
builder: (_, complete, __) => Selector<GroupList, bool>(
selector: (_, worker) => worker.created,
builder: (context, created, child) {
child: Selector2<RefreshWorker, GroupList, tuple.Tuple2<bool, bool>>(
selector: (_, refreshWorker, groupWorker) =>
tuple.Tuple2(refreshWorker.created, groupWorker.created),
builder: (_, data, __) {
_getRssItem = _getRssItemTop(widget.podcastLocal);
return FutureBuilder<List<EpisodeBrief>>(
future: _getRssItem,
@ -527,12 +527,10 @@ class _PodcastPreviewState extends State<PodcastPreview> {
episodes: snapshot.data,
podcastLocal: widget.podcastLocal,
)
: Padding(
padding: const EdgeInsets.all(5.0),
);
: Padding(padding: const EdgeInsets.all(5.0));
},
);
}),
},
),
),
Container(

View File

@ -27,6 +27,7 @@ class RefreshWorker extends ChangeNotifier {
bool get complete => _complete;
bool _created = false;
bool get created => _created;
Future<void> _createIsolate() async {
receivePort = ReceivePort();
@ -46,12 +47,12 @@ class RefreshWorker extends ChangeNotifier {
notifyListeners();
} else if (message is String && message == "done") {
_currentRefreshItem = RefreshItem('', RefreshState.none);
_complete = true;
notifyListeners();
_complete = false;
refreshIsolate?.kill();
refreshIsolate = null;
_created = false;
_complete = true;
notifyListeners();
_complete = false;
}
});
}