使用 Flutter SystemChrome

简介: 使用 Flutter SystemChrome

SystemChrome 控制操作系统图形界面的特定方面以及它如何与应用程序交互。需要注意的是在使用的时候一定要保证先执行 WidgetsFlutterBinding.ensureInitialized();

setPreferredOrientations 设置横屏或坚屏

一般我们显示是要强制坚屏,只需要指定 DeviceOrientation.portraitUp 就够了。

SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
复制代码

不需要再加上 DeviceOrientation.portraitDown,因为加上也不会有效果。

SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,DeviceOrientation.portraitDown]);
复制代码

这样写也可以,只有后面的 portraitDown 有点多余,如果可以的话,系统不允许在竖直方向倒过来,所以即使是手机设置中没有打开方向锁定,也不用担心会倒过来。

如果想在竖直方向倒过来,可以只指定 portraitDown。这样画面就会一直倒置。

SystemChrome.setPreferredOrientations([DeviceOrientation.portraitDown]);
复制代码

如果想设置画面水平一般会同时设置两个。当手机反转的时候,画面也可以随着反转。(没有设置锁定的情况下)

SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,DeviceOrientation.landscapeRight]);
复制代码

只有禁用多任务处理时,此设置才会在 iPad 上生效。

setEnabledSystemUIMode 设置全屏显示

用 manual 的方式可以指定显下面或下面的 overlay,或都不显示。

//都不显示,全屏
 SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,overlays: []);
 //显示上面
 SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,overlays: [SystemUiOverlay.top]);
 //显示下面
 SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,overlays: [SystemUiOverlay.bottom]);
复制代码

setSystemUIOverlayStyle 设置 overlay 样式,

overlay 的显示样式,比如可以显示 dark style

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
复制代码

android 有效,ios 可能没有效果。

如果有的设置没生效,可以重新启动 app 试试

全屏播放视频

如果要全屏播放视频可以做如下设置,横屏,并去掉 overlays。

SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,overlays: []);
 SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,DeviceOrientation.landscapeRight]);
复制代码

setSystemUIChangeCallback

只在 android  有效,SystemUiMode 设置 SystemUiMode.leanBackSystemUiMode.immersiveSystemUiMode.immersiveSticky 的时候, overlays 会随着与用户交互消失或出现,可以监听 setSystemUIChangeCallback 让 overlays 自动恢复原来的状态。

WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
SystemChrome.setSystemUIChangeCallback((systemOverlaysAreVisible) async {
  await Future.delayed(const Duration(seconds: 1));
  SystemChrome.restoreSystemUIOverlays();
});
复制代码

AnnotatedRegion

如果想控制 status bar 的样式还可以用 AnnotatedRegion,需要注意的是,使用 AnnotatedRegion 就不要使用 AppBar了,否则会被 AppBar了 覆盖。

AnnotatedRegion(
    child: Text('IAM17'),
    value: SystemUiOverlayStyle(
        statusBarColor: Colors.green,
        statusBarIconBrightness: Brightness.light,
        //底部navigationBar背景颜色
        systemNavigationBarColor: Colors.white),
  )


目录
相关文章
不用涉及到各种冲突常规打造酷炫下拉视差效果SmartRefreshLayout+ViewPager+RecyclerView
不用涉及到各种冲突常规打造酷炫下拉视差效果SmartRefreshLayout+ViewPager+RecyclerView
374 0
|
7月前
|
Ubuntu Java Linux
Linux 安装 Qualcomm ® SnapdragonTM Profiler
通过本文的详细介绍,您应该已经成功在 Linux 系统上安装并配置了 Qualcomm® Snapdragon™ Profiler,并能够连接 Android 设备进行性能分析。Snapdragon Profiler 提供了丰富的工具和功能,可以帮助开发者深入了解应用程序的性能瓶颈,从而进行优化。希望本文能对您有所帮助,让您在开发过程中更高效地使用 Snapdragon Profiler 进行性能分析和优化。
340 10
|
10月前
|
消息中间件 编解码 开发者
深入解析 Flutter兼容鸿蒙next全体生态的横竖屏适配与多屏协作兼容架构
本文深入探讨了 Flutter 在屏幕适配、横竖屏切换及多屏协作方面的兼容架构。介绍了 Flutter 的响应式布局、逻辑像素、方向感知、LayoutBuilder 等工具,以及如何通过 StreamBuilder 和 Provider 实现多屏数据同步。结合实际应用场景,如移动办公和教育应用,展示了 Flutter 的强大功能和灵活性。
423 6
|
10月前
|
前端开发 中间件 PHP
PHP框架深度解析:Laravel的魔力与实战应用####
【10月更文挑战第31天】 本文作为一篇技术深度好文,旨在揭开PHP领域璀璨明星——Laravel框架的神秘面纱。不同于常规摘要的概括性介绍,本文将直接以一段引人入胜的技术剖析开场,随后通过具体代码示例和实战案例,逐步引导读者领略Laravel在简化开发流程、提升代码质量及促进团队协作方面的卓越能力。无论你是PHP初学者渴望深入了解现代开发范式,还是经验丰富的开发者寻求优化项目架构的灵感,本文都将为你提供宝贵的见解与实践指导。 ####
|
JSON Java 数据库
Spring Boot中的全局异常处理
主要讲解了Spring Boot 的全局异常处理,包括异常信息的封装、异常信息的捕获和处理,以及在实际项目中,我们用到的自定义异常枚举类和业务异常的捕获与处理,在项目中运用的非常广泛,基本上每个项目中都需要做全局异常处理。
|
Android开发 iOS开发
Flutter中获取监听屏幕方向、锁定屏幕方向
Flutter中获取监听屏幕方向、锁定屏幕方向
456 2
|
安全 网络安全 开发工具
对象存储oss使用问题之flutter使用http库进行post请求文件上传返回400如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
688 1
|
机器学习/深度学习 算法
基于支持向量机SVM和MLP多层感知神经网络的数据预测matlab仿真
基于支持向量机SVM和MLP多层感知神经网络的数据预测matlab仿真
重识Flutter 用于解决复杂滑动视窗问题的Slivers - part1
在日常的开发工作中,仅仅使用ListView、ListView.builder等这样的滑动组件就能满足大部分的业务需求,但在碰到较为复杂的滑动页面时,我认为Slivers可以帮你更简单的实现。
重识Flutter  用于解决复杂滑动视窗问题的Slivers - part1