Flutter横屏实践

在这里插入图片描述

1、Flutter设置横屏

// 强制横屏
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft,DeviceOrientation.landscapeRight
]);
// 强制竖屏
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);

另外建议

1、把所有横竖屏调用封装到一个方法中,便于维护

2、开启放super后面,关闭放super前面


void initState() {super.initState();AppUtil().setScreenLandscape(true);
}
void dispose() {AppUtil().setScreenLandscape(false);super.dispose();
}

2、原生设置横屏

在实践过程中发现ios偶尔有横屏转不过来的现象,如果你也遇到了可以考虑原生设置横屏。

android原生

if (screenLandscape) {// 设置屏幕为横向activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {// 设置屏幕为纵向activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

如果需要相机、相册等系统应用也能横屏,可以打开允许自动旋转权限

// 检查是否打开自动屏幕旋转
public static boolean checkAutoRotate(Activity activity) {// android系统设置权限if (!Settings.System.canWrite(activity)) {activity.runOnUiThread(() -> Toast.makeText(activity, "请允许修改系统设置权限!", Toast.LENGTH_SHORT).show());// 没有系统设置权限 -> 跳转到系统设置页面new Thread(() -> {try {sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);intent.setData(Uri.parse("package:" + activity.getPackageName()));activity.startActivityForResult(intent, 1);}).start();return false;} else {// 有系统设置权限 -> 打开手机屏幕方向自动旋转(参数备注:1为开,0为关)Settings.System.putInt(activity.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1);return true;}
}

ios原生

NSDictionary *dict = call.arguments;
bool screenLandscape = [dict[@"screenLandscape"] boolValue];
UIInterfaceOrientation val = screenLandscape ? UIInterfaceOrientationLandscapeLeft : UIInterfaceOrientationPortrait;
[weakSelf ll_interfaceOrientation:val];
result([JYJUtils dictionaryToJson:@{}]);

3、横竖屏适配

横竖屏适配在flutter端实现,我这里只需要横屏,因此检测到竖屏会再次调用切换横屏

OrientationBuilder(builder: (context, orientation) {if (orientation == Orientation.portrait) {return PortraitPage();} else {return LandscapePage();}},
)// 竖屏
PortraitPage() {AppUtil().setScreenLandscape(true);return Column(mainAxisSize: MainAxisSize.max,children: [CustomBar(title: _titleString(longTitle: true),),Expanded(child: Center(child: Text('请旋转横屏使用'),),),],);
}// 横屏
LandscapePage() {final double statusBarHeight =Platform.isIOS ? 35 : MediaQuery.of(context).padding.top;return Container(margin: EdgeInsets.only(top: statusBarHeight, left: 30, right: 30),);
}

4、flutter 横屏android没有铺满

Screenshot_20231007_140001

解决办法
打开项目下android/app/src/main/res/values/styles.xml

添加

<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<?xml version="1.0" encoding="utf-8"?>
<resources><style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"><item name="android:windowBackground">@drawable/launch_background</item></style><style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"><item name="android:windowBackground">?android:colorBackground</item><item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item></style>
</resources>LaunchTheme下为启动页配置,NormalTheme下为普通页面配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128311.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试经典150 | 矩阵】旋转图像

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;原地旋转方法二&#xff1a;翻转代替旋转 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带…

【SpringBoot】文件分片上传、合并

背景 在上传大型文件时&#xff0c;一般采用的都是分片、断点续传等技术&#xff0c;这样不会导致因文件过大而造成系统超时或者过压等情况。 接下来我们进入教学 如果有帮助到您&#xff0c;麻烦请点击个收藏、赞&#xff0c;谢谢~ 一、实际效果图 整个前端网页的效果图&…

模块化编程+LCD1602调试工具——“51单片机”

各位CSDN的uu们你们好呀&#xff0c;小雅兰又来啦&#xff0c;刚刚学完静态数码管显示和动态数码管显示&#xff0c;感觉真不错呢&#xff0c;下面&#xff0c;小雅兰就要开始学习模块化编程以及LCD1602调试工具的知识了&#xff0c;让我们进入51单片机的世界吧&#xff01;&am…

37.普利姆(Prim)算法

从一个问题开始 “要想富&#xff0c;先修路”&#xff0c;郝乡长最近为了德胜乡修路的事情愁白了头。 得胜乡有A、B、C、D、E、F、G七个村子&#xff0c;现在需要修路把7个村庄连通&#xff0c;但是又想要耗费的公路建材最少&#xff08;修建公路的总里程最短&#xff09;&…

【Linux】TCP的服务端(守护进程) + 客户端

文章目录 &#x1f4d6; 前言1. 服务端基本结构1.1 类成员变量&#xff1a;1.2 头文件1.3 初始化&#xff1a;1.3 - 1 全双工与半双工1.3 - 2 inet_aton1.3 - 3 listen 2. 服务端运行接口2.1 accept&#xff1a;2.2 服务接口&#xff1a; 3. 客户端3.1 connect&#xff1a;3.2 …

条件查询和数据查询

一、后端 1.controller层 package com.like.controller;import com.like.common.CommonDto; import com.like.entity.User; import com.like.service.UserService; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.GetMapping; import …

文心一言 VS 讯飞星火 VS chatgpt (108)-- 算法导论10.1 6题

六、用go语言&#xff0c;说明如何用两个栈实现一个队列&#xff0c;并分析相关队列操作的运行时间。 文心一言&#xff1a; 使用两个栈实现队列的基本思想是利用一个栈&#xff08;stack1&#xff09;来处理入队操作&#xff0c;另一个栈&#xff08;stack2&#xff09;来处…

ELK集群 日志中心集群

ES&#xff1a;用来日志存储 Logstash:用来日志的搜集&#xff0c;进行日志格式转换并且传送给别人&#xff08;转发&#xff09; Kibana:主要用于日志的展示和分析 kafka Filebeat:搜集文件数据 es-1 本地解析 vi /etc/hosts scp /etc/hosts es-2:/etc/hosts scp /etc…

手机切换ip地址的几种方法详解

在某些情况下&#xff0c;我们可能需要切换手机的IP地址来实现一些特定的需求&#xff0c;如解决某些应用程序的限制、绕过IP封禁等。本文将为大家分享几种切换手机IP地址的方法&#xff0c;让您能够轻松应对各种需求。 一、使用动态服务器 使用动态服务器是一种常见的切换手机…

【Leetcode】 51. N 皇后

按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种…

分布式文件系统HDFS(林子雨慕课课程)

文章目录 3. 分布式文件系统HDFS3.1 分布式文件系统HDFS简介3.2 HDFS相关概念3.3 HDFS的体系结构3.4 HDFS的存储原理3.5 HDFS数据读写3.5.1 HDFS的读数据过程3.5.2 HDFS的写数据过程 3.6 HDFS编程实战 3. 分布式文件系统HDFS 3.1 分布式文件系统HDFS简介 HDFS就是解决海量数据…

基于springboot实现人职匹配推荐管理系统演示【项目源码+论文说明】分享

基于springboot实现人职匹配推荐管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于人职匹配推荐系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了…