Unverified Commit b46d7904 authored by Sigurd Meldgaard's avatar Sigurd Meldgaard Committed by GitHub

Add spinner to loading video (#13330)

* Add spinner to loading video
parent ffb24eda
......@@ -30,7 +30,7 @@ class VideoCard extends StatelessWidget {
aspectRatio: 3 / 2,
child: new Hero(
tag: controller,
child: new VideoPlayer(controller),
child: new VideoPlayerLoading(controller),
),
),
),
......@@ -97,6 +97,50 @@ class VideoCard extends StatelessWidget {
}
}
class VideoPlayerLoading extends StatefulWidget {
final VideoPlayerController controller;
const VideoPlayerLoading(this.controller);
@override
_VideoPlayerLoadingState createState() => new _VideoPlayerLoadingState();
}
class _VideoPlayerLoadingState extends State<VideoPlayerLoading> {
bool _initialized;
@override
void initState() {
super.initState();
_initialized = widget.controller.value.initialized;
widget.controller.addListener(() {
if (!mounted) {
return;
}
final bool controllerInitialized = widget.controller.value.initialized;
if (_initialized != controllerInitialized) {
setState(() {
_initialized = controllerInitialized;
});
}
});
}
@override
Widget build(BuildContext context) {
if (_initialized) {
return new VideoPlayer(widget.controller);
}
return new Stack(
children: <Widget>[
new VideoPlayer(widget.controller),
const Center(child: const CircularProgressIndicator()),
],
fit: StackFit.expand,
);
}
}
class VideoPlayPause extends StatefulWidget {
final VideoPlayerController controller;
......@@ -132,37 +176,31 @@ class _VideoPlayPauseState extends State<VideoPlayPause> {
@override
Widget build(BuildContext context) {
final List<Widget> children = <Widget>[
new GestureDetector(
child: new VideoPlayer(controller),
onTap: () {
if (!controller.value.initialized) {
return;
}
if (controller.value.isPlaying) {
imageFadeAnimation = new FadeAnimation(
child: new Icon(Icons.pause, size: 100.0),
);
controller.pause();
} else {
imageFadeAnimation = new FadeAnimation(
child: new Icon(Icons.play_arrow, size: 100.0),
);
controller.play();
}
},
),
new Center(child: imageFadeAnimation),
];
if (!controller.value.initialized) {
children.add(new Container());
}
return new Stack(
alignment: Alignment.bottomCenter,
fit: StackFit.passthrough,
children: children,
fit: StackFit.expand,
children: <Widget>[
new GestureDetector(
child: new VideoPlayerLoading(controller),
onTap: () {
if (!controller.value.initialized) {
return;
}
if (controller.value.isPlaying) {
imageFadeAnimation = new FadeAnimation(
child: new Icon(Icons.pause, size: 100.0),
);
controller.pause();
} else {
imageFadeAnimation = new FadeAnimation(
child: new Icon(Icons.play_arrow, size: 100.0),
);
controller.play();
}
},
),
new Center(child: imageFadeAnimation),
],
);
}
}
......
......@@ -8,7 +8,7 @@ dependencies:
string_scanner: 1.0.2
url_launcher: 0.4.2+5
cupertino_icons: 0.1.1
video_player: 0.0.5
video_player: 0.0.6
# Also update dev/benchmarks/complex_layout/pubspec.yaml
flutter_gallery_assets:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment