使用MediaQuery和比例因子

优点:使用简单,可以处理大多数情况下的屏幕适配需求。

缺点:需要手动计算比例因子,并且随着UI元素变得更加复杂和层次化(例如多层次列表或动画效果),使用此方法可能会变得更加困难。

import 'package:flutter/material.dart';

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 使用 MediaQuery.of(context) 获取 MediaQueryData 对象
final mediaQueryData = MediaQuery.of(context); // 获取屏幕大小
final screenSize = mediaQueryData.size; // 获取设备像素比
final devicePixelRatio = mediaQueryData.devicePixelRatio; // 获取 SafeArea 内边距 ; SafeArea 是一个指定在屏幕上可见内容的区域
final padding = mediaQueryData.padding; // 获取当前可见区域的内边距
final viewInsets = mediaQueryData.viewInsets; // 获取屏幕方向
final orientation = mediaQueryData.orientation; // 获取平台亮度模式
final brightness = mediaQueryData.platformBrightness; return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('MediaQuery Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Screen Size: $screenSize'),
Text('Device Pixel Ratio: $devicePixelRatio'),
Text('SafeArea Padding: $padding'),
Text('View Insets: $viewInsets'),
Text('Orientation: $orientation'),
Text('Brightness: $brightness'),
],
),
),
),
);
}
} void main() {
runApp(MyApp());
}

flutter_screenutil

优点:使用简单,支持屏幕宽度适配和按照设备像素密度适配,并提供了多种适配方式,可以应对多种屏幕尺寸和设备像素密度的情况。

缺点:在高级UI布局和元素调整方面可能存在一些限制,并可能会影响代码的可维护性。

flutter_screenutil 插件的 ScreenUtilInit 对 MaterialApp 进行了包装,以便于在应用程序启动时对屏幕适配进行初始化。然而,由于这个包装可能会与某些特定应用场景的组件结合使用,导致一些额外的问题。一般来说,flutter_screenutil 可能会给您带来以下一些问题:

  1. 在一些特定应用场景下可能会失效:例如,在 BottomNavigationBar 或者 TabBar 中,因为这些组件自带屏幕适配,使用 flutter_screenutil 可能会导致无法正常适配。

  2. 需要注意不同尺寸之间的兼容性:使用 flutter_screenutil 后,您需要确保您的应用程序可以在不同的尺寸上正常工作,否则可能会导致布局问题。

  3. 可能会对性能造成一定的影响:由于 flutter_screenutil 需要在运行时进行适配计算,可能会对应用程序的性能造成一定的影响。

  4. debugShowCheckedModeBanner :false;失效
import 'package:flutter_screenutil/flutter_screenutil.dart';  //使用的页面都要添加

void main() {
runApp(
MaterialApp(
debugShowCheckedModeBanner: false, // 在这添加可以解决debugShowCheckedModeBanner失效问题
home: ScreenUtilInit(
designSize: const Size(1920, 1080), //第一个参数是宽度,第二个参数是高度
builder: (context, widget) => MyApp(), ),
),
);
} // 屏幕宽度(单位 dp)
double screenWidth = ScreenUtil().screenWidth; // 屏幕高度
double screenHeight = ScreenUtil().screenHeight; // 根据屏幕宽度动态计算出的实际宽度
double width = ScreenUtil().setWidth(200); // 根据屏幕高度动态计算出的实际高度
double height = ScreenUtil().setHeight(200); // 根据屏幕宽度和高度动态计算出的实际字体大小
double fontSize = ScreenUtil().setSp(18);

LayoutBuilder 来获取一个内的盒子的宽度和高度

class MyBoxWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
double width = constraints.maxWidth;
double height = constraints.maxHeight; return Container(
color: Colors.blue,
width: width,
height: height,
child: Text(
'Width: $width, Height: $height',
style: TextStyle(color: Colors.white),
),
);
},
);
}
}

MediaQuery获取

 final height = MediaQuery.of(context).size.height;
final width = MediaQuery.of(context).size.width;

...

