Flutter横屏实践

这篇具有很好参考价值的文章主要介绍了Flutter横屏实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

flutter 横竖屏切换,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没有铺满

flutter 横竖屏切换,flutter

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

添加文章来源地址https://www.toymoban.com/news/detail-757943.html

<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下为普通页面配置

到了这里,关于Flutter横屏实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flutter开发实战-实现首页分类目录入口切换功能

    。 在开发中经常遇到首页的分类入口,如美团的美食团购、打车等入口,左右切换还可以分页更多展示。 在pubspec.yaml引入 由于我这里按照一页8条展示,两行四列展示格式。 当列表list传入的控件时候,一共的页数为 通过列表,一页数量计算每一页应该展示多少个按钮。 一

    2024年02月14日
    浏览(56)
  • Flutter动画库:animations(路由过渡动画或者页面切换动画)

    animations 是一个 Flutter 库,它提供了一组用于创建动画效果的工具和组件。 这个库的核心重点是路由过渡动画或者页面切换动画 地址 https://pub-web.flutter-io.cn/packages/animations 安装 看了下官方文档和官方例子,然后就有点懵。差点以为找错库了。还好flutter中的库可以直接点开(

    2024年02月16日
    浏览(48)
  • Flutter性能监控与优化实践

    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的,可以用一套代码同时构建Android和iOS应用,性能可以达到原生应用一样的

    2024年02月07日
    浏览(40)
  • Flutter 最佳实践和编码准则

    最佳实践是一套既定的准则,可以提高代码质量、可读性和可靠性。它们确保遵循行业标准,鼓励一致性,并促进开发人员之间的合作。通过遵循最佳实践,代码变得更容易理解、修改和调试,从而提高整体软件质量。 原文 https://ducafecat.com/blog/flutter-best-practices-and-coding-gui

    2024年02月15日
    浏览(47)
  • 【Flutter 工程】005-代码分离实践:flutter_hooks & functional_widget

    在Flutter开发中,“嵌套地狱”(Nesting Hell)是指在构建复杂的UI布局时,由于多层嵌套的组件结构,代码变得冗长、难以维护和理解的情况。 Flutter使用组件树的方式来构建用户界面,每个UI元素都是一个组件,可以包含其他组件。在某些情况下,特别是当需要实现复杂的布局

    2024年02月06日
    浏览(99)
  • flutter实践:Isolate应用实例二

    需求:尝试将Isolate封装一层便于直接使用 实现: 1.定义一个封装类 2.消息传递 在 Dart 中,Isolate 之间的消息传递是通过  SendPort  和  ReceivePort  来实现的。 SendPort  和  ReceivePort  是 Dart 中进行进程间通信的工具。 你可以通过  SendPort  发送消息,然后在对应的  ReceivePor

    2024年02月04日
    浏览(46)
  • Flutter性能优化实践 —— UI篇

    _clickable = false; } if (vCode.isEmpty || vCode.length 6) { _clickable = false; } if (password.isEmpty || password.length 6) { _clickable = false; } setState(() { }); } MyButton( onPressed: _clickable ? _register : null, text: ‘注册’, ) 其实这里可以优化一下。因为现在的每次输入都必定刷新,我们可以在 _clickable 参数有变化

    2024年04月27日
    浏览(31)
  • Flutter高仿微信-项目实践59篇

    Flutter高仿微信(支持Android和IOS系统) Flutter高仿微信主要包含5大模块: 1、Web服务器 2、Flutter客户端 3、Xmpp即时通讯服务器 4、视频通话服务器 5、腾讯云服务器 另外也有Kotlin版本高仿微信功能,Kotlin版本跟Flutter同时开发,调用的是同一个服务器接口。 六大模块都是我一个人从

    2024年02月02日
    浏览(38)
  • Flutter笔记:Web支持原理与实践

    Flutter笔记 Web支持原理与实践 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com CSDN:https://blog.csdn.net/qq_28550263/article/details/135037756 华为开发者社区:https://bbs.huaweicloud.com/blogs/418443 一个纯 Flutter 构建的 Web 示例站点(建设中): Flutter-Online Top http://

    2024年01月23日
    浏览(42)
  • Android 横竖屏切换

    1.横竖屏切换 Android横竖屏要注意的问题: ①布局问题 ②重新载入问题 ③生命周期问题   2.布局问题 ①如果不想让app在横竖屏之间切换,可以在AndroidManifest.xml中指定的activity中加上android:screenOrientation属性,有以下几个参数: \\\"unspecified\\\":默认值 由系统来判断显示方向。判定

    2023年04月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包