Flutter之屏幕适配 2024-06-26 周三

2024-06-25  本文已影响0人  松哥888

简介

有些时候,需要根据屏幕进行适配,这里基本上会用这个插件flutter_screenutil。点赞数还是比较多的

点赞数
它还提供了中文手册,这点非常好

初始化

在程序启动早期,就需要初始化这个插件

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //填入设计稿中设备的屏幕尺寸,单位dp
    return ScreenUtilInit(
      designSize: const Size(375, 812),
      minTextAdapt: true,
      splitScreenMode: true,
      builder: (context , child) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'First Method',
          // You can use the library anywhere in the app even in theme
          theme: ThemeData(
            primarySwatch: Colors.blue,
            textTheme: Typography.englishLike2018.apply(fontSizeFactor: 1.sp),
          ),
          home: child,
        );
      },
      child: const HomePage(title: 'First Method'),
    );
  }
}

这里的designSize: const Size(375, 812),是UI设计稿上手机的尺寸,单位是点,px的要✖️2;基本原理就是取手机的实际尺寸,然后跟这个设计尺寸做个比值,就是放大或者缩小的倍数,调整一下就是按比例缩放了。大多数情况还是很有效的。

适合使用的地方,以及不建议用的地方

容器的宽高适合使用,而图片,圆角等最好不要用,不然的话会出现图片拉伸模糊的现象。容器等比例缩放而图片保持固定大小,那么缩小或者扩大的就是图片之间的空隙,整体效果比较好。
当然,这样带来的风险是在缩放比例太大的时候就会出现界面错乱的现象。所以,iPad之类的,最好给不同的设计,自适应的效果并不理想。
用起来比较方便,在数字后面直接加.w或者.h就可以了。实现原理就是对系统的数字类型做了扩展

extension SizeExtension on num {
  ///[ScreenUtil.setWidth]
  double get w => ScreenUtil().setWidth(this);

  ///[ScreenUtil.setHeight]
  double get h => ScreenUtil().setHeight(this);

   ///其他内容
}

其他工具

一些屏幕尺寸相关的工具也比较好用,比如取屏幕宽高等

    ScreenUtil.pixelRatio       //设备的像素密度
    ScreenUtil.screenWidth   (dart sdk>=2.6 : 1.sw)   //设备宽度
    ScreenUtil.screenHeight  (dart sdk>=2.6 : 1.sh)   //设备高度
    ScreenUtil.bottomBarHeight  //底部安全区距离,适用于全面屏下面有按键的
    ScreenUtil.statusBarHeight  //状态栏高度 刘海屏会更高
    ScreenUtil.textScaleFactor //系统字体缩放比例

    ScreenUtil().scaleWidth  // 实际宽度设计稿宽度的比例
    ScreenUtil().scaleHeight // 实际高度与设计稿高度度的比例

    ScreenUtil().orientation  //屏幕方向
上一篇 下一篇

猜你喜欢

热点阅读