From 0d3e8988f22b6ad9f41e6813567c61cb756be5e0 Mon Sep 17 00:00:00 2001 From: Xin Yao Date: Mon, 19 Jul 2021 19:25:35 -0700 Subject: [PATCH] Display video as link if we cannot play it --- lib/src/widgets/editor.dart | 2 +- lib/src/widgets/simple_viewer.dart | 2 +- lib/src/widgets/video_app.dart | 23 +++++++++++++++-------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/src/widgets/editor.dart b/lib/src/widgets/editor.dart index 68370e91..2e9636e7 100644 --- a/lib/src/widgets/editor.dart +++ b/lib/src/widgets/editor.dart @@ -108,7 +108,7 @@ Widget _defaultEmbedBuilder(BuildContext context, leaf.Embed node) { : Image.file(io.File(imageUrl)); case 'video': final videoUrl = node.value.data; - return VideoApp(videoUrl: videoUrl); + return VideoApp(videoUrl: videoUrl, context: context); default: throw UnimplementedError( 'Embeddable type "${node.value.type}" is not supported by default ' diff --git a/lib/src/widgets/simple_viewer.dart b/lib/src/widgets/simple_viewer.dart index 8129bc1a..9a6ebb5c 100644 --- a/lib/src/widgets/simple_viewer.dart +++ b/lib/src/widgets/simple_viewer.dart @@ -110,7 +110,7 @@ class _QuillSimpleViewerState extends State : Image.file(io.File(imageUrl)); case 'video': final videoUrl = node.value.data; - return VideoApp(videoUrl: videoUrl); + return VideoApp(videoUrl: videoUrl, context: context); default: throw UnimplementedError( 'Embeddable type "${node.value.type}" is not supported by default ' diff --git a/lib/src/widgets/video_app.dart b/lib/src/widgets/video_app.dart index 9d08946b..ac398056 100644 --- a/lib/src/widgets/video_app.dart +++ b/lib/src/widgets/video_app.dart @@ -1,12 +1,15 @@ import 'package:flutter/material.dart'; import 'package:video_player/video_player.dart'; +import '../../flutter_quill.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}); + const VideoApp({required this.videoUrl, required this.context}); final String videoUrl; + final BuildContext context; @override _VideoAppState createState() => _VideoAppState(); @@ -31,6 +34,12 @@ class _VideoAppState extends State { @override 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( height: 300, child: InkWell( @@ -43,13 +52,11 @@ class _VideoAppState extends State { }, 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 + child: AspectRatio( + aspectRatio: _controller.value.aspectRatio, + child: VideoPlayer(_controller), + )), + _controller.value.isPlaying ? const SizedBox.shrink() : Container( color: const Color(0xfff5f5f5),