Skip to content

Commit dd464ba

Browse files
committed
– Added video progress bar
– Added persistent play/pause – Added persistent rating filters
1 parent b0ab97a commit dd464ba

File tree

5 files changed

+79
-26
lines changed

5 files changed

+79
-26
lines changed

README.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,35 @@ Derpibooru client made with Flutter
2626

2727
## Screenshots
2828

29-
### Main grid view
29+
| Main grid view | Full image view | Image details | App drawer |
30+
| -------------- | --------------- | ------------- | ---------- |
31+
| ![Main grid view](screenshots/gridview.jpg) | ![Full image view](screenshots/fullview.jpg) | ![Image details](screenshots/details.jpg) | ![App drawer](screenshots/drawer.jpg) |
3032

31-
![Main grid view](screenshots/gridview.jpg)
33+
<!--### Main grid view-->
3234

33-
### Full image view
35+
<!--![Main grid view](screenshots/gridview.jpg)-->
3436

35-
![Full image view](screenshots/fullview.jpg)
37+
<!--### Full image view-->
3638

37-
### Image details
39+
<!--![Full image view](screenshots/fullview.jpg)-->
3840

39-
![Image details](screenshots/details.jpg)
41+
<!--### Image details-->
4042

41-
### App drawer
43+
<!--![Image details](screenshots/details.jpg)-->
4244

43-
![App drawer](screenshots/drawer.jpg)
45+
<!--### App drawer-->
46+
47+
<!--![App drawer](screenshots/drawer.jpg)-->
4448

4549
## Changelog
4650

4751
* **04.09.2019**
4852
* Added favourites list
4953
* Made history and favourites dismissable
54+
* Added video progress bar
55+
* If a video is playing, all other videos will autostart, if a video
56+
is paused, all other videos will be paused as well
57+
* Rating filter is now saved on change
5058

5159
* **02.06.2019**
5260
* Webm files now show their gif thumbnail previews in grid view!