flutter屏幕适配方案的更多相关文章

  1. Flutter 移动端屏幕适配方案和制作

    flutter_screenutil插件 flutter 屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局! 注意:此插件仍处于开发阶段,某些API可能尚未推出. 安装依赖: 安装之前请查 ...

  2. flutter屏幕适配

    现在的手机品牌和型号越来越多,导致我们平时写布局的时候会在个不同的移动设备上显示的效果不同, 比如我们的设计稿一个View的大小是300px,如果直接写300px,可能在当前设备显示正常,但到了其他设 ...

  3. Flutter实战视频-移动电商-11.首页_屏幕适配方案讲解

    11.首页_屏幕适配方案讲解 国人写的屏幕适配插件: https://github.com/OpenFlutter/flutter_screenutil 最新版本是0.5.1 在pubspec.yam ...

  4. 01-02 Flutter仿京东商城项目 功能分析、底部导航Tab切换以及路由配置、架构搭建:(Flutter仿京东商城项目 首页布局以及不同终端屏幕适配方案)

    Flutter和Dart交流学习群:交流群:452892873 01Flutter仿京东商城项目 功能分析.底部导航Tab切换以及路由配置.架构搭建 02Flutter仿京东商城项目 首页布局以及不同 ...

  5. Flutter移动电商实战 --(11)首页_屏幕适配方案和制作

    1.flutter_ScreenUtil插件简介 flutter_ScreenUtil屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局. 插件会让你先设置一个UI稿的尺寸,他会根据这个尺寸 ...

  6. 11-Flutter移动电商实战-首页_屏幕适配方案和制作

    1.flutter_ScreenUtil插件简介 flutter_ScreenUtil屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局. 插件会让你先设置一个UI稿的尺寸,他会根据这个尺寸 ...

  7. JavaScript强化教程 —— Cocos2d-JS的屏幕适配方案

    1. 设置屏幕适配策略(Resolution Policy) 如果你还没有用过Resolution Policy,只需要在游戏载入过程完成之后(cc.game.onStart函数回调中),调用下面的代 ...

  8. Unity2D多分辨率屏幕适配方案(转载)

    一下内容转自:http://imgtec.eetrend.com/forum/3992 此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有 ...

  9. Cocos2d-JS的屏幕适配方案

    Cocos2d引擎为游戏开发者提供了屏幕适配策略(Resolution Policy)解决方案. 使用方式 1. 设置屏幕适配策略(Resolution Policy) 如果你还没有用过Resolut ...

  10. cocos2dx屏幕适配方案

    我们在利用cocos2dx来开发游戏时,在开始时就不可避免的会遇到屏幕适配问题,来使我们的游戏适应移动终端的各种分辨率大小.目前,大家采用的屏幕适配方案不一,网上的资料也比较丰富,下面我也将自己使用的 ...

随机推荐

  1. Django-rest-framework框架——Xadmin的使用、Book系列多表群操作、RBAC-基于角色的访问控制

    @ 目录 一 过滤Filtering 二 排序 三 分页Pagination 可选分页器 应用 四 异常处理 Exceptions 4.1 使用方式 4.2 案例 4.3 REST framework ...

  2. .NET 数据库大数据 方案(插入、更新、删除、查询 、插入或更新)

    1.功能介绍 (需要版本5.0.45) 海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数 ...

  3. 垃圾000000000000000000000写了很多,保存不上,发送失败了。。。。。A

    垃圾000000000000000000000写了很多,保存不上,发送失败了.....A垃圾000000000000000000000写了很多,保存不上,发送失败了.....A垃圾0000000000 ...

  4. 轻松合并Excel工作表:Java批量操作优化技巧

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在Excel中设计表单时,我们经常需要对收集的信息进行统 ...

  5. vscode/sublime 语法高亮定义和代码段的区别

    vscode插件数据格式基于json,sublime插件数据格式基于xml.sublime插件的官方文档说的不清楚,相关教程也很难找,遇到的一些坑记录一下 语法定义文件对比 同样使用TextMate定 ...

  6. 未能添加SSL证书,错误1312

    1.win+r打开运行,输入mmc 2.在控制台1[控制台根节点]->文件->添加/删除....->选择证书->添加-选择计算机账户->完成->确认 3.找到证书文 ...

  7. sql删除进程

    使用一下语句杀掉进程 USE master go DECLARE @dbname VARCHAR(200) SET @dbname = 'xxxx' --要关闭进程的数据库名 DECLARE @sql ...

  8. 使用django 定时任务 (Django + celery + beat )

    安装 django + celery + results https://www.cnblogs.com/lanheader/p/13615772.html 安装 django-celery-beat ...

  9. 高性能渲染——详解Html Canvas的优势与性能

    本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 一.什么是Canvas 想必学习前端的同学们对Canvas 都不陌生,它是 ...

  10. 研读Java代码必须掌握的Eclipse快捷键

    1. Ctrl+左键 和F3 这个是大多数人经常用到的,用来查看变量.方法.类的定义 跳到光标所在标识符的定义代码.当按执行流程阅读时,F3实现了大部分导航动作. 2 Ctrl+Shift+G 在工作 ...