1. 使用FittedBox
会根据尺寸自动拉伸内部内容
FittedBox()
2. 使用px或rpx进行适配
- 封装工具类
import 'dart:ui';
class CYScreenUtils{
static double physicalWidth;// 物理屏幕宽
static double physicalHeight;// 物理屏幕高
static double dpr; // 屏幕宽高比
static double screenWidth;// 屏幕宽
static double screenHeight;// 屏幕高
static double statusBarHeight;// 状态栏高度
static double rpx;
static double px;
// designedWidth 设计稿给出的屏幕标准宽度(用来适配rpx)默认750
static void init({double designedWidth = 750}){
// 物理分辨率
physicalWidth = window.physicalSize.width;
physicalHeight = window.physicalSize.height;
print("物理分辨率:$physicalWidth x $physicalHeight(宽 x 高)");
// dpr
dpr = window.devicePixelRatio;
// 屏幕宽高
screenWidth = physicalWidth / dpr;
screenHeight = physicalHeight / dpr;
print("屏幕宽高:$screenWidth x $screenHeight(宽 x 高)");
// 状态栏高度
statusBarHeight = window.padding.top / dpr;
// 屏幕适配(计算px和rpx)
rpx = screenWidth / designedWidth;
px = screenWidth / designedWidth * 2;
}
// 适配是使用: CYUtils.resizeWithRPX(200)<传入px>
static double resizeWithRPX(double size){
return rpx * size;
}
// 适配是使用: CYUtils.resizeWithRPX(200)<传入pt>
static double resizeWithPX(double size){
return px * size;
}
}
- 封装扩展类
double+cyextension.dart
import 'package:cayj_cystudio/utils/cy_screen_utils.dart';
import 'package:flutter/material.dart';
extension CYScreenFitDoubleExtension on double{//屏幕适配扩展
// 调用:200.toPX() 或 200.toRPX()
double toPX(){
return CYScreenUtils.resizeWithPX(this);
}
double toRPX(){
return CYScreenUtils.resizeWithRPX(this);
}
// 调用: 200.px 或 200.rpx
double get px{
return CYScreenUtils.resizeWithPX(this);
}
double get rpx{
return CYScreenUtils.resizeWithRPX(this);
}
}
int+cyextension.dart
import 'package:cayj_cystudio/utils/cy_screen_utils.dart';
import 'package:flutter/material.dart';
extension CYScreenFitIntExtension on int{//屏幕适配扩展
// 调用:200.toPX() 或 200.toRPX()
double toPX(){
return CYScreenUtils.resizeWithPX(this.toDouble());
}
double toRPX(){
return CYScreenUtils.resizeWithRPX(this.toDouble());
}
// 调用: 200.px 或 200.rpx
double get px{
return CYScreenUtils.resizeWithPX(this.toDouble());
}
double get rpx{
return CYScreenUtils.resizeWithRPX(this.toDouble());
}
}
网友评论