美文网首页Flutter
轻松flutter之 屏幕适配

轻松flutter之 屏幕适配

作者: 熊爸天下_56c7 | 来源:发表于2020-06-10 11:14 被阅读0次

    一. 引入包:

    https://pub.dev/packages/flutter_screenutil

    flutter_screenutil: ^1.1.0
    

    二. 在要用的地方引入:

    import 'package:flutter_screenutil/flutter_screenutil.dart';
    

    三. 基本使用:

    1. 我们要在使用之前初始化默认设计版面

    现在一般是iPhone6(750*1334)

    初始化完成后,现在我们相当于把屏幕宽度分为了750份,把屏幕高度分为了1334份, 今后相对宽度用300.w表示, 相对高度用700.h表示.

    import 'package:flutter/material.dart';
    import 'package:flutter_screenutil/flutter_screenutil.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'Flutter_ScreenUtil',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        //设计稿默认按照iPhone6 ​​750*1334
        ScreenUtil.init(context,
            width: 750,
            height: 1334,
            allowFontScaling: false //设置字体大小是否根据系统的“字体大小”辅助选项来进行缩放
            );
    
        return MyWidget01();
      }
    }
    
    class MyWidget01 extends StatefulWidget {
      @override
      _MyWidget01State createState() => _MyWidget01State();
    }
    
    class _MyWidget01State extends State<MyWidget01> {
      double _sliderW = 0;
      double _sliderH = 0;
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            body: Stack(
          children: <Widget>[
            Column(
              children: <Widget>[
                Container(
                  width: _sliderW * 750.w,//把屏幕宽度分为750份,它占多少份
                  height: _sliderH * 1334.h,//把屏幕高度分为1334份,它占多少份
                  color: Colors.amber,
                ),
              ],
            ),
            Column(
              children: <Widget>[
                Text("调整宽度:(0~750)"),
                Slider(
                    value: _sliderW,
                    onChanged: (v) {
                      setState(() {
                        _sliderW = v;
                      });
                    }),
                Container(
                  height: 1150.h,//把屏幕高度分为1334份,它占多少份
                  child: Row(
                    children: <Widget>[
                      RotatedBox(
                        quarterTurns: 45,
                        child: Slider(
                            label: "haha",
                            value: _sliderH,
                            onChanged: (v) {
                              setState(() {
                                _sliderH = v;
                              });
                            }),
                      ),
                      RotatedBox(
                        quarterTurns: 45,
                        child: Text("调整高度:(0~1334)"),
                      ),
                    ],
                  ),
                )
              ],
            )
          ],
        ));
      }
    }
    

    除了200.w300.h这样的表达方式,也可以使用

    ScreenUtil().setWidth(750); //相当于750.w
    ScreenUtil().setHeight(1334); //相当于1334.w
    

    四、适配字体

    //传入字体大小,默认不根据系统的“字体大小”辅助选项来进行缩放(可在初始化ScreenUtil时设置allowFontScaling)
    ScreenUtil().setSp(28)
    或
    28.sp (dart sdk>=2.6)
     
    //传入字体大小,根据系统的“字体大小”辅助选项来进行缩放(如果某个地方不遵循全局的allowFontScaling设置)       
    ScreenUtil().setSp(24, allowFontScalingSelf: true)
    或
    24.ssp (dart sdk>=2.6)
    
    
    //for example:
    
    Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Text('我的文字大小在设计稿上是24px,不会随着系统的文字缩放比例变化',
                        style: TextStyle(
                          color: Colors.black,
                          fontSize: ScreenUtil().setSp(24),
                        )),
                    Text('我的文字大小在设计稿上是24px,会随着系统的文字缩放比例变化',
                        style: TextStyle(
                            color: Colors.black,
                            fontSize: ScreenUtil()
                                .setSp(24, allowFontScalingSelf: true))),
                  ],
                )
    

    五、获取关于屏幕适配相关的参数

      void printScreenInformation() {
        print('设备宽度:${ScreenUtil.screenWidth}'); //Device width
        print('设备高度:${ScreenUtil.screenHeight}'); //Device height
        print('设备的像素密度:${ScreenUtil.pixelRatio}'); //Device pixel density
        print(
            '底部安全区距离:${ScreenUtil.bottomBarHeight}dp'); //Bottom safe zone distance,suitable for buttons with full screen
        print(
            '状态栏高度:${ScreenUtil.statusBarHeight}dp'); //Status bar height , Notch will be higher Unit px
    
        print('实际宽度的dp与设计稿px的比例:${ScreenUtil().scaleWidth}');
        print('实际高度的dp与设计稿px的比例:${ScreenUtil().scaleHeight}');
    
        print(
            '宽度和字体相对于设计稿放大的比例:${ScreenUtil().scaleWidth * ScreenUtil.pixelRatio}');
        print('高度相对于设计稿放大的比例:${ScreenUtil().scaleHeight * ScreenUtil.pixelRatio}');
        print('系统的字体缩放比例:${ScreenUtil.textScaleFactor}');
      }
    }
    

    相关文章

      网友评论

        本文标题:轻松flutter之 屏幕适配

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