如今的手機品牌和型號愈來愈多,致使咱們平時寫佈局的時候會在個不一樣的移動設備上顯示的效果不一樣,html
好比咱們的設計稿一個View的大小是300px,若是直接寫300px,可能在當前設備顯示正常,但到了其餘設備可能就會偏小或者偏大,這就須要咱們對屏幕進行適配。android
安卓原生的話有本身的適配規則,能夠根據不一樣的尺寸創建不一樣的文件夾,系統會根據當前的設備尺寸取對應的大小的佈局。而flutter自己並無適配規則,而原生的又比較繁瑣,這就須要咱們本身去對屏幕進行適配。ios
點擊直達github地址 若是有幫助,請給我個stargit
github: github.com/OpenFlutter…github
csdn博客 工具 介紹: blog.csdn.net/u011272795/…api
安裝以前請查看最新版本安全
dependencies: flutter: sdk: flutter # 添加依賴 flutter_screenutil: ^0.3.0 複製代碼
import 'package:flutter_screenutil/flutter_screenutil.dart'; 複製代碼
在使用以前請設置好設計稿的寬度和高度,傳入設計稿的寬度和高度(單位px) 必定在MaterialApp的home中的頁面設置,以保證在每次使用以前設置好了適配尺寸:app
//設置適配尺寸 (填入設計稿中設備的屏幕尺寸) 假如設計稿是按iPhone6的尺寸設計的(iPhone6 750*1334) ScreenUtil.instance = ScreenUtil(width: 750, height: 1334)..init(context); 複製代碼
適配尺寸:ide
//傳入設計稿的px尺寸: 適配後的寬度width: ScreenUtil().setWidth(540), 適配後的高度height: ScreenUtil().setHeight(200), 高度也根據setWidth來作適配能夠保證不變形 例如: Container( width: ScreenUtil().setWidth(375), height: ScreenUtil().setHeight(200), ), 複製代碼
適配字體:工具
ScreenUtil().setSp(28) //傳入字體大小,根據系統的「字體大小」輔助選項來進行縮放 ScreenUtil().setSp(28,false) //傳入字體大小,不會根據系統的「字體大小」輔助選項來進行縮放 for example: Text( 'My font size is 28px and will not change with the system.', style: TextStyle( color: Colors.black, fontSize: ScreenUtil().setSp(28, false) ) ), 複製代碼
其餘相關api:
ScreenUtil.pixelRatio //設備的像素密度 ScreenUtil.screenWidth //設備寬度 ScreenUtil.screenHeight //設備高度 ScreenUtil.bottomBarHeight //底部安全區距離,適用於全面屏下面有按鍵的 ScreenUtil.statusBarHeight //狀態欄高度 劉海屏會更高 單位px ScreenUtil.textScaleFactory //系統字體縮放比例 ScreenUtil().scaleWidth //寬度相對於設計稿放大的倍數 ScreenUtil().scaleHeight //高度相對於設計稿放大的倍數 複製代碼
//導入 import 'package:flutter_screenutil/flutter_screenutil.dart'; ... @override Widget build(BuildContext context) { //設置適配尺寸 (填入設計稿中設備的屏幕尺寸) 假如設計稿是按iPhone6的尺寸設計的(iPhone6 750*1334) ScreenUtil.instance = ScreenUtil(width: 750, height: 1334)..init(context); print('設備寬度:${ScreenUtil.screenWidth}'); //Device width print('設備高度:${ScreenUtil.screenHeight}'); //Device height print('設備的像素密度:${ScreenUtil.pixelRatio}'); //Device pixel density print( '底部安全區距離:${ScreenUtil.bottomBarHeight}'); //Bottom safe zone distance,suitable for buttons with full screen print( '狀態欄高度:${ScreenUtil.statusBarHeight}px'); //Status bar height , Notch will be higher Unit px print( '寬度相對於設計稿放大的倍數:${ScreenUtil().scaleWidth}'); //The width is enlarged relative to the design draft print( '高度相對於設計稿放大的倍數:${ScreenUtil().scaleHeight}'); //The height is enlarged relative to the design draft print('系統的字體縮放比例:${ScreenUtil.textScaleFactory}'); return new Scaffold( appBar: new AppBar( title: new Text(widget.title), ), body: new Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ Row( children: <Widget>[ Container( width: ScreenUtil().setWidth(375), height: ScreenUtil().setHeight(200), color: Colors.red, child: Text( 'My width:${ScreenUtil().setWidth(375)}dp', style: TextStyle( color: Colors.white, fontSize: ScreenUtil().setSp(28, false)), ), ), Container( width: ScreenUtil().setWidth(375), height: ScreenUtil().setHeight(200), color: