当前位置: 首页 > news >正文

Flutter:屏幕适配

flutter_screenutil

flutter_screenutil是一个用于在Flutter应用程序中进行屏幕适配的工具包。它旨在帮助开发者在不同屏幕尺寸和密度的设备上创建响应式的UI布局。

`flutter_screenutil``提供了一些用于处理尺寸和间距的方法,使得开发者可以根据设备的屏幕尺寸和密度来动态调整UI元素的大小和位置。它提供了以下功能:

  • 屏幕适配:flutter_screenutil可以根据设备的屏幕尺寸和密度,将设计稿上的尺寸转换为适合当前设备的实际尺寸。这样,无论是在小屏幕手机上还是在大屏幕平板电脑上运行应用,UI元素都能正确地适配屏幕。

  • 尺寸适配:flutter_screenutil提供了setWidth()setHeight()方法,通过传入设计稿上的尺寸,可以根据设备的屏幕宽度进行动态调整,返回适配后的实际宽度。

  • 字体适配:flutter_screenutil提供了setSp()方法,可以根据设备的屏幕密度进行字体大小的适配。通过传入设计稿上的字体大小,可以根据当前设备的屏幕密度动态调整字体大小。

官方文档
https://pub-web.flutter-io.cn/packages/flutter_screenutil

安装

flutter pub add flutter_screenutil

原理

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

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

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

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

示例

class MyApp extends StatelessWidget {const MyApp({super.key});// This widget is the root of your application.Widget build(BuildContext context) {return ScreenUtilInit(// 设计尺寸designSize: const Size(360, 690),// 是否根据最小宽度和高度调整文本minTextAdapt: true,builder: (context, child) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),useMaterial3: true,),home: child,);},child: const MyHomePage(title: '适配'),);}
}class MyHomePage extends StatefulWidget {const MyHomePage({super.key, required this.title});final String title;State<MyHomePage> createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(backgroundColor: Theme.of(context).colorScheme.inversePrimary,title: Text(widget.title),),body: Column(children: [Container(width: 200,height: 200,color: Colors.red,child: const Text("适配后的的尺寸",style: TextStyle(fontSize: 20, color: Colors.white),),),const SizedBox(height: 20,),Container(width: ScreenUtil().setWidth(200),height: ScreenUtil().setWidth(200),color: Colors.blue,child: Text("适配后的的尺寸",style: TextStyle(fontSize: ScreenUtil().setSp(20), color: Colors.white),),),],),);}
}

在这里插入图片描述

常用方法

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 ,否则可能显示为长方形。

相关文章:

Flutter:屏幕适配

flutter_screenutil flutter_screenutil是一个用于在Flutter应用程序中进行屏幕适配的工具包。它旨在帮助开发者在不同屏幕尺寸和密度的设备上创建响应式的UI布局。 flutter_screenutil提供了一些用于处理尺寸和间距的方法&#xff0c;使得开发者可以根据设备的屏幕尺寸和密度…...

中科亿海微ROM使用

标题 ROM&#xff08;Read-Only Memory&#xff0c;只读存储器&#xff09;是一种在FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;中常用的存储器类型。与RAM&#xff08;Random Access Memory&#xff0c;机存取存储器&#xff09;…...

Python接口自动化测试之UnitTest详解

基本概念 UnitTest单元测试框架是受到JUnit的启发&#xff0c;与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化&#xff0c;配置共享和关机代码测试。支持将测试样例聚合到测试集中&#xff0c;并将测试与报告框架独立。 它分为四个部分test fixture、TestC…...

python——案例17:判断某年是否是闰年

案例17&#xff1a;判断某年是否是闰年 判断依据&#xff1a;闰年就是能被400整除&#xff0c;或者能被4整除的年份numint(input(输入年份&#xff1a;))if num%1000: if num%4000: #整百年份的判断print("%s年是闰年"%num) #…...

allure测试报告

使用pytest结合Allure进行测试报告生成的简单教程 allure测试报告 Allure基于Java开发&#xff0c;因此我们需要提前安装Java 8或以上版本的环境。 ◆安装allure-pytest插件在DOS窗口输入命令“pip3 install allure-pytest”&#xff0c;然后按“Enter”键。 下载安装Allure…...

Vue 路由懒加载

Vue 路由懒加载 随着 Web 应用的复杂性不断增加&#xff0c;性能优化成为了开发人员必须面对的挑战之一。Vue 路由懒加载是一项关键技术&#xff0c;它可以帮助我们提高 Web 应用的加载速度&#xff0c;从而提升用户体验。 在本篇技术博文中&#xff0c;我们将深入探讨 Vue 路…...

软件设计师(七)面向对象技术

面向对象&#xff1a; Object-Oriented&#xff0c; 是一种以客观世界中的对象为中心的开发方法。 面向对象方法有Booch方法、Coad方法和OMT方法等。推出了同一建模语言UML。 面向对象方法包括面向对象分析、面向对象设计和面向对象实现。 一、面向对象基础 1、面向对象的基本…...

Qt中将信号封装在一个继承类中的方法

QLabel标签类对应的信号如下&#xff1a; Qt中标签是没有双击&#xff08;double Click&#xff09;这个信号的&#xff1b; 需求一&#xff1a;若想双击标签使其能够改变标签中文字的内容&#xff0c;那么就需要自定义一个“双击”信号&#xff0c;并将其封装在QLabel类的派生…...

Docker介绍

1. docker是什么 1.1 为什么会有docker出现&#xff1f; 假设你在开发一个项目的时候&#xff0c;你使用的是windows系统而且你的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。你正在开发的应用依赖于你当前的配置而且还要依赖于某些配置文件。此外&#xf…...

C++红黑树

一、红黑树的概念 红黑树是一种二叉搜索树&#xff0c;在其每个节点上增加一个存储位用于表示节点的颜色&#xff0c;可以是Red或Black 通过对任何一条从根到叶子的路径上的各个节点着色方式的限制&#xff0c;红黑树确保没有一条路径比其他路径长两倍 红黑树的性质&#xff…...

LangChain与大模型的学习ing

大模型的菜鸟初学习 一、问题记录1、库的版本问题 二、实例记录1、公司名生成2、提示模板的使用3、LLM Chain4、LLMMemory5、聊天语言API 参考资料 一、问题记录 1、库的版本问题 openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(ho…...

Go把Map转成对象

最近使用了Redis的Hash&#xff0c;把一个对象给存储到了hash里面&#xff0c;具体如下&#xff1a; 现在需要从RedisHash缓存里面把结果给取出来&#xff0c;同时赋值到一个对象上面 result, err : global.GVA_REDIS.HGetAll(context.Background(), key).Result() 问题是resul…...

Java-网络编程

TCP TCP&#xff08;Transmission Control Protocol&#xff09;是一种在计算机网络中用于可靠数据传输的协议。它是一种面向连接的协议&#xff0c;确保数据在发送和接收之间的可靠性和有序性。以下是TCP是如何工作的简要概述&#xff1a; 建立连接&#xff1a; 当两台计算机…...

[数据集][目标检测]道路坑洼目标检测数据集VOC格式1510张2类别

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1510 标注数量(xml文件个数)&#xff1a;1510 标注类别数&#xff1a;2 标注类别名称:["keng","…...

全网最详细,Pytest自动化测试框架-Fixture固件实战,你要的都有...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是固件 Fixt…...

React 入门学习

React 入门 一、基本认识1.1、前言1.2、什么是1.3、编译<br>1.4、特点1.5、高效 二、React环境和基本使用2.1、环境搭建2.2、脚手架项目基本使用2.2.1、src2.2.2、public2.2.3、package.json 三、JSX的理解和使用四、模块与模块化, 组件与组件化的理解4.1、模块与组件4.2…...

VMware vCenter 6.5 断电后无法启动修复方案

目录 第1章 前言 第2章 问题现象 第3章 解决方案 第4章、Tips 第1章 前言 本文主要介绍VMware vcsa 6.5由于电源异常/存储异常之后无法启动&#xff0c;进入磁盘自检模式处理方法。&#xff08;最近遇到类似情况比较多&#xff0c;Citrix Xenserver也遇到了&#xff0c;后来…...

c++ STL--算法,迭代器,容器适配器,仿函数

c STL–算法&#xff0c;迭代器&#xff0c;容器适配器&#xff0c;仿函数 一.算法 1.使用的头文件为 #include<algorithm>//以这个头文件为主 #include<numeric>2.关于算法一些功能的使用 1.遍历 void fun1(int x) {cout << x << " "…...

springcloud3 bus+springconfig 实现配置文件的动态刷新(了解)

一 springcloud Bus的作用 1.1 springcloud的作用 spring cloud bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架。 它整合了java的事件处理机制和消息中间件的功能。其中目前支持RabbitMQ和kafka 简介&#xff1a; bus实现多个服务的配置文件动态刷新。 1.2 …...

SpringMVC的架构有什么优势?——视图与模型(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

Step3-VL-10B-Base模型部署避坑指南:解决C盘空间不足与依赖冲突

Step3-VL-10B-Base模型部署避坑指南&#xff1a;解决C盘空间不足与依赖冲突 最近有不少朋友在尝试部署Step3-VL-10B-Base这个视觉语言大模型时&#xff0c;遇到了两个特别头疼的问题。一个是刚跑起来没多久&#xff0c;C盘就飘红了&#xff0c;系统提示空间不足&#xff1b;另…...

2026 软著申请全流程手把手教程|纯干货、自主申请高通过率指南

本文为纯技术流程教学&#xff0c;基于软件开发企业实操经验整理&#xff0c;适2026年3月版权中心改革后的审核标准&#xff0c;手把手教你自主完成软著申请&#xff0c;避开 90% 的新手坑。 重要前提&#xff1a; 1. 2026年3月版权中心强化材料审核&#xff0c;套模板申请必…...

AI创作利器:Harness+OpenClaw+CLI实战

我将主要围绕您提到的 Harness、OpenClaw 和 CLI 这三个核心概念&#xff0c;结合参考资料&#xff0c;为您拆解如何利用它们进行技术创作&#xff0c;并提供具体、可操作的代码示例。一、 核心概念解构&#xff1a;理解赋能创作的三大引擎在2026年的AI技术背景下&#xff0c;这…...

用TranslateGemma搭建私有翻译系统:数据安全,响应快速,效果稳定

用TranslateGemma搭建私有翻译系统&#xff1a;数据安全&#xff0c;响应快速&#xff0c;效果稳定 1. 为什么选择本地化翻译系统&#xff1f; 在当今全球化的工作环境中&#xff0c;高效准确的翻译工具已成为刚需。然而&#xff0c;传统的云端翻译服务存在几个关键痛点&…...

算法训练营第二天

题目链接 https://leetcode.cn/problems/binary-search/ 视频链接 https://www.bilibili.com/video/BV1fA4y1o715 刚看到题目&#xff0c;感觉今天的有点难哦&#xff01; 心得体会&#xff1a;难不重要&#xff0c;进步最重要&#xff01;加油&#xff01;&#xff01;...

高端局!追觅电视多项首创技术斩获10+国际国内大奖,实力封神

近期&#xff0c;追觅电视交出亮眼业绩成绩单&#xff0c;全球累计出货、专利申请、国际大奖等多项数据表现突出&#xff1b;同时&#xff0c;品牌集中推出五大全球首创及首发技术&#xff0c;将画质、护眼、动态声擎等可感知创新落地为产品体验&#xff0c;完美呼应“技术业绩…...

为什么用户越来越依赖IT服务台?从工单系统看企业效率被“反向放大”的问题

一、一个被忽视的变化&#xff1a;用户越来越“离不开IT”在很多企业的日常运营中&#xff0c;有一个变化正在悄悄发生&#xff0c;但却很少被系统性分析。那就是&#xff1a;业务部门对IT服务台的依赖程度&#xff0c;正在持续上升。最初&#xff0c;IT服务台的设立&#xff0…...

RTOS核心原理解析

目录 一、 RTOS核心原理架构 二、 核心原理详解 1. 任务管理与调度&#xff1a;从“顺序执行”到“并发执行” 2. 中断处理&#xff1a;快速响应与任务解耦 3. 任务间通信与同步&#xff1a;协调多任务有序工作 4. 时间管理与低功耗 三、 RTOS带来的优势与挑战 参考来源…...

卫星通信是利用地球同步卫星作为中继站转发微波信号,实现地面站之间远距离通信的技术

卫星通信是利用地球同步卫星作为中继站转发微波信号&#xff0c;实现地面站之间远距离通信的技术。其核心特点包括&#xff1a; 覆盖范围广&#xff1a;一颗同步卫星可覆盖地球表面1/3以上区域&#xff0c;3颗卫星即可实现全球通信信道特性&#xff1a;采用频分多路复用技术将信…...

Source Sans 3 字体完整指南:9种字重与可变字体技术深度解析

Source Sans 3 字体完整指南&#xff1a;9种字重与可变字体技术深度解析 【免费下载链接】source-sans Sans serif font family for user interface environments 项目地址: https://gitcode.com/gh_mirrors/so/source-sans Source Sans 3 是Adobe开发的一款专业开源无衬…...