Add video player

pull/298/head
Xin Yao 4 years ago
parent bce32edc35
commit e8223c9ff3
  1. 4
      lib/src/widgets/simple_viewer.dart
  2. 66
      lib/src/widgets/video_app.dart
  3. 1
      pubspec.yaml

@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter_quill/src/widgets/video_app.dart';
import 'package:string_validator/string_validator.dart';
import 'package:tuple/tuple.dart';
@ -107,6 +108,9 @@ class _QuillSimpleViewerState extends State<QuillSimpleViewer>
: isBase64(imageUrl)
? Image.memory(base64.decode(imageUrl))
: Image.file(io.File(imageUrl));
case 'video':
final videoUrl = node.value.data;
return VideoApp(videoUrl: videoUrl);
default:
throw UnimplementedError(
'Embeddable type "${node.value.type}" is not supported by default '

@ -0,0 +1,66 @@
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
/// Widget for playing back video
/// Refer to https://github.com/flutter/plugins/tree/master/packages/video_player/video_player
class VideoApp extends StatefulWidget {
const VideoApp({required this.videoUrl});
final String videoUrl;
@override
_VideoAppState createState() => _VideoAppState();
}
class _VideoAppState extends State<VideoApp> {
late VideoPlayerController _controller;
@override
void initState() {
super.initState();
_controller = VideoPlayerController.asset(widget.videoUrl)
..initialize().then((_) {
// Ensure the first frame is shown after the video is initialized,
// even before the play button has been pressed.
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return Container(
height: 300,
child: InkWell(
onTap: () {
setState(() {
_controller.value.isPlaying
? _controller.pause()
: _controller.play();
});
},
child: Stack(alignment: Alignment.center, children: [
Center(
child: _controller.value.isInitialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: const CircularProgressIndicator()),
_controller.value.isPlaying || !_controller.value.isInitialized
? const SizedBox.shrink()
: const Icon(
Icons.play_arrow,
size: 60,
color: Colors.white,
)
]),
),
);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
}

@ -22,6 +22,7 @@ dependencies:
tuple: ^2.0.0
url_launcher: ^6.0.2
pedantic: ^1.11.0
video_player: ^2.1.10
dev_dependencies:
flutter_test:

Loading…
Cancel
Save