Flutter SystemChrome使用方法详解

目录
  • 引言
  • setPreferredOrientations 设置横屏或坚屏
  • setEnabledSystemUIMode 设置全屏显示
  • setSystemUIOverlayStyle 设置 overlay 样式,
  • 全屏播放视频
  • setSystemUIChangeCallback
  • AnnotatedRegion

引言

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.leanBack 或 SystemUiMode.immersive 或 SystemUiMode.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),
  )

以上就是Flutter SystemChrome使用方法详解的详细内容,更多关于Flutter SystemChrome使用的资料请关注我们其它相关文章!

(0)

相关推荐

  • Flutter Widget开发Shortcuts快捷键实例

    目录 正文 ShortcutActivators到Intents的映射 想要捕获Control + C ? 正文 Flutter所提供的键盘快捷键系统直接用就很棒了,而且还提供了大量的空间可根据自己的喜好配置操作,之前那一篇博客介绍了小部件Focus 它会指示Flutter以你的应用来包裹键盘事件,以寻找匹配的Shortcuts小部件,这便会带入Shortcuts小部件. ShortcutActivators到Intents的映射 上一篇博客,我们以Accordion属性所假想的小部件树,挑个你

  • Flutter Widget开发之Focus组件图文详解

    目录 正文 FocusNode对象 小部件树向上传送时会起到怎样的作用呢 正文 就网络和应用程序而言,键盘快捷键很重要,今天我们要谈的便是让这类快捷键得以在Flutter运作的小部件:Focus.Shortcuts和Action. 这套系统中的第一个小部件是Focus,小部件树中到处都有它的踪迹,包括按钮个文本输入在内之类的用户界面交互区块 FocusNode对象 这个小部件还包含FocusNode对象 Focus({ FocusNode? node, Widget? child, }) : n

  • Flutter开发技巧ListView去除水波纹方法示例

    正文 ScrollConfiguration( behavior: NoScrollBehaviorWidget(), child: ListView( ...... ...... ), ), 调用ScrollConfiguration官方类,实现behavior NoScrollBehaviorWidget用于去除水波纹的自定义Widget import 'package:flutter/material.dart'; /// 去除listview水印 /// ScrollConfigurat

  • Flutter TV Android端开发技巧详细教程

    目录 前言 开发思路 先上效果 开发细节 使用RawKeyboardListener Provider层对事件进行处理 注意 总结 文件参考 TV keyCode详解 前言 最近公司有了新的业务,把现有Flutter Android项目应用到TV上去,这不,Asscre的活就来了. 本文详细说明Flutter for TV的两种实现方式,能力有限,不足之处欢迎指点,哈哈哈 开发思路 在开发之前,我们先设定一下我们的思路. 即,如何对原有程序代码侵入式最小.性能最佳.可玩性更高做出设定. 那么,通

  • Flutter CustomPaint绘制widget使用示例

    目录 CustomPaint 介绍 使用 CustomPaint size 的大小. isComplex willChange foregroundPainter 动画 CustomPaint 介绍 Flutter CustomPaint 提供了一个 canvas,可以在绘制阶段在上面进行绘制内容. 需要绘制时,CustomPaint 首先要求它的 painter 在当前画布上绘画,然后它绘画它的 child,在绘画完它的 child 之后,要求他的 foregroundPainter 绘画.

  • SafeList in Flutter and Dart小技巧

    目录 正文 封装一个SafeList 测试一下 正文 最近遇到一些列表的错误,例如,列表为空时直接调用方法会报错. 一般都会在使用前判断列表是否为空,再使用. 虽然Flutter提供了Null safety,但是用的时候还是会忘记或者忽略,直接使用'!'来跳过非空判断. 封装一个SafeList 代码如下: class SafeList<T> extends ListBase<T> { final List<T> _list; final T defaultValue;

  • Flutter Dart快速排序算法示例详解

    目录 引言 快速排序算法 分治法(Divide and conquer) 快速排序算法实现 引言 在日常研发的过程中,我们无时无刻都在考虑自己开发的程序是否高效,一段好的程序执行离不开对算法的深刻认识和熟练掌握.接下来的日子,我将带着大家一起重温一下常见的几种算法. 先上大图: 下面我们一起来学习一下 快速排序算法 吧! 快速排序算法 维基百科介绍: 快速排序使用分治法(Divide and conquer)策略來把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列,最终合

  • Flutter SystemChrome使用方法详解

    目录 引言 setPreferredOrientations 设置横屏或坚屏 setEnabledSystemUIMode 设置全屏显示 setSystemUIOverlayStyle 设置 overlay 样式, 全屏播放视频 setSystemUIChangeCallback AnnotatedRegion 引言 SystemChrome 控制操作系统图形界面的特定方面以及它如何与应用程序交互. 需要注意的是在使用的时候一定要保证先执行 WidgetsFlutterBinding.ensur

  • Android Flutter实现GIF动画效果的方法详解

    目录 前言 交错动画机制 代码实现 Interval 介绍 总结 前言 我们之前介绍了不少有关动画的篇章.前面介绍的动画都是只有一个动画效果,那如果我们想对某个组件实现一组动效,比如下面的效果,该怎么办? staggered animation 这个时候我们需要用到组合动效, Flutter 提供了交错动画(Staggered Animation)的方式实现.对于多个 Anmation 对象,可以共用一个 AnimationController,然后在不同的时间段执行动画效果.这就有点像 GIF

  • Flutter Widget 之StatefulBuilder构建方法详解

    目录 正文 性能问题解决 正文 你曾否意识到你需要拆分一个大型的构建方法,但又觉得这听起来很费劲? 试试StatefulBuilder 以最小的代价获得一个个单独的小部件的所有性能 想象一下,这样的一个小部件,有一个可以切换单一标志的便宜的子部件,然后是一个昂贵的小部件. 除非绝对必要,否则你不会想要重建它 bool isExpanded = false; Widget build(context) { return Column( children: [ InexpendsiveStatefu

  • Flutter实现手势识别功能详解方法

    目录 GestureDetector 点击事件 双击事件 长按事件 水平/垂直拖动事件 缩放事件 InkWell Ink Listener 案例 GestureDetector GestureDetector 是手势识别的组件,可以识别点击.双击.长按事件.拖动.缩放等手势 点击事件 点击相关事件包括: onTapDown:按下时回调. onTapUp:抬起时回调. onTap:点击事件回调. onTapCancel:点击取消事件回调. 按下然后抬起调用顺序 onTapDown-> onTapU

  • Jetpack Compose实现动画效果的方法详解

    目录 概述 低级别动画API animate*AsState 使用Animatable实现颜色变化效果 使用updateTransition实现颜色和圆角动画 rememberInfiniteTransition TargetBasedAnimation 自定义动画 AnimationSpec Easing AnimationVector 高级动画 概述 compose 为支持动画提供了大量的 api,通过这些 api 我们可以轻松实现动画效果 ps:这些 api 的原理与 Flutter 很接

  • Android ListView列表优化的方法详解

    目录 前言 优化点1:使用 builder构建列表 优化点2:禁用 addAutomaticKeepAlives 和 addRepaintBoundaries 特性 优化点3:尽可能将列表元素中不变的组件使用 const 修饰 优化点4:使用 itemExtent 确定列表元素滚动方向的尺寸 优化实例 总结 前言 列表 ListView 是应用中最为常见的组件,而列表往往也会承载很多元素,当元素多,尤其是那种图片文件比较大的场合,就可能会导致列表卡顿,严重的时候可能导致应用崩溃.本篇来介绍如何优

  • Android Flutter绘制扇形图详解

    目录 简介 CustomPaint介绍 CustomPainter介绍 paint介绍 shouldRepaint介绍 示例 使用CustomPaint 自定义Painter 绘制 触摸事件处理 动画实现 简介 在开发过程中通常会遇到一些不规则的UI,比如不规则的线条,多边形,统计图表等等,用那些通用组件通过组合的方式无法进行实现,这就需要我们自己进行绘制.可以通过使用CuntomPaint组件并结合画笔CustomPainter去进行手动绘制各种图形. CustomPaint介绍 Custom

  • 利用Android实现光影流动特效的方法详解

    目录 前言 MaskFilter 类简介 MaskFilter 的几种效果对比 光影流动 光影流动效果1 光影流动效果2 光影流动效果3 光影流动效果4:光影沿贝塞尔曲线流动 总结 前言 Flutter 的画笔类 Paint 提供了很多图形绘制的配置属性,来供我们绘制更丰富多彩的图形.前面几篇我们介绍了 shader 属性来绘制全屏渐变的聊天气泡背景.渐变流动的边框和毛玻璃效果的背景图片,具体可以参考下面几篇文章. 让你的聊天气泡丰富多彩! 手把手教你实现一个流动的渐变色边框 利用光影变化构建立

  • Flutter异步操作实现流程详解

    目录 一.FutureBuilder 二.StreamBuilder 在Flutter中,借助 FutureBuilder 组件和 StreamBuilder 组件,可以非常方便地完成异步操作. 一.FutureBuilder 在讲解FutureBuilder之前,你首先要知道Future是什么,了解了这个,后面再了解该组件就轻松许多. 在不同的编程语言中会有不同的名词来定义,在Dart语言中 选择使用Future类型配合async.await关键字来实现异步支持. Future 表示一个现在不

  • go打包aar及flutter调用aar流程详解

    目录 一.目的 二.背景 三.流程 问题: 问题一:go如何打包为移动端的包 1.环境配置 2.go配置与打包 问题二:flutter如何调用aar 第一步:存放aar与修改gradle配置 第二步:修改MainActivity.java入口代码 第三步:flutter调用 四.结论 一.目的 本篇文章的目的是记录本人使用flutter加载与调用第三方aar包. 二.背景 本人go后端,业余时间喜欢玩玩flutter.一直有一个想法,go可以编译为第三方平台的可执行程序,而flutter可以是一

随机推荐