mirror of
https://github.com/stonega/tsacdop
synced 2025-02-17 20:10:37 +01:00
modified: lib/episodes/episodedetail.dart
modified: lib/episodes/episodedownload.dart modified: lib/podcasts/podcastdetail.dart Added bottom menu ripple
This commit is contained in:
parent
a123d1dfa7
commit
0d1d8a9222
@ -5,6 +5,7 @@ import 'package:provider/provider.dart';
|
|||||||
import 'package:flutter_html/flutter_html.dart';
|
import 'package:flutter_html/flutter_html.dart';
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
import 'package:tsacdop/class/audiostate.dart';
|
import 'package:tsacdop/class/audiostate.dart';
|
||||||
import 'package:tsacdop/class/episodebrief.dart';
|
import 'package:tsacdop/class/episodebrief.dart';
|
||||||
import 'package:tsacdop/class/sqflite_localpodcast.dart';
|
import 'package:tsacdop/class/sqflite_localpodcast.dart';
|
||||||
@ -204,6 +205,17 @@ class _MenuBarState extends State<MenuBar> {
|
|||||||
_like = widget.episodeItem.liked;
|
_like = widget.episodeItem.liked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buttonOnMenu(Widget widget, Function() onTap) => Material(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: onTap,
|
||||||
|
child: Container(
|
||||||
|
height: 50.0,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 15.0),
|
||||||
|
child: widget),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final urlChange = Provider.of<Urlchange>(context);
|
final urlChange = Provider.of<Urlchange>(context);
|
||||||
@ -241,44 +253,50 @@ class _MenuBarState extends State<MenuBar> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
(_like == 0 && !_liked)
|
(_like == 0 && !_liked)
|
||||||
? InkWell(
|
? _buttonOnMenu(
|
||||||
onTap: () => saveLiked(widget.episodeItem.title),
|
Icon(
|
||||||
child: Container(
|
Icons.favorite_border,
|
||||||
padding: EdgeInsets.symmetric(horizontal: 10.0),
|
|
||||||
child: Icon(
|
|
||||||
Icons.favorite_border,
|
|
||||||
color: Colors.grey[700],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
: InkWell(
|
|
||||||
onTap: () => setUnliked(widget.episodeItem.title),
|
|
||||||
child: Container(
|
|
||||||
padding: EdgeInsets.symmetric(horizontal: 10.0),
|
|
||||||
child: Icon(
|
|
||||||
Icons.favorite,
|
|
||||||
color: Colors.red,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
DownloadButton(episodeBrief: widget.episodeItem),
|
|
||||||
IconButton(
|
|
||||||
icon: Icon(Icons.playlist_add, color: Colors.grey[700]),
|
|
||||||
onPressed: () {/*TODO*/},
|
|
||||||
),
|
|
||||||
Spacer(),
|
|
||||||
(widget.episodeItem.title != urlchange.title)
|
|
||||||
? IconButton(
|
|
||||||
icon: Icon(
|
|
||||||
Icons.play_arrow,
|
|
||||||
color: Colors.grey[700],
|
color: Colors.grey[700],
|
||||||
),
|
),
|
||||||
onPressed: () {
|
() => saveLiked(widget.episodeItem.title))
|
||||||
urlChange.audioUrl = widget.episodeItem.enclosureUrl;
|
: _buttonOnMenu(
|
||||||
urlChange.rssTitle = widget.episodeItem.title;
|
Icon(
|
||||||
urlChange.feedTitle = widget.episodeItem.feedTitle;
|
Icons.favorite,
|
||||||
urlChange.imageUrl = widget.episodeItem.imageUrl;
|
color: Colors.red,
|
||||||
},
|
),
|
||||||
|
() => setUnliked(widget.episodeItem.title)),
|
||||||
|
DownloadButton(episodeBrief: widget.episodeItem),
|
||||||
|
_buttonOnMenu(Icon(Icons.playlist_add, color: Colors.grey[700]),
|
||||||
|
() {
|
||||||
|
Fluttertoast.showToast(
|
||||||
|
msg: 'Not support yet',
|
||||||
|
gravity: ToastGravity.BOTTOM,
|
||||||
|
);
|
||||||
|
/*TODO*/
|
||||||
|
}),
|
||||||
|
Spacer(),
|
||||||
|
(widget.episodeItem.title != urlchange.title)
|
||||||
|
? Material(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: InkWell(
|
||||||
|
borderRadius: BorderRadius.only(
|
||||||
|
topRight: Radius.circular(5.0),
|
||||||
|
bottomRight: Radius.circular(5.0)),
|
||||||
|
onTap: () {
|
||||||
|
urlChange.audioUrl = widget.episodeItem.enclosureUrl;
|
||||||
|
urlChange.rssTitle = widget.episodeItem.title;
|
||||||
|
urlChange.feedTitle = widget.episodeItem.feedTitle;
|
||||||
|
urlChange.imageUrl = widget.episodeItem.imageUrl;
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
height: 50.0,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 20.0),
|
||||||
|
child: Icon(
|
||||||
|
Icons.play_arrow,
|
||||||
|
color: Colors.grey[700],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
: (widget.episodeItem.title == urlchange.title &&
|
: (widget.episodeItem.title == urlchange.title &&
|
||||||
urlchange.audioState == AudioState.play)
|
urlchange.audioState == AudioState.play)
|
||||||
|
@ -140,7 +140,7 @@ class _DownloadButtonState extends State<DownloadButton> {
|
|||||||
task.taskId = newTaskId;
|
task.taskId = newTaskId;
|
||||||
var dbHelper = DBHelper();
|
var dbHelper = DBHelper();
|
||||||
await dbHelper.saveDownloaded(task.taskId, task.link);
|
await dbHelper.saveDownloaded(task.taskId, task.link);
|
||||||
Fluttertoast.showToast(
|
Fluttertoast.showToast(
|
||||||
msg: 'Download again',
|
msg: 'Download again',
|
||||||
gravity: ToastGravity.BOTTOM,
|
gravity: ToastGravity.BOTTOM,
|
||||||
);
|
);
|
||||||
@ -190,6 +190,17 @@ class _DownloadButtonState extends State<DownloadButton> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buttonOnMenu(Widget widget, Function() onTap) => Material(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: onTap,
|
||||||
|
child: Container(
|
||||||
|
height: 50.0,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 15.0),
|
||||||
|
child: widget),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return _downloadButton(_task);
|
return _downloadButton(_task);
|
||||||
@ -199,72 +210,70 @@ class _DownloadButtonState extends State<DownloadButton> {
|
|||||||
if (_isLoading)
|
if (_isLoading)
|
||||||
return Center();
|
return Center();
|
||||||
else if (task.status == DownloadTaskStatus.undefined) {
|
else if (task.status == DownloadTaskStatus.undefined) {
|
||||||
|
return _buttonOnMenu(
|
||||||
return IconButton(
|
Icon(
|
||||||
onPressed: () {
|
Icons.arrow_downward,
|
||||||
_requestDownload(task);
|
color: Colors.grey[700],
|
||||||
},
|
),
|
||||||
icon: Icon(
|
() => _requestDownload(task));
|
||||||
Icons.arrow_downward,
|
|
||||||
color: Colors.grey[700],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} else if (task.status == DownloadTaskStatus.running) {
|
} else if (task.status == DownloadTaskStatus.running) {
|
||||||
return InkWell(
|
return Material(
|
||||||
onTap: () {
|
color: Colors.transparent,
|
||||||
_pauseDownload(task);
|
child: InkWell(
|
||||||
},
|
onTap: () {
|
||||||
child: Container(
|
_pauseDownload(task);
|
||||||
padding: EdgeInsets.symmetric(horizontal: 18),
|
},
|
||||||
child: SizedBox(
|
child: Container(
|
||||||
height: 18,
|
height: 50.0,
|
||||||
width: 18,
|
alignment: Alignment.center,
|
||||||
child: CircularProgressIndicator(
|
padding: EdgeInsets.symmetric(horizontal: 18.0),
|
||||||
backgroundColor: Colors.grey[200],
|
child: SizedBox(
|
||||||
strokeWidth: 2,
|
height: 18,
|
||||||
valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
|
width: 18,
|
||||||
value: task.progress / 100,
|
child: CircularProgressIndicator(
|
||||||
|
backgroundColor: Colors.grey[500],
|
||||||
|
strokeWidth: 2,
|
||||||
|
valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
|
||||||
|
value: task.progress / 100,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else if (task.status == DownloadTaskStatus.paused) {
|
} else if (task.status == DownloadTaskStatus.paused) {
|
||||||
return InkWell(
|
return Material(
|
||||||
onTap: () {
|
color: Colors.transparent,
|
||||||
_resumeDownload(task);
|
child: InkWell(
|
||||||
},
|
onTap: () {
|
||||||
child: Container(
|
_resumeDownload(task);
|
||||||
padding: EdgeInsets.symmetric(horizontal: 18),
|
},
|
||||||
child: SizedBox(
|
child: Container(
|
||||||
height: 18,
|
height: 50.0,
|
||||||
width: 18,
|
alignment: Alignment.center,
|
||||||
child: CircularProgressIndicator(
|
padding: EdgeInsets.symmetric(horizontal: 18),
|
||||||
backgroundColor: Colors.grey[200],
|
child: SizedBox(
|
||||||
strokeWidth: 2,
|
height: 18,
|
||||||
valueColor: AlwaysStoppedAnimation<Color>(Colors.red),
|
width: 18,
|
||||||
value: task.progress / 100,
|
child: CircularProgressIndicator(
|
||||||
|
backgroundColor: Colors.grey[500],
|
||||||
|
strokeWidth: 2,
|
||||||
|
valueColor: AlwaysStoppedAnimation<Color>(Colors.red),
|
||||||
|
value: task.progress / 100,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else if (task.status == DownloadTaskStatus.complete) {
|
} else if (task.status == DownloadTaskStatus.complete) {
|
||||||
|
return _buttonOnMenu(
|
||||||
return IconButton(
|
Icon(
|
||||||
icon: Icon(
|
Icons.done_all,
|
||||||
Icons.done_all,
|
color: Colors.blue,
|
||||||
color: Colors.blue,
|
),
|
||||||
),
|
() => _deleteDownload(task));
|
||||||
onPressed: () {
|
|
||||||
_deleteDownload(task);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
} else if (task.status == DownloadTaskStatus.failed) {
|
} else if (task.status == DownloadTaskStatus.failed) {
|
||||||
return IconButton(
|
return _buttonOnMenu(
|
||||||
icon: Icon(Icons.refresh, color: Colors.red),
|
Icon(Icons.refresh, color: Colors.red), () => _retryDownload(task));
|
||||||
onPressed: () {
|
|
||||||
_retryDownload(task);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return Center();
|
return Center();
|
||||||
}
|
}
|
||||||
@ -279,4 +288,4 @@ class _TaskInfo {
|
|||||||
DownloadTaskStatus status = DownloadTaskStatus.undefined;
|
DownloadTaskStatus status = DownloadTaskStatus.undefined;
|
||||||
|
|
||||||
_TaskInfo({this.name, this.link});
|
_TaskInfo({this.name, this.link});
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import 'package:tsacdop/class/podcastlocal.dart';
|
|||||||
import 'package:tsacdop/class/episodebrief.dart';
|
import 'package:tsacdop/class/episodebrief.dart';
|
||||||
import 'package:tsacdop/class/sqflite_localpodcast.dart';
|
import 'package:tsacdop/class/sqflite_localpodcast.dart';
|
||||||
import 'package:tsacdop/util/episodegrid.dart';
|
import 'package:tsacdop/util/episodegrid.dart';
|
||||||
|
import 'package:tsacdop/webfeed/webfeed.dart';
|
||||||
|
|
||||||
class PodcastDetail extends StatefulWidget {
|
class PodcastDetail extends StatefulWidget {
|
||||||
PodcastDetail({Key key, this.podcastLocal}) : super(key: key);
|
PodcastDetail({Key key, this.podcastLocal}) : super(key: key);
|
||||||
@ -22,7 +23,8 @@ class _PodcastDetailState extends State<PodcastDetail> {
|
|||||||
Future _updateRssItem(PodcastLocal podcastLocal) async {
|
Future _updateRssItem(PodcastLocal podcastLocal) async {
|
||||||
var dbHelper = DBHelper();
|
var dbHelper = DBHelper();
|
||||||
final response = await Dio().get(podcastLocal.rssUrl);
|
final response = await Dio().get(podcastLocal.rssUrl);
|
||||||
final result = await dbHelper.savePodcastRss(response.data);
|
var _p = RssFeed.parse(response.data);
|
||||||
|
final result = await dbHelper.savePodcastRss(_p);
|
||||||
if (result == 0 && mounted) setState(() {});
|
if (result == 0 && mounted) setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user