iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Flutter应用框架搭建屏幕适配的方法
  • 909
分享到

Flutter应用框架搭建屏幕适配的方法

2023-06-29 14:06:53 909人浏览 八月长安
摘要

本篇内容主要讲解“Flutter应用框架搭建屏幕适配的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter应用框架搭建屏幕适配的方法”吧!因移动设备的多样性,特别是 Android

本篇内容主要讲解“Flutter应用框架搭建屏幕适配的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter应用框架搭建屏幕适配的方法”吧!

因移动设备的多样性,特别是 Android 的碎片化严重,存在各种各样的分辨率,而 Flutter 跨平台开发又需同时支持 Android 和 iOS ,为尽可能的还原设计图效果提升用户体验,屏幕适配就势在必行了。

Flutter 暂时没有官方的屏幕适配方案,在 Flutter 项目开发中目前大部分的适配方案都是通过比例来进行适配,是一个通用的适配方法,该适配方法也在前端、Android、ioS、小程序等开发中广泛使用。

原理

UI 设计的时候一般会按照一个固定的尺寸进行设计,如 360 x 690 ,实际设备分辨率可能是 Google Pixel: 1080 x 1920 、Google Pixel XL: 1440 x 2560 、iPhone 12 Pro Max: 1284 x 2778 等等。开发时如果直接按照设计图写死数值则会出现最后实现的效果跟设计效果不一致的情况。这个时候就可以用比例的方式来进行适配。

将设计图分为固定单位并给这个单位定义一个标识,例如就叫 w,然后通过获取设备分辨率,使用设备真实宽度除以设计图宽度 ,就得到了 1w 代表的真实宽度:

1w = 设备真实宽度 / 设计图宽度

如设计图尺寸是 360 x 690 ,则宽度为 360w ,真实设备宽度为 1080 则 1w = 1080 / 360 = 3

根据上面的算法,得到对应设备的 1w 的真实宽度:

Google Pixel: 1w = 1080 / 360 = 3

Google Pixel XL: 1w = 1440 / 360 = 4

iPhone 12 Pro Max: 1w = 1284 / 360 = 3.57

按照同样的算法,可以给高度定义一个单位为 h , 得出对应设备的高度单位的真实值,如下:

Google Pixel: 1h = 1920 / 690 = 2.78

Google Pixel XL: 1h = 2560 / 690 = 3.71

iPhone 12 Pro Max: 1h = 2778 / 690 = 4.03

得到换算以后 wh 的真实值以后,开发过程中就可以使用其来设置 UI 控件的高、宽、间距等,使其最终呈现的效果无限接近设计图的效果。

开发过程中一般采用宽度来进行适配,控件高度要么自适应,要么也设置宽度的单位,然后整体高度根据内容自适应。但是如果有特殊需求也可以使用高度来进行适配,比如需求要求是 banner 占屏幕的 1/4 ,或者要求内容刚好一屏显示,这个时候设置控件的高度时就可以采用高度单位来进行适配。

基于上面的算法,在项目中就可以实现对应的适配方案了,但本着不重复造轮子的思想,项目开发中可以直接使用 flutter_screenutil 这个适配库。

flutter_screenutil

flutter_screenutil 就是基于上述比例适配原理而实现的屏幕适配库。 目前最新版本是 5.0.1,在 GitHub 上拥有 2.8k 的 star 。在 pub.dev 上拥有1536 个 like ,130 的 pub 指数, 99% 的人气,说明这是一个靠谱的轮子。

flutter_screenutil:让你的UI在不同尺寸的屏幕上都能显示合理的布局!

添加依赖

在项目根目录的 pubspec.yaml 中添加 flutter_screenutil 的依赖:

dependencies:  flutter:    sdk: flutter  # 添加依赖  flutter_screenutil: ^5.0.1

初始化

flutter_screenutil 提供了两种方式进行初始化:ScreenUtilInit 方式和 ScreenUtil.init 方式。首先在使用的地方导入包:

import 'package:flutter_screenutil/flutter_screenutil.dart';

ScreenUtilInit

使用 ScreenUtilInit 方式进行初始化,需要将项目的 MaterialApp 进行一层包裹,然后在 builder 中返回项目本身的 MaterialApp ,在 ScreenUtilInit 的 designSize 参数中传入设计图的尺寸,实现如下:

class MyApp extends StatelessWidget {  @override  Widget build(BuildContext context) {    return ScreenUtilInit(      designSize: Size(360, 690), //传入设计图尺寸      builder: () => MaterialApp(        ...      ),    );  }}

ScreenUtil.init

直接使用 ScreenUtil.init 方法,传入屏幕尺寸、设计图尺寸和屏幕方向即可对 flutter_screenutil 进行初始化,代码如下:

ScreenUtil.init(  BoxConstraints(    maxWidth: MediaQuery.of(context).size.width,  //屏幕宽度    maxHeight: MediaQuery.of(context).size.height, //屏幕高度  ),  designSize: const Size(360, 690), // 设计图尺寸  orientation: Orientation.portrait); // 屏幕方向

使用这种方式只需在使用 flutter_screenutil 前进行初始化即可,一般放在根路由即第一个页面加载的时候进行初始化。

注意:ScreenUtil.init 不能在 MyApp 中进行初始化,会报如下错误 No MediaQuery ancestor could be found starting from the context that was passed to MediaQuery.of(). This can happen because you have not added a WidgetsApp, CupertinoApp, or MaterialApp widget (those widgets introduce a MediaQuery), or it can happen if the context you use comes from a widget above those widgets. 因为这个时候还没加载 MaterialApp 无法使用 MediaQuery.of(context ) 获取到屏幕宽高

关于上面两种初始化方法,flutter_screenutil 作者推荐使用第二种方式。

使用

初始化以后就可以使用 flutter_screenutil 提供的方法获取到适配后的数值进行使用了。

可通过如下 api 获取宽高以及字体的适配数值:

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

传入的参数即为设计图上的大小。在实际使用中的示例如下:

Container(  width: ScreenUtil().setWidth(200),  height: ScreenUtil().setHeight(540),  child: Text("Hello", style: TextStyle(fontSize: ScreenUtil().setSp(24)),),);

这样即可使用适配的数值进行开发。

但发现这样写太麻烦了,为了获取一个适配的数值,要写一串的很长的代码。flutter_screenutil 提供了更简洁的调用方法,使用 Dart 扩展为 num 类型扩展了一系列属性可以方便开发者调用,上面的 api 可以通过扩展属性进行如下转换:

ScreenUtil().setWidth(540)  =>  540.hScreenUtil().setHeight(200) =>  200.wScreenUtil().radius(200)    =>  200.rScreenUtil().setSp(24)      =>  24.sp

修改后的使用示例如下:

Container(  width: 200.w,  height: 540.h,  child: Text("Hello", style: TextStyle(fontSize: 24.sp),),);

这样就简洁多了。

注意:根据前面讲解的适配原理知道,一般情况下 1.w != 1.h ,除非刚好屏幕分辨率比例与设计图比例一致,所以如果要设置正方形,切记使用相同的单位,如都设置相同的 w 或者 h ,否则可能显示为长方形。

除了上面 4 种扩展属性以外,还提供了 sm 以及 swsh

  • sm :取数值本身与 sp 的值最小的值,如 12.sm 则取 1212.sp 的值进行比较,取最小的值。

  • sw :screen width 的缩写,即屏幕宽度,作用是按屏幕宽度比例返回值。如 0.2.sw 则返回屏幕宽度的 20%,1.sw 则是整个屏幕宽度

  • sh :screen height 的缩写,及屏幕高度,作用与 sw 类似,返回指定比例的屏幕高度值。如 1.sh 为整个屏幕高度

使用 sp 作为字体单位,默认是会随着系统字体缩放进行变化,如果不想字体随着系统缩放而变化,可设置 textScaleFactor1.0 来实现。项目中可对 MaterialApp 进行全局设置或者对 Text 进行单独设置:

全局设置:

MaterialApp(        debugShowCheckedModeBanner: false,        title: 'Flutter_ScreenUtil',        theme: ThemeData(          primarySwatch: Colors.blue,        ),        builder: (context, widget) {          return MediaQuery(            ///设置文字大小不随系统设置改变            data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),            child: widget,          );        },        home: HomePage(title: 'FlutterScreenUtil Demo'),      ),

Text 单独设置:

Text("text", textScaleFactor: 1.0)

效果

附上官方效果图:

Flutter应用框架搭建屏幕适配的方法

Flutter应用框架搭建屏幕适配的方法

其他 Api

除了适配的 api 以外,flutter_screenutil 还提供了很多实用的 api ,如下 :

  • ScreenUtil().pixelRatio :设备的像素密度

  • ScreenUtil().screenWidth :屏幕宽度,等同于 1.sw

  • ScreenUtil().screenHeight :屏幕高度,等同于 1.sh

  • ScreenUtil().bottomBarHeight :底部导航高度,如全屏底部按键的高度

  • ScreenUtil().statusBarHeight :状态栏高度

  • ScreenUtil().textScaleFactor :系统字体缩放比例

  • ScreenUtil().scaleWidth :实际宽度与设计图宽度的比例

  • ScreenUtil().scaleHeight :实际高度与设计图高度的比例

  • ScreenUtil().orientation :屏幕方向

到此,相信大家对“Flutter应用框架搭建屏幕适配的方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Flutter应用框架搭建屏幕适配的方法

本文链接: https://www.lsjlt.com/news/325184.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter应用框架搭建屏幕适配的方法
    本篇内容主要讲解“Flutter应用框架搭建屏幕适配的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter应用框架搭建屏幕适配的方法”吧!因移动设备的多样性,特别是 Android ...
    99+
    2023-06-29
  • Flutter应用框架搭建之屏幕适配详解
    目录原理flutter_screenutil添加依赖初始化使用效果其他 Api因移动设备的多样性,特别是 Android 的碎片化严重,存在各种各样的分辨率,而 Flutter 跨平...
    99+
    2024-04-02
  • Android 简单好用的屏幕适配方案
    android中的dp在渲染前会将dp转为px,计算公式: px = density * dp; density = dpi / 160; px = dp ...
    99+
    2024-04-02
  • vue2-webpack2框架搭建的方法
    这篇文章主要介绍了vue2-webpack2框架搭建的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。react、vue、angular代...
    99+
    2024-04-02
  • Flutter应用框架运行微信小程序方法
    目录目前的疑惑为什么会存在这种情况一些解决思路的产生实操上手过程1、获取凭据2、集成插件3、Flutter API4、官方示例目前的疑惑 微信小程序发展的越来越快,目前小程序甚至取代...
    99+
    2023-02-09
    Flutter运行微信小程序 Flutter微信小程序
  • 框架标签与响应式设计:打造适合所有屏幕的网站
    框架标签 框架标签是一种 HTML 标签,用于在浏览器窗口中创建多个框架或区域。每个框架都可以包含自己的 HTML 文档,允许您创建具有不同布局和导航的复杂网站。 优点: 允许您创建复杂的布局和导航结构。 适用于需要特定布局的网站,例...
    99+
    2024-02-29
    框架标签、响应式设计、网络设计、屏幕尺寸、网站优化
  • HTML5移动页面自适应手机屏幕的方法有哪些
    今天小编给大家分享一下HTML5移动页面自适应手机屏幕的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2024-04-02
  • 持久层ORM框架Hibernate框架的使用及搭建方式
    目录前言一、Hibernate的优点?二、Hibernate的缺点三、搭建Hibernate项目架构四、Hibernate核心接口的介绍五、封装Hibernate的工具类六、常用的C...
    99+
    2024-04-02
  • vue移动端html5页面根据屏幕适配的方法有哪些
    这篇文章主要介绍“vue移动端html5页面根据屏幕适配的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue移动端html5页面根据屏幕适配的方法有哪些...
    99+
    2024-04-02
  • HTML5中移动页面自适应手机屏幕的方法有哪些
    这篇文章主要介绍了HTML5中移动页面自适应手机屏幕的方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、使用meta标签:view...
    99+
    2024-04-02
  • 使用gin框架搭建简易服务的实现方法
    go语言web框架挺多的,各有各的特点和风格。我之所以在项目中使用gin框架,是因为项目一开始是用的martini,一个设计得很好的框架,但是存在一个比较严重的问题,就是大量使用反射...
    99+
    2024-04-02
  • 如何使用Cmake来搭建跨平台的应用程序框架
    这篇文章主要介绍“如何使用Cmake来搭建跨平台的应用程序框架”,在日常操作中,相信很多人在如何使用Cmake来搭建跨平台的应用程序框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Cmake来搭建跨...
    99+
    2023-06-15
  • css列表滑动防止被底部遮住和适配屏幕的方法是什么
    这篇“css列表滑动防止被底部遮住和适配屏幕的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“css列表滑动防止被底...
    99+
    2023-07-04
  • C++ 函数指针与 Qt 框架:搭建灵活的 GUI 应用
    函数指针在 c++++ 和 qt 框架中的应用:函数指针允许将函数作为变量传递。qt 框架使用信号和槽机制,允许将函数指针分配给事件处理程序。可通过 connect() 函数将槽函数分配...
    99+
    2024-04-29
    c++ qt 点击事件
  • vue大屏自适应的实现方法(cv就能用)
    目录前言大屏第一步:先下包,这里用到lib-flexible和postcss-pxtorem第二步:在main.js引入第三步:修改lib-flexible源文件配置第四步:在vue...
    99+
    2024-04-02
  • ABP引入SqlSugar框架创建使用的方法
    这篇文章主要介绍了ABP引入SqlSugar框架创建使用的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ABP引入SqlSugar框架创建使用的方法文章都会有所收获,下面我们一起来看看吧。一 新建类库为了代...
    99+
    2023-06-30
  • Android应用中实现截取手机屏幕的方法有哪些
    这篇文章给大家介绍Android应用中实现截取手机屏幕的方法有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。方法1:首先想到的思路是利用SDK提供的View.getDrawingCache()方法: public ...
    99+
    2023-05-31
    android roi
  • C++中如何使用Cmake来搭建跨平台的应用程序框架
    这篇文章主要介绍了C++中如何使用Cmake来搭建跨平台的应用程序框架,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。示例代码说明1. 功能描...
    99+
    2024-04-02
  • struts框架的原理和应用方法是什么
    Struts框架是一个用于开发Java Web应用程序的MVC(模型-视图-控制器)框架。它提供了一种结构化的方式来组织和管理Web...
    99+
    2023-10-26
    struts
  • NumPy 框架的高效存储方式在 Go 中的应用方法?
    NumPy 框架是 Python 中最常用的科学计算库之一。它提供了高效的多维数组操作和广播功能,以及许多数学函数和统计方法。在大规模数据处理和机器学习领域,NumPy 框架被广泛应用。但是,当我们需要在其他语言中使用 NumPy 框架时,...
    99+
    2023-10-18
    存储 numy 框架
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作