三星设备Flutter应用使用share_plus等分享内容时状态栏隐藏问题求助
三星设备Flutter应用调用分享组件时状态栏被隐藏/覆盖的解决办法
问题描述
在三星设备上运行Flutter应用,使用share_plus或flutter_share等分享组件调用分享功能,弹出WhatsApp、Discord、Telegram等分享选项列表时,状态栏会被隐藏或覆盖,需解决该问题。
已尝试的代码
使用share_plus
await Share.share('https://www.google.com', subject: 'Google');
使用flutter_share
await FlutterShare.share( title: 'Product share', text: 'Mobile', linkUrl: 'https://www.google.com' );
注:有演示视频展示状态栏异常情况
解决办法
方案一:修改Android主题配置
该问题本质是三星系统弹出分享窗口时修改了APP的窗口UI模式,可通过调整Android主题配置强制保持状态栏显示:
- 打开
android/app/src/main/res/values/styles.xml(若有高版本适配文件如values-v31/styles.xml需同步修改) - 在当前使用的主题(如
AppTheme)中添加以下配置:
<item name="android:windowFullscreen">false</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
- 确保主题继承自非全屏类主题,例如
Theme.MaterialComponents.DayNight.NoActionBar
方案二:Flutter层面手动控制状态栏样式
通过在分享前后保存、恢复状态栏样式,强制保持状态栏可见:
import 'package:flutter/services.dart'; import 'package:share_plus/share_plus.dart'; // 调用分享前保存当前状态栏样式 final originalStyle = SystemChrome.latestStyle; // 强制设置状态栏显示样式(根据APP主题调整参数) SystemChrome.setSystemUIOverlayStyle( const SystemUiOverlayStyle( statusBarColor: Colors.transparent, statusBarIconBrightness: Brightness.dark, // 深色图标适配浅色状态栏,反之则用Brightness.light statusBarBrightness: Brightness.light, ), ); // 执行分享操作 await Share.share('https://www.google.com', subject: 'Google'); // 分享完成后恢复原状态栏样式 if (originalStyle != null) { SystemChrome.setSystemUIOverlayStyle(originalStyle); }
方案三:调整Android原生Intent启动模式(进阶)
若上述方案无效,可通过自定义Android平台通道,修改分享Intent的启动标记,避免系统窗口切换影响状态栏:
- 在Android项目中创建自定义分享工具类,添加
Intent.FLAG_ACTIVITY_NEW_TASK等标记 - 通过Flutter平台通道调用该原生方法实现分享,替代插件默认逻辑
原理说明
三星设备的系统分享弹窗属于系统级窗口,部分系统版本会触发APP窗口的UI模式变更(如临时全屏)。通过主题配置强制禁用全屏、或在Flutter层面手动锁定状态栏样式,可避免该异常。
内容的提问来源于stack exchange,提问作者Alpesh Kukadiya
相关产品推荐
相关产品推荐

