• Flutter应用框架搭建之屏幕适配


    背景:

    移动设备多样性,特别是Android的碎片化严重,存在各种各样的分辨率,flutter跨平台开发又需要同时支持Android和IOS,为尽可能的还原设计图效果提升用户的体验,根据设计稿设计屏幕ui的时候我们需要考虑到屏幕适配的问题。

    推荐方法:

    直接使用ScreenUtil.init方法,传入屏幕尺寸、设计图尺寸和屏幕方向可以对flutter_screenutil进行初始化,代码如下:

    ScreenUtil.init(
      BoxConstraints(
        maxWidth: MediaQuery.of(context).size.width,  //屏幕宽度
        maxHeight: MediaQuery.of(context).size.height, //屏幕高度
      ),
      designSize: const Size(360, 690), // 设计图尺寸
      orientation: Orientation.portrait); // 屏幕方向
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用这种方式只需要在使用flutter_screenutil前进行初始化即可,一般放在根路由即第一个页面加载的时候进行初始化。
    注意:ScreenUtil.init不能够在MyApp中进行初始化,此时还没有加载MaterialApp无法使用MediaQuery.of(context)获取到屏幕的宽高。
    初始化以后就可以使用flutter_screenutil提供的方法获取到适配后的数值进行使用了。
    可以通过如下的api获取宽高以及字体的适配数值。

    ScreenUtil().setWidth(540)  //根据屏幕宽度适配尺寸
    ScreenUtil().setHeight(200) //根据屏幕高度适配尺寸(一般根据宽度适配即可)
    ScreenUtil().radius(200)    //根据宽度或高度中的较小者进行调整
    ScreenUtil().setSp(24)      //字体大小适配
    
    • 1
    • 2
    • 3
    • 4

    传入的参数即为设计图上的大小。在实际使用中的示例如下:

    Container(
      width: ScreenUtil().setWidth(200),
      height: ScreenUtil().setHeight(540),
      child: Text("Hello", style: TextStyle(fontSize: ScreenUtil().setSp(24)),),
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    flutter_screenutil更简单的写法,使用dart扩展的num类型:
    上面的每一个方法和下面的相对应:

    ScreenUtil().setWidth(540)  =>  540.h
    ScreenUtil().setHeight(200) =>  200.w
    ScreenUtil().radius(200)    =>  200.r
    ScreenUtil().setSp(24)      =>  24.sp
    
    • 1
    • 2
    • 3
    • 4

    相应的修改之后的使用示例:

    Container(
    width: 200.w,
    height: 540.h,
    child: Text("Hello", style: TextStyle(fontSize: 24.sp),),
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:1.w!=1.h除非屏幕的分辨率比例和设计图的比例一致,所以要设置正方形,切记使用相同的单位,如果设置相同的w和h,可能是长方形。
    除了上面的4钟扩展属性以外,还提供了sm以及sw和sh
    sm:取数值本身和sp的值较小的值,如:12.sm则取12和12.sp的值进行比较,取较小的值。
    sw:screen width的缩写,表示的是屏幕宽度,作用是按照屏幕宽度比例返回值。如0.2sw则返回屏幕宽度的20%,1.sw则是整个屏幕宽度
    sh:screen height的缩写,即屏幕高度,作用于sw类似,返回指定比例的屏幕高度值。如1.sh为整个屏幕的高度。
    使用sp作为字体单位,默认是会随着系统字体缩放进行变化的,如果不想让字体随着系统的缩放进行变化,可以设置textScaleFactor为1.0来实现。项目中可对MaterialApp进行全局设置,或者对Text进行单独的设置。
    全局设置:

    MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'Flutter_ScreenUtil',
            theme: ThemeData(
              primarySwatch: Colors.blue,
            ),
            builder: (context, widget) {
              return MediaQuery(
                ///设置文字大小不随系统设置改变
                data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
                child: widget,
              );
            },
            home: HomePage(title: 'FlutterScreenUtil Demo'),
          ),
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    单独设置:

    Text("text", textScaleFactor: 1.0)
    
    • 1
  • 相关阅读:
    【图神经网络论文整理】(五)—— Self-Attention Graph Pooling:SAGPool
    工控机防勒索病毒浅析
    C++stack和queue模拟实现以及deque的介绍
    Java 面试题:对比 Hashtable、HashMap、TreeMap 有什么不同?
    【跟小嘉学 Rust 编程】二十九、Rust 中的零拷贝序列化解决方案(rkyv)
    面试官都震惊,你这网络基础可以啊!
    SeriLog日志框架的应用
    window 安装多个低版本chrome测试
    维也纳国际酒店8月再签9大项目,中高端酒店凭何获市场热捧
    Java面试题-Java核心基础-第七天(String)
  • 原文地址:https://blog.csdn.net/xiao_le_/article/details/127851258