使用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. os --- 多种操作系统接口¶

    os.path --- 常用路径操作 源代码: Lib/posixpath.py (用于 POSIX) 和 Lib/ntpath.py (用于 Windows). 此模块实现了一些有用的路径名称相关函 ...

  2. 关于 iPhone 上的相机功能

    关于 iPhone 上的相机功能 了解 iPhone 上的摄影风格.快录功能.超广角摄像头和其他相机功能.   通过摄影风格功能锁定您的风格 借助 iPhone 13 各款机型和 iPhone SE( ...

  3. EMC ndmp NAS

    NAS 是带存储系统的专用高性能文件服务器.它可提供文件级数据访问和共享. NAS 使用网络和文件共享协议,包括用于数据传输的 TCP/IP 以及用于远程文件服务的 CIFS 和 NFS. 最简单的备 ...

  4. 手撕Vue-实现事件相关指令

    经过上一篇文章的学习,实现了界面驱动数据更新,接下来实现一下其它相关的指令,比如事件相关的指令,v-on 这个指令的使用频率还是很高的,所以我们先来实现这个指令. v-on 的作用是什么,是不是可以给 ...

  5. Java替换RequestBody和RequestParam参数的属性

    Java替换RequstBody和RequestParam参数的属性 本文主要讲解在Java环境中如何替换RequestBody和RequestParam参数中的属性 背景 近期由于接手的老项目中存在 ...

  6. C#winform软件实现一次编译,跨平台windows和linux兼容运行,兼容Visual Studio原生界面Form表单开发

    一.背景: 微软的.net core开发工具,目前来看,winform界面软件还没有打算要支持linux系统下运行的意思,要想让c#桌面软件在linux系统上运行,开发起来还比较麻烦.微软只让c#的控 ...

  7. Leetcode.402单调栈

    给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小.请你以字符串形式返回这个最小的数字. 示例 1 : 输入:num = "143221 ...

  8. 实用的命令行终端增强软件:Tabby

    还是那句话:出众的软件有很多,适合自己的才是最好的. 一.软件介绍 Tabby是一个开源免费软件,支持Windows.macOS和Linux系统.它提供了一个高度可定制的终端界面,可以通过多种方式添加 ...

  9. Linux 中如何修改终端提示符颜色?

    哈喽大家好,我是咸鱼 我们知道默认情况下,Linux 终端提示符都是简单的黑白色 这种黑白提示一方面看久了容易视觉疲劳,另一方面由于没有高亮显示,看着很不方便,视觉体验极差 所以我们需要修改我们的终端 ...

  10. 如何系统学习Python?

    学习 Python 可以通过以下系统性的步骤进行: 1. 设定学习目标 确定你学习 Python 的主要目的,是为了编写脚本.数据分析.Web 开发.机器学习还是其他应用?理解这个目标可以帮助你更有针 ...