lib/Views/HomePage.dart

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class HomePageState extends State<HomePage> {
6464
@override
6565
void initState() {
6666
getCacheSize();
67+
_getRatingPrefs();
6768
_scrollController = ScrollController();
6869
_scrollController.addListener(_loadDerpisListener);
6970
super.initState();
@@ -80,6 +81,22 @@ class HomePageState extends State<HomePage> {
8081
}
8182
}
8283

84+
void _getRatingPrefs() async {
85+
SharedPreferences prefs = await SharedPreferences.getInstance();
86+
setState(() {
87+
_s = prefs.getBool('safe');
88+
_q = prefs.getBool('questionable');
89+
_e = prefs.getBool('explicit');
90+
});
91+
}
92+
93+
void _saveRatingPrefs() async {
94+
SharedPreferences prefs = await SharedPreferences.getInstance();
95+
prefs.setBool('safe', _s);
96+
prefs.setBool('questionable', _q);
97+
prefs.setBool('explicit', _e);
98+
}
99+
83100
void _saveKey(String key) async {
84101
setState(() {
85102
repo.key = key;
@@ -231,14 +248,17 @@ class HomePageState extends State<HomePage> {
231248
safe: _s,
232249
safeChanged: (value) {
233250
_s = value;
251+
_saveRatingPrefs();
234252
},
235253
questionable: _q,
236254
questionableChanged: (value) {
237255
_q = value;
256+
_saveRatingPrefs();
238257
},
239258
explicit: _e,
240259
explicitChanged: (value) {
241260
_e = value;
261+
_saveRatingPrefs();
242262
},
243263
);
244264
},
@@ -256,7 +276,7 @@ class HomePageState extends State<HomePage> {
256276
DrawerHeader(
257277
child: SvgPicture.asset('assets/logo.svg'),
258278
decoration: BoxDecoration(
259-
color: Colors.black
279+
color: Color.fromARGB(1, 100, 150, 150)
260280
),
261281
),
262282
ListTile(

lib/Views/ImageViewer.dart

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
77
import 'package:provider/provider.dart';
88
import 'package:share/share.dart';
99
import 'package:video_player/video_player.dart';
10+
import 'package:percent_indicator/linear_percent_indicator.dart';
1011

1112
import '../Helpers.dart';
1213

@@ -39,6 +40,8 @@ class ImageViewerState extends State<ImageViewer> {
3940

4041
DerpisRepo repo;
4142

43+
double _videoProgressPercent = 0.0;
44+
4245
@override
4346
void dispose() {
4447
_videoController.dispose();
@@ -51,12 +54,17 @@ class ImageViewerState extends State<ImageViewer> {
5154

5255
_videoController?.dispose();
5356
_videoController = VideoPlayerController.network('https:'+repo.derpis[_id].representations.medium)
54-
..initialize().then((_) {
55-
_videoController.setVolume(_volume);
56-
_videoController.setLooping(true);
57-
if (_autoplay) _videoController.play();
58-
setState(() {});
57+
..addListener(() {
58+
setState(() {
59+
_videoProgressPercent = (_videoController.value.position.inMilliseconds / _videoController.value.duration.inMilliseconds).clamp(0.0, 1.0);
5960
});
61+
})
62+
..initialize().then((_) {
63+
_videoController.setVolume(_volume);
64+
_videoController.setLooping(true);
65+
if (_autoplay) _videoController.play();
66+
setState(() {});
67+
});
6068

6169
super.didChangeDependencies();
6270
}
@@ -77,14 +85,19 @@ class ImageViewerState extends State<ImageViewer> {
7785
// Swap the video
7886
if (_pageController.page.round() != _currentPage) {
7987
if (repo.derpis[_pageController.page.round()].mimeType == MimeType.VIDEO_WEBM) {
80-
_videoController.dispose();
88+
_videoController?.dispose();
8189
_videoController = VideoPlayerController.network('https:'+repo.derpis[_pageController.page.round()].representations.medium)
82-
..initialize().then((_) {
83-
_videoController.setVolume(_volume);
84-
_videoController.setLooping(true);
85-
if (_autoplay) _videoController.play();
86-
setState(() {});
90+
..addListener(() {
91+
setState(() {
92+
_videoProgressPercent = (_videoController.value.position.inMilliseconds / _videoController.value.duration.inMilliseconds).clamp(0.0, 1.0);
8793
});
94+
})
95+
..initialize().then((_) {
96+
_videoController.setVolume(_volume);
97+
_videoController.setLooping(true);
98+
if (_autoplay) _videoController.play();
99+
setState(() {});
100+
});
88101
}
89102
_currentPage = _pageController.page.round();
90103
}
@@ -140,12 +153,7 @@ class ImageViewerState extends State<ImageViewer> {
140153
_videoController.value.isPlaying
141154
? _videoController.pause()
142155
: _videoController.play();
143-
});
144-
},
145-
onLongPress: () {
146-
setState(() {
147-
_autoplay = !_autoplay;
148-
debugPrint(_autoplay.toString());
156+
_autoplay = _autoplay ? false : true;
149157
});
150158
},
151159
),
@@ -158,6 +166,7 @@ class ImageViewerState extends State<ImageViewer> {
158166
_videoController.value.isPlaying
159167
? _videoController.pause()
160168
: _videoController.play();
169+
_autoplay = _autoplay ? false : true;
161170
})
162171
),
163172
),
@@ -172,6 +181,19 @@ class ImageViewerState extends State<ImageViewer> {
172181
_videoController.setVolume(_volume);
173182
})
174183
),
184+
),
185+
Align(
186+
alignment: Alignment.bottomCenter,
187+
child: Container(
188+
height: 3,
189+
child: new LinearPercentIndicator(
190+
padding: EdgeInsets.all(0.0),
191+
linearStrokeCap: LinearStrokeCap.butt,
192+
lineHeight: 3.0,
193+
progressColor: Colors.teal,
194+
percent: _videoProgressPercent,
195+
)
196+
),
175197
)
176198
],
177199
);
@@ -181,6 +203,7 @@ class ImageViewerState extends State<ImageViewer> {
181203
onPageChanged: (pageId) {
182204
setState(() {
183205
_id = pageId.round();
206+
_videoProgressPercent = 0.0;
184207
});
185208
},
186209
),

pubspec.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ dependencies:
4242

4343
flutter_slidable: ^0.5.3
4444

45+
percent_indicator: ^2.1.1
46+
4547
# webview_flutter: ^0.3.6
4648

4749

screenshots/joined.jpg

2.37 MB
Loading

0 commit comments

Comments
 (0)