Display video as link if we cannot play it

pull/307/head
Xin Yao 4 years ago
parent 6d3fc30a5e
commit 0d3e8988f2
  1. 2
      lib/src/widgets/editor.dart
  2. 2
      lib/src/widgets/simple_viewer.dart
  3. 23
      lib/src/widgets/video_app.dart

@ -108,7 +108,7 @@ Widget _defaultEmbedBuilder(BuildContext context, leaf.Embed node) {
: Image.file(io.File(imageUrl)); : Image.file(io.File(imageUrl));
case 'video': case 'video':
final videoUrl = node.value.data; final videoUrl = node.value.data;
return VideoApp(videoUrl: videoUrl); return VideoApp(videoUrl: videoUrl, context: context);
default: default:
throw UnimplementedError( throw UnimplementedError(
'Embeddable type "${node.value.type}" is not supported by default ' 'Embeddable type "${node.value.type}" is not supported by default '

@ -110,7 +110,7 @@ class _QuillSimpleViewerState extends State<QuillSimpleViewer>
: Image.file(io.File(imageUrl)); : Image.file(io.File(imageUrl));
case 'video': case 'video':
final videoUrl = node.value.data; final videoUrl = node.value.data;
return VideoApp(videoUrl: videoUrl); return VideoApp(videoUrl: videoUrl, context: context);
default: default:
throw UnimplementedError( throw UnimplementedError(
'Embeddable type "${node.value.type}" is not supported by default ' 'Embeddable type "${node.value.type}" is not supported by default '

@ -1,12 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart'; import 'package:video_player/video_player.dart';
import '../../flutter_quill.dart';
/// Widget for playing back video /// Widget for playing back video
/// Refer to https://github.com/flutter/plugins/tree/master/packages/video_player/video_player /// Refer to https://github.com/flutter/plugins/tree/master/packages/video_player/video_player
class VideoApp extends StatefulWidget { class VideoApp extends StatefulWidget {
const VideoApp({required this.videoUrl}); const VideoApp({required this.videoUrl, required this.context});
final String videoUrl; final String videoUrl;
final BuildContext context;
@override @override
_VideoAppState createState() => _VideoAppState(); _VideoAppState createState() => _VideoAppState();
@ -31,6 +34,12 @@ class _VideoAppState extends State<VideoApp> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final defaultStyles = DefaultStyles.getInstance(context);
if (!_controller.value.isInitialized || _controller.value.hasError) {
return RichText(
text: TextSpan(text: widget.videoUrl, style: defaultStyles.link));
}
return Container( return Container(
height: 300, height: 300,
child: InkWell( child: InkWell(
@ -43,13 +52,11 @@ class _VideoAppState extends State<VideoApp> {
}, },
child: Stack(alignment: Alignment.center, children: [ child: Stack(alignment: Alignment.center, children: [
Center( Center(
child: _controller.value.isInitialized child: AspectRatio(
? AspectRatio( aspectRatio: _controller.value.aspectRatio,
aspectRatio: _controller.value.aspectRatio, child: VideoPlayer(_controller),
child: VideoPlayer(_controller), )),
) _controller.value.isPlaying
: const CircularProgressIndicator()),
_controller.value.isPlaying || !_controller.value.isInitialized
? const SizedBox.shrink() ? const SizedBox.shrink()
: Container( : Container(
color: const Color(0xfff5f5f5), color: const Color(0xfff5f5f5),

Loading…
Cancel
Save