美文网首页
Flutter适配方案

Flutter适配方案

作者: 刘铁崧 | 来源:发表于2020-12-28 20:38 被阅读0次

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());
  }
}

相关文章

网友评论

      本文标题:Flutter适配方案

      本文链接:https://www.haomeiwen.com/subject/yqyhgktx.html