Flutter 3.0在5月12日發(fā)布了氮双,支持六個平臺慕蔚,而且開始加大對游戲開發(fā)的支持适秩,好好學習吧,發(fā)展還是蠻好的纷宇。
theme傳入ThemeData(介紹些常用的)
- brightness:亮度Brightness.light/Brightness.dark
- colorScheme:修改主題色夸盟,次要顏色等
- buttonTheme:Button的主題,如最小寬度,最小高度,默認背景色像捶,內邊距等(ButtonThemeData)
- cardTheme:Card的主題上陕,如默認背景色,陰影等(CardTheme)
- textTheme:Text的主題拓春,如默認字號唆垃,顏色等(TextTheme)
- bottomNavigationBarTheme:bottomNavigationBar的主題,如顏色等
- splashColor:水波紋顏色
- highlightColor:點擊高亮顏色
- canvasColor:默認背景色
去掉水波紋和高亮效果
theme: ThemeData(
splashColor: Colors.transparent,
highlightColor: Colors.transparent
),
Theme(Widget)可以包裹Widget痘儡,作為局部的主題辕万,使其使用不同的主題,如果不希望全部覆蓋沉删,則可傳入Theme.of(context).copywith()
從而更改某幾項主題渐尿。
FloatingActionButton主題色的更改
Theme(
data: Theme.of(context).copyWith(
colorScheme: Theme.of(context).colorScheme.copyWith(
secondary: Colors.pink
),
)
darkTheme同theme傳入ThemeData
物理分辨率
- window.physicalSize.width//寬
- window.physicalSize.height//高
通過物理分辨率/dpr獲取邏輯分辨率
- 寬 :window.physicalSize.width/window.devicePixelRatio
- 高: window.physicalSize.height/window.devicePixelRatio
通過物理分辨率/dpr獲取狀態(tài)欄及底部安全區(qū)高度
- 狀態(tài)欄高度:window.padding.top/window.devicePixelRatio
- 底部安全區(qū)高度:window.padding.bottom/window.devicePixelRatio
邏輯分辨率(需要context初始化完成)
- MediaQuery.of(context).size.width//寬
- MediaQuery.of(context).size.height//高
狀態(tài)欄及底部安全區(qū)高度(需要context初始化完成)
- 狀態(tài)欄高度:MediaQuery.of(context).padding.top
- 底部安全區(qū)高度:MediaQuery.of(context).padding.bottom
適配
同小程序引入rpx
單位,可以引入pt
單位與原尺寸相乘即可矾瑰。下面是個適配的小工具
class GCSizeFit {
static late double screenWidth;
static late double screenHeight;
static late double statusHeight;
static late double bottomHeight;
static late double rpx;
static late double pt;
//傳入基準手機物理寬度砖茸,默認是6s的750,單位是px,asset:@2x就傳2殴穴,@3x就傳3凉夯,默認是6s的2
static void initialize ({int standardWidth = 750, int asset = 2}) {
//手機物理寬高
final physicalWidth = window.physicalSize.width;
final physicalHeight = window.physicalSize.height;
//dpr
final dpr = window.devicePixelRatio;
//屏幕寬高
screenWidth = physicalWidth / dpr;
screenHeight = physicalHeight / dpr;
//劉海及安全區(qū)域高度
statusHeight = window.padding.top / dpr;
//底部安全區(qū)域高度
bottomHeight = window.padding.bottom / dpr;
//計算rpx的大小
rpx = screenWidth / standardWidth;
//計算px的大小
pt = rpx * asset;
print('GCSizeFit{$屏幕寬: $screenWidth, 屏幕高: $screenHeight, dpr:$dpr\n'
'劉海及安全區(qū)域高: $statusHeight, \n'
'底部安全區(qū)域高: $bottomHeight, \n'
'rpx: $rpx, pt: $pt}');
}
//像素為單位的前端一般用這個
static double setRPX(num size) {
return rpx * size;
}
//藍湖pt為單位的移動端一般用這個
static double setPT(num size) {
return pt * size;
}
}
/*
* 擴展double
* 使用 123.45.px 或123.45.pt
* */
extension DoubleFit on double {
double get px {
return GCSizeFit.setRPX(this);
}
double get pt {
return GCSizeFit.setPT(this);
}
}
/*
* 擴展int
* 使用 123.px 或123.pt
* */
extension IntFit on int {
double get px {
return GCSizeFit.setRPX(this);
}
double get pt {
return GCSizeFit.setPT(this);
}
}
設備名稱 | 屏幕尺寸 | PPI | Asset | 邏輯分辨率 | 物理分辨率 |
---|---|---|---|---|---|
13Pro Max,12Pro Max | 6.7 in | 458 | @3x | 428*926 | 1284*2778 |
13,13Pro,12,12Pro | 6.1 in | 460 | @3x | 390*844 | 1170*2532 |
12mini,13mini | 5.4 in | 476 | @3x | 375*812 | 1125*2436[1] |
XS Max,11Pro Max | 6.5 in | 458 | @3x | 414*896 | 1242*2688 |
XR,11 | 6.1 in | 326 | @2x | 414*896 | 828*1792 |
11Pro,XS,X | 5.8 in | 458 | @3x | 375*812 | 1125*2436 |
8+,7+,6s+,6+ | 5.5 in | 401 | @3x | 414*736 | 1242*2208 |
SE 3,8,7,6s,6 | 4.7 in | 326 | @2x | 375 *667 | 750*1334 |
版權聲明:本文為 Crazy Steven 原創(chuàng)出品,歡迎轉載采幌,轉載時請注明出處劲够!
-
官網寫的是1080 * 2340,原因比較長就不寫了休傍,自己在網上搜吧 ?