Flutter屏幕适配

news/2024/10/21 5:34:29/

文章目录

  • 一、Flutter单位
  • 二、设备信息
  • 三、常见适配方案
  • 四、flutter_screenutil

一、Flutter单位

Flutter使用的是类似IOS中的点pt(point)。
iPhone6的尺寸是375x667,分辨率为750x1334。
iPhone6的dpr( devicePixelRatio ) 是2.0。

DPR = 物理像素 / 逻辑像素

二、设备信息

通过MediaQuery获取屏幕上的信息。

// 1. 媒体查询信息
final mediaQuery = MediaQuery.of(context);
// 2. 获取宽度和高度
final screenWidth = mediaQuery .size.width;
final screenHeight = mediaQuery .size.heigth;
// 3. 状态栏信息
final statusBarHeigth = mediaQuery .padding.top;
final bottomHeight =    mediaQuery .padding.bottom;

三、常见适配方案

  1. rem
    rem是给根标签( HTML标签 )设置一个字体大小,其他所有的单位都使用rem单位(相对于根标签)。
    浏览器默认的font-size值为16px。
    可以通过更改根元素的大小,调整所有字体大小。

  2. vw、vh
    vw和vh是将屏幕分成100等分,1个vw相当于是1%的大小。
    基于视图窗口的单位。

    • vmin: 选取vw和vh中最小的那个,在手机竖屏时,1vmin = 1vw
    • vmax: 选取vw和vh中最大的那个,在手机竖屏时,1vmax = 1vh
  3. rpx
    rpx是小程序中适配的方案,将750px作为设计稿, 1rpx = 屏幕宽度/750

安全区域适配
在一些手机中,顶部有刘海、摄像头等,底部有话筒等,这些位置不能填充组件,有被阻挡的风险

全面屏适配

  • 在页面中使用了 Scaffold 的 appBar 和 bottomNavigationBar,Scaffold 框架会自动按照全面屏的机制进行适配 ,不需要开发者进行手动配置。
  • 如果页面中没有使用 Scaffold , 或者使用了 Scaffold没有使用appBar和bottomNavigationBar,这样顶部导航栏偏上,底部导航栏偏下,这里需要适配一下。可以使用 MediaQuery.of(context).padding 获取屏幕四个方向上的 Padding,然后进行适配。

四、flutter_screenutil

使用pub.dev上的第三方插件库flutter_screenutil实现屏幕的适配。
https://pub.dev/packages/flutter_screenutil

flutter_screenutil介绍
[图片]
flutter_screenutil库的功能

  • 屏幕适配:flutter_screenutil可以根据设备的屏幕尺寸和密度,将设计稿上的尺寸转换为适合当前设备的实际尺寸。这样,无论是在小屏幕手机上还是在大屏幕平板电脑上运行应用,UI元素都能正确地适配屏幕。
  • 尺寸适配:flutter_screenutil提供了setWidth()setHeight()方法,通过传入设计稿上的尺寸,可以根据设备的屏幕宽度进行动态调整,返回适配后的实际宽度。
  • 字体适配:flutter_screenutil提供了setSp()方法,可以根据设备的屏幕密度进行字体大小的适配。通过传入设计稿上的字体大小,可以根据当前设备的屏幕密度动态调整字体大小。

flutter_screenutil使用
[图片]

flutter packages get

flutter_screenutil api
[图片]

ScreenUtil.init( context, designSize:const Size(375,667));
ScreenUtil().setWidth(xxx);

常用的api

ScreenUtil().setWidth(540)  //根据屏幕宽度适配尺寸
ScreenUtil().setHeight(200) //根据屏幕高度适配尺寸(一般根据宽度适配即可)
ScreenUtil().radius(200)    //根据宽度或高度中的较小者进行调整
ScreenUtil().setSp(24)      //字体大小适配
// 简写方式
ScreenUtil().setWidth(540)  =>  540.h
ScreenUtil().setHeight(200) =>  200.w
ScreenUtil().radius(200)    =>  200.r
ScreenUtil().setSp(24)      =>  24.sp

一般情况下1.w != 1.h,除非刚好屏幕分辨率比例与设计图比例一致。如果要设置为正方形,要使用相同的单位( 同为w或者同为h ), 否则可能显示为长方形。


http://www.ppmy.cn/news/1192841.html

相关文章

Tuna: Instruction Tuning using Feedback from Large Language Models

本文是LLM系列文章,针对《Tuna: Instruction Tuning using Feedback from Large Language Models》的翻译。 Tuna:使用来自大型语言模型的反馈的指令调优 摘要1 引言2 方法3 实验4 相关工作5 结论局限性 摘要 使用更强大的LLM(如Instruction GPT和GPT-…

京东科技埋点数据治理和平台建设实践 | 京东云技术团队

导读 本文核心内容聚焦为什么要埋点治理、埋点治理的方法论和实践、奇点一站式埋点管理平台的建设和创新功能。读者可以从全局角度深入了解埋点、埋点治理的整体思路和实践方法,落地的埋点工具和创新功能都有较高的实用参考价值。遵循埋点治理的方法论,…

01【保姆级】-GO语言特点 下载安装 hello

01-GO语言基本概念和安装使用 一、概念1.1 Go语言的诞生1.2 GO语言的特点: 二、安装go2.1 安装2.2 安装环境变量 三、下载&安装goland3.1 官网下载3.2 下载后,进行安装: 四、Go语言的特性(重点)4.1 第一个hello wo…

Unity热更新

1,热更新的概念与作用 app更新通常分为两类,一种是整包更新(换包),一种是热更新(不换包,通过网络下载,动态更新资源等)。 整包更新,是指在需要更新时&#x…

CSS以及JavaScript

目录 一.CSS 1.overflow溢出属性 2.定位 二.JavaScript基础 1.JavaScript引入方式 2.JavaScript数据类型 常用方法: 字符串常用方法: 在js里,什么是真,什么是假 数组的常用方法 运算符 (1)算数运…

ARM版CentOS Linux系统镜像安装教程

Linux系统受程序员钟爱,目前国内常见版本有Ubuntu和CentOS等,CentOS是较为稳定的Linux系统。如何在苹果电脑上安装Linux系统呢,小编为大家准备了ARM版CentOS Linux系统镜像文件资源,一起来看看吧! ARM版CentOS Linux系…

常用的vue UI组件库

背景:Vue.js 是一个渐进式 javascript 框架,用于构建 UIS(用户界面)和 SPA(单页应用程序)。UI 组件库的出现提高了我们的开发效率,增强了应用的整体外观、感觉、交互性和可访问性,下…

The 2021 China Collegiate Programming Contest (Harbin) J B I D

Dashboard - The 2021 China Collegiate Programming Contest (Harbin) - Codeforces J 给一个n * m的矩阵,求该矩阵中有少个数既是改行最小,也是该列最小的。 数据范围是1000,可以先预处理行、列最小值,之后挨个判断是不是行最…