使用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. Redis系列之——Redis-Sentinel

    文章目录 一 主从复制高可用 二 架构说明 三 安装配置 四 客户端连接 一 主从复制高可用 #主从复制存在的问题: #1 主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave ...

  2. Jmeter内的参数有文件时,如何传参?

    文件类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 尊重原创,转载请注明出处,谢谢!!

  3. 轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南

    引言 我们将继续深入研究组件启动专题.在之前的文章中,我们已经详细介绍了Redis的各种配置使用方法,为读者提供了全面的指导.然而,今天我们将转向另一个备受关注的数据库--MongoDB.MongoD ...

  4. 火山引擎 ByteHouse:只需 2 个方法,增强 ClickHouse 数据导入能力

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 作为企业数字化建设的必备要素,易用的数据引擎能帮助企业提升数据使用效率,更好提升数据应用价值,夯实数字化建设基础. ...

  5. 彻底搞懂CAP理论(电商系统)

    1.理解CAP CAP是 Consistency.Availability.Partition tolerance三个词语的缩写,分别表示一致性.可用性.分区容忍性. 下边我们分别来解释: 为了方便对 ...

  6. CAP 定理的含义(转)

    分布式系统(distributed system)正变得越来越重要,大型网站几乎都是分布式的. 分布式系统的最大难点,就是各个节点的状态如何同步.CAP 定理是这方面的基本定理,也是理解分布式系统的起 ...

  7. L3-008 喊山

    #include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int N = ...

  8. Markdown & typora 速查

    Markdown & typora 速查 一级标题 # 一级标题 说明:#数量表示几级标题,如二级标题为"## 二级标题",支持到6级标题,#和标题中间有一个空格 typo ...

  9. Vue01-简介与入门

    Vue 01. 简介 1.1 前端三大框架 目前前端最流行的三大框架: Vue React angular 1.2 Vue简介 Vue (读音 /vjuː/,类似于 view) ,也可以写成Vue.j ...

  10. [CF1830E] Bully Sort

    题目描述 On a permutation $ p $ of length $ n $ , we define a bully swap as follows: Let $ i $ be the in ...