From 37355e135c2075965aef87154e4b09834bd2ec1f Mon Sep 17 00:00:00 2001 From: Mo Kweon Date: Fri, 11 Jun 2021 09:43:48 -0700 Subject: [PATCH] fix: use the native youtube view for the native It's opening the in app tracked at https://github.com/sarbagyastha/youtube_player_flutter/issues/462 --- client/ios/Podfile.lock | 2 +- client/lib/screens/detail_screen.dart | 5 ++- client/lib/widgets/detail/youtube.dart | 38 ++----------------- .../lib/widgets/detail/youtube_interface.dart | 17 +++++++++ client/lib/widgets/detail/youtube_native.dart | 28 ++++++++++++++ client/lib/widgets/detail/youtube_web.dart | 35 +++++++++++++++++ client/pubspec.lock | 2 +- client/pubspec.yaml | 1 + 8 files changed, 90 insertions(+), 38 deletions(-) create mode 100644 client/lib/widgets/detail/youtube_interface.dart create mode 100644 client/lib/widgets/detail/youtube_native.dart create mode 100644 client/lib/widgets/detail/youtube_web.dart diff --git a/client/ios/Podfile.lock b/client/ios/Podfile.lock index e15b2ecc..1adc57cf 100644 --- a/client/ios/Podfile.lock +++ b/client/ios/Podfile.lock @@ -36,4 +36,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c -COCOAPODS: 1.10.0 +COCOAPODS: 1.10.1 diff --git a/client/lib/screens/detail_screen.dart b/client/lib/screens/detail_screen.dart index e45208fd..24d69ad9 100644 --- a/client/lib/screens/detail_screen.dart +++ b/client/lib/screens/detail_screen.dart @@ -46,7 +46,10 @@ class DetailScreen extends StatelessWidget { ), body: Column( children: [ - YoutubeWidget(youtubeId: extractYoutubeId(args.video.link)), + LimitedBox( + maxHeight: 350, + child: YoutubeWidget(youtubeId: extractYoutubeId(args.video.link)), + ), Expanded( child: CustomScrollView( slivers: [ diff --git a/client/lib/widgets/detail/youtube.dart b/client/lib/widgets/detail/youtube.dart index dade2576..1985bd50 100644 --- a/client/lib/widgets/detail/youtube.dart +++ b/client/lib/widgets/detail/youtube.dart @@ -1,35 +1,3 @@ -import 'package:flutter/material.dart'; -// import 'package:youtube_player_flutter/youtube_player_flutter.dart'; -import 'package:youtube_player_iframe/youtube_player_iframe.dart'; - -class YoutubeWidget extends StatefulWidget { - final String youtubeId; - - const YoutubeWidget({Key? key, required this.youtubeId}) : super(key: key); - - @override - _DetailState createState() => _DetailState(); -} - -class _DetailState extends State { - late final YoutubePlayerController _controller; - - @override - void initState() { - super.initState(); - - _controller = YoutubePlayerController(initialVideoId: widget.youtubeId); - } - - @override - Widget build(BuildContext context) { - return YoutubePlayerControllerProvider( - // Provides controller to all the widget below it. - controller: _controller, - child: const YoutubePlayerIFrame( - // ignore: avoid_redundant_argument_values - aspectRatio: 16 / 9, - ), - ); - } -} +export "youtube_interface.dart" + if (dart.library.html) "./youtube_web.dart" + if (dart.library.io) "./youtube_native.dart"; diff --git a/client/lib/widgets/detail/youtube_interface.dart b/client/lib/widgets/detail/youtube_interface.dart new file mode 100644 index 00000000..e7cb2e9d --- /dev/null +++ b/client/lib/widgets/detail/youtube_interface.dart @@ -0,0 +1,17 @@ +import 'package:flutter/widgets.dart'; + +class YoutubeWidget extends StatefulWidget { + final String youtubeId; + + const YoutubeWidget({Key? key, required this.youtubeId}) : super(key: key); + + @override + _YouTubeWidgetState createState() => _YouTubeWidgetState(); +} + +class _YouTubeWidgetState extends State { + @override + Widget build(BuildContext context) { + throw UnimplementedError("you have to import youtube.dart instead"); + } +} diff --git a/client/lib/widgets/detail/youtube_native.dart b/client/lib/widgets/detail/youtube_native.dart new file mode 100644 index 00000000..eaded23a --- /dev/null +++ b/client/lib/widgets/detail/youtube_native.dart @@ -0,0 +1,28 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:youtube_player_flutter/youtube_player_flutter.dart'; + +class YoutubeWidget extends StatefulWidget { + final String youtubeId; + + const YoutubeWidget({Key? key, required this.youtubeId}) : super(key: key); + + @override + _YouTubeWidgetState createState() => _YouTubeWidgetState(); +} + +class _YouTubeWidgetState extends State { + late final YoutubePlayerController _controller; + + @override + void initState() { + super.initState(); + + _controller = YoutubePlayerController(initialVideoId: widget.youtubeId); + } + + @override + Widget build(BuildContext context) { + return YoutubePlayer(controller: _controller); + } +} diff --git a/client/lib/widgets/detail/youtube_web.dart b/client/lib/widgets/detail/youtube_web.dart new file mode 100644 index 00000000..e5061426 --- /dev/null +++ b/client/lib/widgets/detail/youtube_web.dart @@ -0,0 +1,35 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:youtube_player_iframe/youtube_player_iframe.dart'; + +class YoutubeWidget extends StatefulWidget { + final String youtubeId; + + const YoutubeWidget({Key? key, required this.youtubeId}) : super(key: key); + + @override + _YouTubeWidgetState createState() => _YouTubeWidgetState(); +} + +class _YouTubeWidgetState extends State { + late final YoutubePlayerController _controller; + + @override + void initState() { + super.initState(); + + _controller = YoutubePlayerController(initialVideoId: widget.youtubeId); + } + + @override + Widget build(BuildContext context) { + return YoutubePlayerControllerProvider( + // Provides controller to all the widget below it. + controller: _controller, + child: const YoutubePlayerIFrame( + // ignore: avoid_redundant_argument_values + aspectRatio: 16 / 9, + ), + ); + } +} diff --git a/client/pubspec.lock b/client/pubspec.lock index 985290a4..000cff06 100644 --- a/client/pubspec.lock +++ b/client/pubspec.lock @@ -222,7 +222,7 @@ packages: source: sdk version: "0.0.0" flutter_inappwebview: - dependency: transitive + dependency: "direct main" description: name: flutter_inappwebview url: "https://pub.dartlang.org" diff --git a/client/pubspec.yaml b/client/pubspec.yaml index d519526e..fff22524 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -25,6 +25,7 @@ dependencies: cupertino_icons: ^1.0.2 flutter: sdk: flutter + flutter_inappwebview: ^5.3.2 grpc: ^3.0.0 intl: ^0.17.0 protobuf: ^2.0.0