使用youtube_player_flutter v9.0.1时遇flutter_inappwebview未设置错误求助
Flutter使用youtube_player_flutter v9.0.1播放YouTube视频时出现flutter_inappwebview平台实现未设置错误
错误信息
The following assertion was thrown building RawYoutubePlayer(dirty, dependencies: [InheritedYoutubePlayer], state: _RawYoutubePlayerState#d7415): A platform implementation for `flutter_inappwebview` has not been set. Please ensure that an implementation of `InAppWebViewPlatform` has been set to `InAppWebViewPlatform.instance` before use. For unit testing, `InAppWebViewPlatform.instance` can be set with your own test implementation. 'package:flutter_inappwebview_platform_interface/src/in_app_webview/platform_inappwebview_widget.dart': Failed assertion: line 202 pos 7: 'InAppWebViewPlatform.instance != null'
使用插件的代码
import 'package:flutter/material.dart'; import 'package:fitness_project/models/workout.dart'; import 'package:youtube_player_flutter/youtube_player_flutter.dart'; class WorkoutDetail extends StatefulWidget{ Workout? workout; WorkoutDetail({super.key,this.workout}); @override WorkoutDetailState createState() => WorkoutDetailState(workout: workout); } class WorkoutDetailState extends State<WorkoutDetail>{ Workout? workout; WorkoutDetailState({this.workout}); YoutubePlayerController controller = YoutubePlayerController( initialVideoId: 'CbggneVFrx8', flags: YoutubePlayerFlags(autoPlay:false, ), ); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(automaticallyImplyLeading: false, backgroundColor: Colors.indigoAccent, title: Text(("Workout Details"), style:const TextStyle(color: Colors.white)), ), backgroundColor: Colors.black, body: Container( child: Center( child:Container( child:Column(mainAxisAlignment: MainAxisAlignment.center , children: [ YoutubePlayer( controller: controller, ), Container(decoration: BoxDecoration(border: Border.all(color: Colors.white), color: Colors.white24, borderRadius: BorderRadius.all(Radius.circular(15)) ), height: 150, padding: EdgeInsets.only(top:10,bottom: 20), margin: EdgeInsets.only(left: 20,right:20,top:15,bottom:15), child: Column(children: [ Text("Steps to do this workout ",style: TextStyle(color: Colors.white, fontSize: 24)), Divider(color: Colors.white, indent: 10,endIndent:10 ), Expanded(child: Container( child: Text("Put your hands on ground and jump ", style: TextStyle(color: Colors.white, fontSize: 19)), )) ],) )], )))) ); } }
已完成的配置
- minSdkVersion 设置为21
- 开启
android.useAndroidX=true和android.enableJetifier=true - Android Gradle插件版本为7.3.0
pubspec.yaml配置
name: fitness_project description: "A new Flutter project." # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 # followed by an optional build number separated by a +. # Both the version and the builder number may be overridden in flutter # build by specifying --build-name and --build-number, respectively. # In Android, build-name is used as versionName while build-number used as versionCode. # Read more about Android versioning at https://developer.android.com/studio/publish/versioning # In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. version: 1.0.0+1 environment: sdk: '>=3.2.5 <4.0.0' # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions # consider running `flutter pub upgrade --major-versions`. Alternatively, # dependencies can be manually updated by changing the version numbers below to # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 firebase_core: ^2.27.0 firebase_auth: ^4.17.8 cloud_firestore: ^4.15.8 youtube_player_flutter: ^9.0.1 syncfusion_flutter_gauges: ^25.1.39 dev_dependencies: flutter_test: sdk: flutter # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^2.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter packages. flutter: # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true # To add assets to your application, add an assets section, like this: assets: - assets/images/ # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware # For details regarding adding assets from package dependencies, see # https://flutter.dev/assets-and-images/#from-packages # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a # "family" key with the font family name, and a "fonts" key with a # list giving the asset and other descriptors for the font. For # example: # fonts: # - family: Schyler # fonts: # - asset: fonts/Schyler-Regular.ttf # - asset: fonts/Schyler-Italic.ttf # style: italic # - family: Trajan Pro # fonts: # - asset: fonts/TrajanPro.ttf # - asset: fonts/TrajanPro_Bold.ttf # weight: 700 # # For details regarding fonts from package dependencies, # see https://flutter.dev/custom-fonts/#from-packages
解决方案
这个错误是因为youtube_player_flutter v9.x版本依赖flutter_inappwebview,但依赖的版本可能存在兼容问题,或者没有正确初始化平台实现。可以按以下步骤解决:
- 手动添加指定版本的flutter_inappwebview依赖
在pubspec.yaml的dependencies中添加:
flutter_inappwebview: ^5.8.0
执行flutter pub get拉取依赖。
清理并重建项目
依次执行flutter clean清除缓存,重启IDE后重新编译运行项目。调整控制器初始化时机
将YoutubePlayerController的初始化移到initState中,避免提前初始化导致的问题,同时记得在dispose中释放资源:
YoutubePlayerController? controller; @override void initState() { super.initState(); controller = YoutubePlayerController( initialVideoId: 'CbggneVFrx8', flags: const YoutubePlayerFlags(autoPlay: false), ); } @override void dispose() { controller?.dispose(); super.dispose(); }
内容的提问来源于stack exchange,提问作者Mohammad Saim
相关产品推荐
相关产品推荐

