Flutter中Chewie视频播放器自定义主题在全屏模式不生效如何解决?
问题原因
Chewie切换全屏时会内部推送一个独立的新路由页面,你当前页面中包裹在Chewie外层的Theme仅作用于当前页面的组件子树,新的全屏路由不在该子树范围内,因此无法继承你配置的自定义主题,会默认使用应用根节点的主题样式。
解决方案
方案1:全局配置主题
如果你自定义的主题可以应用到整个APP,直接在MaterialApp层级配置主题是最简单的方案,所有路由都可以继承到对应配置:
MaterialApp( theme: ThemeData( // Flutter 2.3+版本accentColor已废弃,用colorScheme.secondary替代 colorScheme: ColorScheme.fromSwatch().copyWith( secondary: kPrimaryColor, ), backgroundColor: kLightPrimaryColor, iconTheme: IconThemeData(color: kPrimaryColor), ), home: 你的应用首页组件, );
方案2:自定义全屏路由包裹主题
如果你不想修改全局主题,仅希望播放器相关页面使用自定义主题,可以通过ChewieController的routePageBuilder参数自定义全屏页面的构建逻辑,手动包裹自定义主题:
// 初始化ChewieController时添加该参数 _chewieController = ChewieController( videoPlayerController: _videoPlayerController, // 你原有其他配置项,如autoPlay、looping等 routePageBuilder: (context, animation1, animation2, controller) { return Theme( data: Theme.of(context).copyWith( colorScheme: ColorScheme.fromSwatch().copyWith( secondary: kPrimaryColor, ), backgroundColor: kLightPrimaryColor, iconTheme: IconThemeData(color: kPrimaryColor), ), child: Scaffold( body: Chewie(controller: controller), ), ); }, );
内容的提问来源于stack exchange,提问作者Ammar Mohamed
相关产品推荐
相关产品推荐

