add VideoProvider widget to play video in example app
This commit is contained in:
parent
3699cb02a9
commit
48cd6f6663
@ -6,6 +6,7 @@ import 'package:flutter/rendering.dart';
|
|||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:photo_gallery/photo_gallery.dart';
|
import 'package:photo_gallery/photo_gallery.dart';
|
||||||
import 'package:transparent_image/transparent_image.dart';
|
import 'package:transparent_image/transparent_image.dart';
|
||||||
|
import 'package:video_player/video_player.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
runApp(MyApp());
|
runApp(MyApp());
|
||||||
@ -30,7 +31,7 @@ class _MyAppState extends State<MyApp> {
|
|||||||
Future<void> initAsync() async {
|
Future<void> initAsync() async {
|
||||||
if (await _promptPermissionSetting()) {
|
if (await _promptPermissionSetting()) {
|
||||||
List<Album> collections =
|
List<Album> collections =
|
||||||
await PhotoGallery.listAlbums(mediumType: MediumType.image);
|
await PhotoGallery.listAlbums(mediumType: MediumType.video);
|
||||||
setState(() {
|
setState(() {
|
||||||
_collections = collections;
|
_collections = collections;
|
||||||
_loading = false;
|
_loading = false;
|
||||||
@ -224,13 +225,81 @@ class ViewerPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
body: Container(
|
body: Container(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: FadeInImage(
|
child: medium.mediumType == MediumType.image
|
||||||
|
? FadeInImage(
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
placeholder: MemoryImage(kTransparentImage),
|
placeholder: MemoryImage(kTransparentImage),
|
||||||
image: PhotoProvider(mediumId: medium.id),
|
image: PhotoProvider(mediumId: medium.id),
|
||||||
|
)
|
||||||
|
: VideoProvider(
|
||||||
|
mediumId: medium.id,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class VideoProvider extends StatefulWidget {
|
||||||
|
final String mediumId;
|
||||||
|
|
||||||
|
const VideoProvider({
|
||||||
|
@required this.mediumId,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_VideoProviderState createState() => _VideoProviderState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _VideoProviderState extends State<VideoProvider> {
|
||||||
|
VideoPlayerController _controller;
|
||||||
|
File _file;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
|
initAsync();
|
||||||
|
});
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> initAsync() async {
|
||||||
|
try {
|
||||||
|
_file = await PhotoGallery.getFile(mediumId: widget.mediumId);
|
||||||
|
_controller = VideoPlayerController.file(_file);
|
||||||
|
_controller.initialize().then((_) {
|
||||||
|
// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
|
||||||
|
setState(() {});
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
print("Failed : $e");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return _controller == null || !_controller.value.initialized
|
||||||
|
? Container()
|
||||||
|
: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
AspectRatio(
|
||||||
|
aspectRatio: _controller.value.aspectRatio,
|
||||||
|
child: VideoPlayer(_controller),
|
||||||
|
),
|
||||||
|
FlatButton(
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
_controller.value.isPlaying
|
||||||
|
? _controller.pause()
|
||||||
|
: _controller.play();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Icon(
|
||||||
|
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user