Flutter 第三方 flutter_screenutil(屏幕适配)
一直觉得自己写的不是技术而是情怀一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的希望我的这条路能让你们少走弯路希望我能帮你们抹去知识的蒙尘希望我能帮你们理清知识的脉络希望未来技术之巅上有你们也有我。推荐一篇写的非常不过的文章(别人写的文章):Flutter应用框架搭建(二)屏幕适配该SDK的使用,在屏幕上设置了一个宽高的参考值,例如(1242,2208),那么屏幕中约束的控件的设置的数值(例如:414.w),都是按照(1242,2208)进行比例计算的,看下面图片就明白了安装导入flutter_screenutil:^5.9.0import package:flutter_screenutil/flutter_screenutil.dart;举例iPhone 12 mini初始化初始化 -推荐设置方式1page页面单独设置ScreenUtil.init可以在每个页面设置class MyApp extends StatelessWidget{override Widgetbuild(BuildContext context){returnMaterialApp(debugShowCheckedModeBanner:false,title:Flutter_ScreenUtil,theme:ThemeData(primarySwatch:Colors.blue,),home:HomePage(title:FlutterScreenUtil Demo),);}}class HomePage extends StatefulWidget{constHomePage({Key key,this.title}):super(key:key);final String title;override _HomePageStatecreateState()_HomePageState();}class _HomePageState extends StateHomePage{override Widgetbuild(BuildContext context){//设置尺寸填写设计中设备的屏幕尺寸如果设计基于360dp * 690dp的屏幕ScreenUtil.init(context,designSize:constSize(360,690));...}}使用这种方式只需在使用 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 作者推荐使用第二种方式。初始化 - 设置方式2main设置ScreenUtilInitclass MyApp extends StatelessWidget{constMyApp({super.key});override Widgetbuild(BuildContext context){returnScreenUtilInit(designSize:constSize(750,1334),// iphone6 750 1334 iphone 12 mini 1080 2340minTextAdapt:true,splitScreenMode:true,builder:(_,child){returnMaterialApp(debugShowCheckedModeBanner:false,title:First Method,// You can use the library anywhere in the app even in themetheme:ThemeData(primarySwatch:Colors.blue,textTheme:Typography.englishLike2018.apply(fontSizeFactor:1.sp),),// home: child,initialRoute:Home.routeName,routes:{Home.routeName:(context)Home(),},);},// child: Home(),);}}使用doublescreenWidthMediaQuery.of(context).size.width;doublescreenHeightMediaQuery.of(context).size.height;print(系统宽: $screenWidth);//375.0print(系统高: $screenHeight);//812.0doubleutilWidthScreenUtil().screenWidth;doubleutilHeightScreenUtil().screenHeight;print(ScreenUtil宽: $utilWidth);//设备宽度 375.0print(ScreenUtil高: $utilHeight);//设备高度 812.0doublepixelRatioScreenUtil().pixelRatio??0.0;print(pixelRatio $pixelRatio);//设备的像素密度 3.0doublebottomBarHeightScreenUtil().bottomBarHeight;print(bottomBarHeight $bottomBarHeight);//底部安全区距离适用于全面屏下面有按键的 34.0doublestatusBarHeightScreenUtil().statusBarHeight;print(statusBarHeight $statusBarHeight);//状态栏高度 刘海屏会更高 50.0doubletextScaleFactorScreenUtil().textScaleFactor;print(textScaleFactor $textScaleFactor);//系统字体缩放比例 1.0doublescaleWidthScreenUtil().scaleWidth;// 实际宽度设计稿宽度的比例 0.5print(scaleWidth $scaleWidth);doublescaleHeightScreenUtil().scaleHeight;// 实际高度与设计稿高度度的比例 0.6print(scaleHeight $scaleHeight);Orientation orientationScreenUtil().orientation;// 屏幕方向 .portraitprint(orientation $orientation);设置屏幕的Container的宽度是屏幕宽度的一半/// 宽高是宽度的 0.5 倍 , 显示正方形Container(width:0.5.sw,height:0.5.sw,color:Colors.green,),根据宽度进行设置//方式一:ScreenUtil().setWidth(540)//根据屏幕宽度适配尺寸//方式二:540.w根据高度进行设置//方式一:ScreenUtil().setHeight(200)//根据屏幕高度适配尺寸(一般根据宽度适配即可)//方式二:200.h根据宽度或高度中的较小者进行调整//方式一:ScreenUtil().radius(200)//根据宽度或高度中的较小者进行调整//方式二:200.r字体大小适配ScreenUtil().setSp(24)//字体大小适配//方式一:Text(Hello,style:TextStyle(fontSize:ScreenUtil().setSp(24)),),//方式二:Text(Hello,style:TextStyle(fontSize:24.sp),),除了上面 4 种扩展属性以外还提供了sm以及sw、shsm取数值本身与sp的值最小的值如12.sm则取12与12.sp的值进行比较取最小的值。swscreen width 的缩写即屏幕宽度作用是按屏幕宽度比例返回值。如0.2.sw则返回屏幕宽度的 20%1.sw则是整个屏幕宽度shscreen height 的缩写及屏幕高度作用与sw类似返回指定比例的屏幕高度值。如1.sh为整个屏幕高度注意如果使用sp去设置字体,那么字体会根据屏幕的宽高缩放字体的,如果需要设置成,所有屏幕的字体大小都一样的可以像下面这么设计:全局设置MaterialApp(debugShowCheckedModeBanner:false,title:Flutter_ScreenUtil,theme:ThemeData(primarySwatch:Colors.blue,),builder:(context,widget){returnMediaQuery(///设置文字大小不随系统设置改变data:MediaQuery.of(context).copyWith(textScaleFactor:1.0),child:widget,);},home:HomePage(title:FlutterScreenUtil Demo),),Text 单独设置Text(text,textScaleFactor:1.0)其他 Api除了适配的 api 以外flutter_screenutil 还提供了很多实用的 api 如下 ScreenUtil().pixelRatio设备的像素密度ScreenUtil().screenWidth屏幕宽度等同于 1.swScreenUtil().screenHeight屏幕高度等同于 1.shScreenUtil().bottomBarHeight底部导航高度如全屏底部按键的高度ScreenUtil().statusBarHeight状态栏高度ScreenUtil().textScaleFactor系统字体缩放比例ScreenUtil().scaleWidth实际宽度与设计图宽度的比例ScreenUtil().scaleHeight实际高度与设计图高度的比例ScreenUtil().orientation屏幕方向提问安卓,iPhone的机型这么多,如果写死一个iPhone 12 min的屏幕宽高,这么机型约束出来的效果会变形吗?答案: 不会开发中我们会填写一个机型的宽高,这个数据从哪里来呢?是来自蓝湖上产品用的是那个机型:注意下面两句话:1.我们设计下面的这个代码只是计算出一个比例因子2.关键在于 flutter_screenutil 默认只按宽度缩放,高度最终跟随宽度计算相应的比例.至于内容的高度是可以滚动嘛ScreenUtil.init(context, designSize: const Size(402,875));所以我们开发的时候怎么写呢?1.你就去蓝湖看屏幕的宽高是多少,直接填写进去就像上面的图片2.然后开发的时候,蓝湖的空间宽高是多少, 代码空间一样写对应的大小的好了,看下面的图片

相关新闻

HER算法实战指南:用目标重标记解决强化学习稀疏奖励问题

HER算法实战指南:用目标重标记解决强化学习稀疏奖励问题

1. 这个标题背后藏着什么:从“事后诸葛亮”到算法本身“hindsight”这个词,英文直译是“后见之明”,俗一点说就是“事后诸葛亮”。但放在人工智能、特别是强化学习的语境下,它指的其实是 OpenAI 在 2017 年提出的一种经典算法&…

2026/10/1 16:44:51 阅读更多 →
nacos在win11无法正常启动,一闪而过,pause也不停止。【已解决】

nacos在win11无法正常启动,一闪而过,pause也不停止。【已解决】

问题一闪而过,无法抓屏。1.首先排除配置文件和数据库问题;2.问题及解决方法:分析:startup.cmd在执行时,无法找到jdk;解决方法:配置jdk到环境变量;再次启动正常;

2026/10/1 16:44:51 阅读更多 →
从阈值告警到雷达式监控:提前23分钟发现P99异常的故障早筛系统

从阈值告警到雷达式监控:提前23分钟发现P99异常的故障早筛系统

那晚凌晨两点多,报警群安安静静,我却盯着PLFM_RADAR面板上一个并不起眼的折线拐点发呆。等到第二天上午故障报告发出来,整个值班组的表情都很微妙——就在十个小时前,这个叫做“偏差评分”的数字缓慢偏离了正常轨道,但…

2026/10/1 16:44:51 阅读更多 →

最新新闻

白盒测试报告不是填空题:从CAN硬件测试看结构化思维落地

白盒测试报告不是填空题:从CAN硬件测试看结构化思维落地

1. 这份模板不是“填空题”,而是白盒测试工程师的思维脚手架“白盒测试实验报告模板”——光看标题,很多人第一反应是:又一个要交差的文档格式?Word里套个表格,把代码覆盖率填进去,加几行“测试通过”就完事…

2026/10/1 19:01:57 阅读更多 →
响应时间:性能指标的最终裁决者——从原理到排查优化实战

响应时间:性能指标的最终裁决者——从原理到排查优化实战

半夜两点被值班电话叫醒,用户语气已经很急躁:“后台能登进去,但页面上所有的操作都像挂了,点一个按钮转圈十几秒。”我打开监控面板,第一件事看的就是性能指标里的响应时间曲线。别的指标都还能争辩两句——CPU高也许是…

2026/10/1 19:01:57 阅读更多 →
上下文工程实战:解决长对话中大模型失忆与上下文膨胀问题

上下文工程实战:解决长对话中大模型失忆与上下文膨胀问题

1. 当提示词开始失效:我在长对话里撞上的"失忆"问题 先说一个真实场景。几个月前我在做一个行业调研分析项目,为了让大模型帮我梳理一整条产业链,我在单次会话里陆续贴了几十份报告片段、访谈纪要、政策文件和历史对话结论。前二十…

2026/10/1 19:01:57 阅读更多 →
风格化渲染系统:从NPR管线到美术可编程的五层架构

风格化渲染系统:从NPR管线到美术可编程的五层架构

1. 风格化渲染不是“加滤镜”,而是重建视觉语法 “一个风格化渲染系统”——这七个字在图形学、游戏开发、影视后期甚至AIGC工具链里,早已不是新鲜词。但绝大多数人第一次接触它时,下意识反应是:“哦,就是给画面套个油…

2026/10/1 19:01:57 阅读更多 →
从零搭建AI工程能力:环境管理、模型推理优化与服务化部署实战

从零搭建AI工程能力:环境管理、模型推理优化与服务化部署实战

1. 从零搭建AI工程能力,为什么大多数人卡在第一步就放弃了 如果你最近在技术社区里频繁看到“ai-engineering-from-scratch”这个说法,不用怀疑,它不是什么新出的框架或者工具库,而是一种越来越多人认可的学习路径——从最底层开始…

2026/10/1 19:01:57 阅读更多 →
MCP实战:用AI构建Excel自动化处理服务

MCP实战:用AI构建Excel自动化处理服务

每天跟Excel打交道的朋友应该都有这种体会:处理报表本身不是最费时间的,费时间的是那些重复性的操作——打开表格、定位列、写公式、复制粘贴、再生成新表。尤其是当数据源有变动、格式不统一的时候,整个人都会烦躁起来。 我最近用MCP&#…

2026/10/1 19:00:57 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →