ente/lib/ui/video_widget.dart

93 lines
2.5 KiB
Dart
Raw Normal View History

2020-06-19 23:03:26 +00:00
import 'package:chewie/chewie.dart';
2020-06-20 23:51:10 +00:00
import 'package:flutter/material.dart';
2020-06-19 23:03:26 +00:00
import 'package:flutter/widgets.dart';
import 'package:photos/core/cache/thumbnail_cache.dart';
import 'package:photos/core/constants.dart';
2020-06-19 23:03:26 +00:00
import 'package:photos/models/file.dart';
2020-06-20 23:51:10 +00:00
import 'package:photos/ui/video_controls.dart';
2020-06-19 23:03:26 +00:00
import 'package:video_player/video_player.dart';
import 'loading_widget.dart';
class VideoWidget extends StatefulWidget {
final File file;
final bool autoPlay;
VideoWidget(this.file, {this.autoPlay = false, Key key}) : super(key: key);
2020-06-19 23:03:26 +00:00
@override
_VideoWidgetState createState() => _VideoWidgetState();
}
class _VideoWidgetState extends State<VideoWidget> {
VideoPlayerController _videoPlayerController;
ChewieController _chewieController;
2020-06-19 23:03:26 +00:00
@override
void initState() {
super.initState();
if (widget.file.localId == null) {
_setVideoPlayerController(widget.file.getRemoteUrl());
} else {
widget.file.getAsset().then((asset) {
asset.getMediaUrl().then((url) {
_setVideoPlayerController(url);
});
});
}
2020-06-19 23:03:26 +00:00
}
@override
void dispose() {
_videoPlayerController.dispose();
_chewieController.dispose();
super.dispose();
}
VideoPlayerController _setVideoPlayerController(String url) {
return _videoPlayerController = VideoPlayerController.network(url)
..initialize().whenComplete(() {
setState(() {});
});
}
2020-06-19 23:03:26 +00:00
@override
Widget build(BuildContext context) {
2020-06-23 15:05:48 +00:00
final content = _videoPlayerController != null &&
_videoPlayerController.value.initialized
? _getVideoPlayer()
: _getLoadingWidget();
2020-06-23 15:05:48 +00:00
return Hero(
2020-06-23 19:04:28 +00:00
tag: widget.file.heroTag(),
2020-06-23 15:05:48 +00:00
child: content,
);
}
Widget _getLoadingWidget() {
return Stack(children: [
_getThumbnail(),
loadWidget,
]);
}
Center _getThumbnail() {
final thumbnail = widget.file.localId == null
? Image.network(widget.file.getThumbnailUrl())
: Image.memory(
ThumbnailLruCache.get(widget.file, THUMBNAIL_SMALL_SIZE));
return Center(child: thumbnail);
2020-06-19 23:03:26 +00:00
}
Widget _getVideoPlayer() {
2020-06-20 22:47:09 +00:00
_chewieController = ChewieController(
videoPlayerController: _videoPlayerController,
aspectRatio: _videoPlayerController.value.aspectRatio,
autoPlay: widget.autoPlay,
2020-06-20 22:47:09 +00:00
autoInitialize: true,
looping: true,
allowFullScreen: false,
2020-06-20 23:51:10 +00:00
customControls: VideoControls(),
2020-06-20 22:47:09 +00:00
);
return Chewie(controller: _chewieController);
2020-06-19 23:03:26 +00:00
}
}