1 mounted:判斷頁(yè)面是否被釋放,如果釋放了就不進(jìn)行渲染
if (mounted) {
setState(() {
});
}
2 GlobalKey的使用:
final GlobalKey<_UserInfoItemState> _globalKey = GlobalKey();
final String? userName = _globalKey.currentState?.widget.userName;
final String? userPhone = _globalKey.currentState?.userPhone;
3 安卓設(shè)備啟動(dòng)圖片的大小
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
320*480
480*800
720*1280
1080*1920
3840*2160
4 斷言assert
如果assert 的判斷為true, 則繼續(xù)執(zhí)行下面的語(yǔ)句。反之拋出一個(gè)異常弥姻。
5 計(jì)算Text內(nèi)容高度TextPainter
double get descInfoHeight {
final TextPainter painter = TextPainter(
locale: WidgetsBinding.instance!.window.locale,
maxLines: 2,
textDirection: TextDirection.ltr,
text: TextSpan(
text: "",
style: TextStyle(
color: const Color(0xFF666666),
fontSize: 14.sp,
fontWeight: FontWeight.w500,
),
),
);
painter.layout(maxWidth: 170.w);
return painter.height;
}
6 計(jì)算item內(nèi)容高度
void calculateContentHeight() {
Future<void>.delayed(const Duration(), () {
if (!mounted) {
return;
}
final RenderBox renderBox = context.findRenderObject() as RenderBox;
print("width = ${renderBox.size.width}, height = ${renderBox.size.height}");
});
}
7 const和final
const:賦值的內(nèi)容必須在編譯時(shí)已經(jīng)確定
final:賦值時(shí)缅疟,可以動(dòng)態(tài)獲取筹煮,賦值的內(nèi)容在運(yùn)行時(shí)已經(jīng)確定
8 dynamic和Object
dynamic調(diào)用方法時(shí)助泽,編譯不會(huì)報(bào)錯(cuò)熬北,運(yùn)行時(shí)存在安全隱患
Object類型富玷,調(diào)用方法時(shí)介时,編譯會(huì)報(bào)錯(cuò)
9 Dart語(yǔ)法:
Dart是單線程的
Dart中的函數(shù)不支持方法重載
10
設(shè)置高斯模糊 ImageFiltered
SizeBox 設(shè)置水平方向、垂直方向的間距
用三個(gè)單引號(hào)表示多行字符串 ''' ‘’'
集合類型Set:元素?zé)o序凌彬,不重復(fù)
11 ??= 賦值操作
當(dāng)變量有值沸柔,使用自己的值
當(dāng)變量為null,使用后面的內(nèi)容進(jìn)行賦值
12 級(jí)聯(lián)語(yǔ)法:
final p2 = Person()
..name = "why"
..run()
..eat()
..swim();
final p1 = Person();
p1.name = 'why’;
p1.run();
p1.eat();
p1.swim();
13 await
await 關(guān)鍵字必須在 async 函數(shù)內(nèi)部使用
14 設(shè)置頭像圓角
CircleAvatar
ClipOval
ClipRRect
Container + BoxDecoration + DecorationImage
15 CustomScrollView
slivers
SliverAppBar
SliverGrid
SliverList
16 檢測(cè)左上角的返回操作
外層包裝一層WillPopScope铲敛,實(shí)現(xiàn)onWillPop方法
返回為true: 使用系統(tǒng)提供的返回方法
返回為false:自定義返回方法
17 Icon 字體圖標(biāo)和圖片圖標(biāo)
字體圖標(biāo)矢量圖放大后不會(huì)失真
字體圖標(biāo)可以設(shè)置顏色
字體圖標(biāo)很多時(shí)褐澎,占據(jù)空間較小
18 build方法的執(zhí)行時(shí)機(jī):
Widget build(BuildContext context)
返回界面進(jìn)行渲染的Widget
當(dāng)Widget第一次被創(chuàng)建;當(dāng)父Widget發(fā)生改變伐蒋,子Widget會(huì)被重新構(gòu)建
19 mixin混入
mixin 關(guān)鍵字定義一個(gè)類工三,其他類通過with關(guān)鍵字進(jìn)行混入迁酸。
with 非必須實(shí)現(xiàn)方法,可以不實(shí)現(xiàn)mixin類中已經(jīng)實(shí)現(xiàn)的方法
Dart為了支持多重繼承俭正,引入了mixin關(guān)鍵字奸鬓,mixin就相當(dāng)于將其他類的能力混入到當(dāng)前類,唯一的限制就是mixin類無(wú)法擁有構(gòu)造函數(shù)掸读。這樣可以避免混入多個(gè)類時(shí)串远,父類構(gòu)造方法的調(diào)用沖突。
20 隱式接口
implements實(shí)現(xiàn)多個(gè)抽象類儿惫、普通類
implements 必須實(shí)現(xiàn)方法
可實(shí)現(xiàn)抽象類澡罚,普通類(多實(shí)現(xiàn),實(shí)現(xiàn)多個(gè)類肾请、抽象類)
一個(gè)類通過implements實(shí)現(xiàn)多個(gè)抽象類留搔,必須實(shí)現(xiàn)抽象類的所有方法(未實(shí)現(xiàn)和已實(shí)現(xiàn)的方法)
21 extends
繼承,可繼承抽象類铛铁、普通類(單繼承隔显,只能繼承一個(gè)類)
22 抽象類
關(guān)鍵字修飾:abstract
抽象類不能初始化
抽象類中的抽象方法必須被子類實(shí)現(xiàn)
抽象類中已經(jīng)實(shí)現(xiàn)的方法可以不被子類重寫
23 常量構(gòu)造方法
const 修飾
常量構(gòu)造方法的類中,所有成員變量必須是final修飾
24 工廠構(gòu)造方法
factory關(guān)鍵字修飾
可以手動(dòng)返回一個(gè)對(duì)象
25 getter饵逐、setter方法
返回值類型 get get方法名 { 方法體 }
set set方法名(參數(shù)) { 方法體 }
26 debug模式
斷言是有效的
服務(wù)擴(kuò)展是有效的
debugging是有效的
flutter run運(yùn)行
27 release模式
斷言是無(wú)效的
服務(wù)擴(kuò)展是無(wú)效的
debugging是無(wú)效的
flutter run —release
28 StatefulWidget的生命周期:
StatefulWidget的構(gòu)造函數(shù)調(diào)用
StatefulWidget的createState調(diào)用
State的構(gòu)造函數(shù)調(diào)用
State的initState調(diào)用
State的didChangeDependencies調(diào)用
State的build調(diào)用
State的dispose調(diào)用
29 try catch finally
num stringConvertNum(String str) {
num result = 0;
try {
result = num.parse(str);
} on FormatException catch (e) {
print("發(fā)生Format異常 ${e.toString()}”);
} finally {
print("禁止程序崩潰");
}
print("result = $result”);
return result;
}
30 子類和父類構(gòu)造函數(shù)調(diào)用順序
先調(diào)用父類的構(gòu)造方法括眠,再調(diào)用子類的構(gòu)造方法
31 Dart 中 num 類型分為 int 和 double ,沒有float 類型梳毙。
Dart 中 if 等語(yǔ)句只支持 bool 類型
32 強(qiáng)類型語(yǔ)言
Dart屬于是強(qiáng)類型語(yǔ)言哺窄,但可以用var來(lái)聲明變量,Dart會(huì)自推導(dǎo)出數(shù)據(jù)類型账锹。
var 實(shí)際上是編譯期的“語(yǔ)法糖”萌业。
dynamic表示動(dòng)態(tài)類型,被編譯后實(shí)際是一個(gè)object類型奸柬,在編譯期間不進(jìn)行任何的類型檢查生年,而是在運(yùn)行期進(jìn)行類型檢查。
33 Dart中一切都是對(duì)象
在Dart中一切都是對(duì)象廓奕,所有的對(duì)象都繼承自O(shè)bject抱婉。
Dart是強(qiáng)類型語(yǔ)言,但可以用var或dynamic來(lái)聲明一個(gè)變量桌粉,Dart會(huì)自動(dòng)推斷其數(shù)據(jù)類型蒸绩。
Dart沒有public protected private等關(guān)鍵字,如果某個(gè)變量以下劃線(_)開頭铃肯,代表這個(gè)變量在庫(kù)中是私有的患亿。
34 Dart語(yǔ)言的特性:
a:Dart的語(yǔ)法清晰明了,工具簡(jiǎn)單但功能強(qiáng)大押逼。
b:容易上手步藕,充分吸收了高級(jí)語(yǔ)言特性
c:響應(yīng)式編程
d:執(zhí)行速度快惦界,Dart提供提前優(yōu)化編譯,在移動(dòng)設(shè)備和Web上快速啟動(dòng)咙冗。
e:易于移植沾歪,Dart可編譯成 ARM 和 X86 代碼,這樣Dart移動(dòng)應(yīng)用程序可以在 iOS雾消、Android 和其他地方運(yùn)行灾搏。
35 WidgetsBinding.instance.addPostFrameCallback
WidgetsBinding.instance.addPostFrameCallback(_onAfterRendering);
addPostFrameCallback 是 StatefulWidget 渲染結(jié)束的回調(diào),只會(huì)被調(diào)用一次仪或,之后 StatefulWidget 需要刷新 UI 也不會(huì)被調(diào)用确镊,
36 Dart的消息機(jī)制
Dart 在單線程中是以消息循環(huán)機(jī)制來(lái)運(yùn)行的士骤,其中包含兩個(gè)任務(wù)隊(duì)列范删,一個(gè)是“微任務(wù)隊(duì)列” microtask queue,另一個(gè)叫做“事件隊(duì)列” event queue拷肌。
入口函數(shù) main() 執(zhí)行完后到旦,消息循環(huán)機(jī)制便啟動(dòng)了。
首先會(huì)按照先進(jìn)先出的順序逐個(gè)執(zhí)行微任務(wù)隊(duì)列中的任務(wù)巨缘,當(dāng)所有微任務(wù)隊(duì)列執(zhí)行完后便開始執(zhí)行事件隊(duì)列中的任務(wù)添忘,事件任務(wù)執(zhí)行完畢后再去執(zhí)行微任務(wù),如此循環(huán)往復(fù)若锁,生生不息搁骑。
37 判斷
final Brightness brightness1 = ThemeData.estimateBrightnessForColor(Colors.white);
Brightness.light
Brightness.dark
38 key
每個(gè)Widget都有唯一標(biāo)識(shí)key,
如果key作為參數(shù)傳入Widget里面,則會(huì)根據(jù)指定的名字生成key
在有些場(chǎng)景下需要保存key,并且通過key訪問該Widget
可以通過GlobalKey又固、LocalKey仲器、UniqueKey或ObjectKey進(jìn)行保存
使用場(chǎng)景:復(fù)制操作,刷新組件
39 WidgetsBinding.instance.addPostFrameCallback
addPostFrameCallback 是StatefulWidget 渲染結(jié)束的回調(diào),只會(huì)被調(diào)用一次仰冠,之后 StatefulWidget 需要刷新 UI 也不會(huì)被調(diào)用乏冀。
addPostFrameCallback 的使用方法是在 initState 里添加回調(diào):
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => {});
}
使用這個(gè)方法就可以在判斷渲染完成,并獲取到元素的大小洋只。
40 StatefulWidget - 生命周期
1 構(gòu)造函數(shù)
2 initState
3 didChangeDependencies
4 build
5 addPostFrameCallback
6 (組件狀態(tài)改變)didUpdateWidget
7 deactivate
8 dispose
showModalBottomSheet系統(tǒng)彈框
41 StatelessWidget - 生命周期
1 構(gòu)造函數(shù)初始化
2 提供build渲染
build 是用來(lái)創(chuàng)建 Widget 的辆沦,但因?yàn)?build 在每次界面刷新的時(shí)候都會(huì)調(diào)用,
所以不要在 build 里寫業(yè)務(wù)邏輯识虚,可以把業(yè)務(wù)邏輯寫到你的 StatelessWidget 的構(gòu)造函數(shù)里肢扯。
無(wú)狀態(tài)的Widget
無(wú)法提供setState修改組件的狀態(tài)
內(nèi)部屬性應(yīng)聲明為final,防止意外發(fā)生改變
42 App的生命周期
didChangeAppLifecycleState App生命周期發(fā)生變化
切換后臺(tái):
AppLifecycleState.inactive -> AppLifecycleState.paused
@override
void didChangeAppLifecycleState(AppLifecycleState state){
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.paused) {
// app退到后臺(tái)后, 刷新狀態(tài)
}
}
切換前臺(tái):
AppLifecycleState.inactive -> AppLifecycleState.resumed -> build
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
// app顯示后, 刷新狀態(tài)
if (state == AppLifecycleState.resumed) {
// 刷新代碼
}
}
43 組件移除
頁(yè)面銷毀的時(shí)候會(huì)依次執(zhí)行:
deactivate : State對(duì)象從樹中被移除時(shí)
dispose: State對(duì)象從樹中被永久移除時(shí)調(diào)用担锤;通常在此回調(diào)中釋放資源
44 GestureDetector處理手勢(shì)操作
HitTestBehavior.opaque 自己處理事件
HitTestBehavior.deferToChild child處理事件
HitTestBehavior.translucent 自己和child都可以接收事件
45 時(shí)間戳獲取
final int timestamp = DateTime.now().millisecondsSinceEpoch;
46 捕獲Flutter framework異常
FlutterError.onError = (FlutterErrorDetails details) {
LogPrint.d("捕獲Flutter framework異常 ${details.exception}");
Zone.current.handleUncaughtError(details.exception, details.stack!);
};
在2022年5月5日 上午9:35:36出現(xiàn)沖突的修改:
1 mounted:判斷頁(yè)面是否被釋放蔚晨,如果釋放了就不進(jìn)行渲染
if (mounted) {
setState(() {
});
}
2 GlobalKey的使用:
final GlobalKey<_UserInfoItemState> _globalKey = GlobalKey();
final String? userName = _globalKey.currentState?.widget.userName;
final String? userPhone = _globalKey.currentState?.userPhone;
3 安卓設(shè)備啟動(dòng)圖片的大小
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
320*480
480*800
720*1280
1080*1920
3840*2160
4 斷言assert
如果assert 的判斷為true, 則繼續(xù)執(zhí)行下面的語(yǔ)句。反之拋出一個(gè)異常妻献。
5 計(jì)算Text內(nèi)容高度TextPainter
double get descInfoHeight {
final TextPainter painter = TextPainter(
locale: WidgetsBinding.instance!.window.locale,
maxLines: 2,
textDirection: TextDirection.ltr,
text: TextSpan(
text: "",
style: TextStyle(
color: const Color(0xFF666666),
fontSize: 14.sp,
fontWeight: FontWeight.w500,
),
),
);
painter.layout(maxWidth: 170.w);
return painter.height;
}
6 計(jì)算item內(nèi)容高度
void calculateContentHeight() {
Future<void>.delayed(const Duration(), () {
if (!mounted) {
return;
}
final RenderBox renderBox = context.findRenderObject() as RenderBox;
print("width = ${renderBox.size.width}, height = ${renderBox.size.height}");
});
}
7 const和final
const:賦值的內(nèi)容必須在編譯時(shí)已經(jīng)確定
final:賦值時(shí)蛛株,可以動(dòng)態(tài)獲取团赁,賦值的內(nèi)容在運(yùn)行時(shí)已經(jīng)確定
8 dynamic和Object
dynamic調(diào)用方法時(shí),編譯不會(huì)報(bào)錯(cuò)谨履,運(yùn)行時(shí)存在安全隱患
Object類型欢摄,調(diào)用方法時(shí),編譯會(huì)報(bào)錯(cuò)
9 Dart語(yǔ)法:
Dart是單線程的
Dart中的函數(shù)不支持方法重載
設(shè)置高斯模糊 ImageFiltered
SizeBox 設(shè)置水平方向笋粟、垂直方向的間距
用三個(gè)單引號(hào)表示多行字符串 ''' ‘’'
10 Set
集合類型Set:元素?zé)o序怀挠,不重復(fù)
11 ??= 賦值操作
當(dāng)變量有值,使用自己的值
當(dāng)變量為null害捕,使用后面的內(nèi)容進(jìn)行賦值
12 級(jí)聯(lián)語(yǔ)法:
final p2 = Person()
..name = "why"
..run()
..eat()
..swim();
final p1 = Person();
p1.name = 'why’;
p1.run();
p1.eat();
p1.swim();
13 await
await 關(guān)鍵字必須在 async 函數(shù)內(nèi)部使用
14 設(shè)置頭像圓角
CircleAvatar
ClipOval
ClipRRect
Container + BoxDecoration + DecorationImage
15 CustomScrollView
slivers
SliverAppBar
SliverGrid
SliverList
16 檢測(cè)左上角的返回操作
外層包裝一層WillPopScope绿淋,實(shí)現(xiàn)onWillPop方法
返回為true: 使用系統(tǒng)提供的返回方法
返回為false:自定義返回方法
17 Icon 字體圖標(biāo)和圖片圖標(biāo)
字體圖標(biāo)矢量圖放大后不會(huì)失真
字體圖標(biāo)可以設(shè)置顏色
字體圖標(biāo)很多時(shí),占據(jù)空間較小
18 build方法的執(zhí)行時(shí)機(jī):
Widget build(BuildContext context)
返回界面進(jìn)行渲染的Widget
當(dāng)Widget第一次被創(chuàng)建尝盼;當(dāng)父Widget發(fā)生改變吞滞,子Widget會(huì)被重新構(gòu)建
22 抽象類
關(guān)鍵字修飾:abstract
抽象類不能初始化
抽象類中的抽象方法必須被子類實(shí)現(xiàn)
抽象類中已經(jīng)實(shí)現(xiàn)的方法可以不被子類重寫
23 常量構(gòu)造方法
const 修飾
常量構(gòu)造方法的類中,所有成員變量必須是final修飾
24 工廠構(gòu)造方法
factory關(guān)鍵字修飾
可以手動(dòng)返回一個(gè)對(duì)象
25 getter盾沫、setter方法
返回值類型 get get方法名 { 方法體 }
set set方法名(參數(shù)) { 方法體 }
26 debug模式
斷言是有效的
服務(wù)擴(kuò)展是有效的
debugging是有效的
運(yùn)行:flutter run
27 release模式
斷言是無(wú)效的
服務(wù)擴(kuò)展是無(wú)效的
debugging是無(wú)效的
flutter run —release
28 StatefulWidget的生命周期:
StatefulWidget的構(gòu)造函數(shù)調(diào)用
StatefulWidget的createState調(diào)用
State的構(gòu)造函數(shù)調(diào)用
State的initState調(diào)用
State的didChangeDependencies調(diào)用
State的build調(diào)用
State的dispose調(diào)用
29 try catch finally
num stringConvertNum(String str) {
num result = 0;
try {
result = num.parse(str);
} on FormatException catch (e) {
print("發(fā)生Format異常 ${e.toString()}”);
} finally {
print("禁止程序崩潰");
}
print("result = $result”);
return result;
}
30 子類和父類構(gòu)造函數(shù)調(diào)用順序
先調(diào)用父類的構(gòu)造方法裁赠,再調(diào)用子類的構(gòu)造方法
31 Dart 中 num 類型分為 int 和 double ,沒有float 類型赴精。
Dart 中 if 等語(yǔ)句只支持 bool 類型
32 強(qiáng)類型語(yǔ)言
Dart屬于是強(qiáng)類型語(yǔ)言佩捞,但可以用var來(lái)聲明變量,Dart會(huì)自推導(dǎo)出數(shù)據(jù)類型蕾哟。
var 實(shí)際上是編譯期的“語(yǔ)法糖”一忱。
dynamic表示動(dòng)態(tài)類型,被編譯后實(shí)際是一個(gè)object類型谭确,在編譯期間不進(jìn)行任何的類型檢查帘营,而是在運(yùn)行期進(jìn)行類型檢查。
33 Dart中一切都是對(duì)象
在Dart中一切都是對(duì)象琼富,所有的對(duì)象都繼承自O(shè)bject仪吧。
Dart沒有public protected private等關(guān)鍵字,如果某個(gè)變量以下劃線(_)開頭鞠眉,代表這個(gè)變量在庫(kù)中是私有的薯鼠。
34 Dart語(yǔ)言的特性:
a:Dart的語(yǔ)法清晰明了,工具簡(jiǎn)單但功能強(qiáng)大械蹋。
b:容易上手出皇,充分吸收了高級(jí)語(yǔ)言特性
c:響應(yīng)式編程
d:執(zhí)行速度快,Dart提供提前優(yōu)化編譯哗戈,在移動(dòng)設(shè)備和Web上快速啟動(dòng)郊艘。
e:易于移植,Dart可編譯成 ARM 和 X86 代碼,這樣Dart移動(dòng)應(yīng)用程序可以在 iOS纱注、Android 和其他地方運(yùn)行畏浆。
35 WidgetsBinding.instance.addPostFrameCallback
WidgetsBinding.instance.addPostFrameCallback(_onAfterRendering);
addPostFrameCallback 是 StatefulWidget 渲染結(jié)束的回調(diào),只會(huì)被調(diào)用一次狞贱,之后 StatefulWidget 需要刷新 UI 也不會(huì)被調(diào)用刻获,
36 Dart的消息機(jī)制
Dart 在單線程中是以消息循環(huán)機(jī)制來(lái)運(yùn)行的,其中包含兩個(gè)任務(wù)隊(duì)列瞎嬉,一個(gè)是“微任務(wù)隊(duì)列” microtask queue蝎毡,另一個(gè)叫做“事件隊(duì)列” event queue。
入口函數(shù) main() 執(zhí)行完后氧枣,消息循環(huán)機(jī)制便啟動(dòng)了沐兵。
首先會(huì)按照先進(jìn)先出的順序逐個(gè)執(zhí)行微任務(wù)隊(duì)列中的任務(wù),當(dāng)所有微任務(wù)隊(duì)列執(zhí)行完后便開始執(zhí)行事件隊(duì)列中的任務(wù)便监,事件任務(wù)執(zhí)行完畢后再去執(zhí)行微任務(wù)扎谎,如此循環(huán)往復(fù),生生不息茬贵。
37 判斷
final Brightness brightness1 = ThemeData.estimateBrightnessForColor(Colors.white);
Brightness.light
Brightness.dark
38 key
每個(gè)Widget都有唯一標(biāo)識(shí)key,
如果key作為參數(shù)傳入Widget里面簿透,則會(huì)根據(jù)指定的名字生成key
在有些場(chǎng)景下需要保存key,并且通過key訪問該Widget
可以通過GlobalKey移袍、LocalKey解藻、UniqueKey或ObjectKey進(jìn)行保存
使用場(chǎng)景:復(fù)制操作,刷新組件
39 WidgetsBinding.instance.addPostFrameCallback
addPostFrameCallback 是StatefulWidget 渲染結(jié)束的回調(diào),只會(huì)被調(diào)用一次葡盗,之后 StatefulWidget 需要刷新 UI 也不會(huì)被調(diào)用螟左。
addPostFrameCallback 的使用方法是在 initState 里添加回調(diào):
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => {});
}
使用這個(gè)方法就可以在判斷渲染完成,并獲取到元素的大小觅够。
40 StatefulWidget - 生命周期
1 構(gòu)造函數(shù)
2 initState
3 didChangeDependencies
4 build
5 addPostFrameCallback
6 (組件狀態(tài)改變)didUpdateWidget
7 deactivate
8 dispose
41 StatelessWidget - 生命周期
1 構(gòu)造函數(shù)初始化
2 提供build渲染
build 是用來(lái)創(chuàng)建 Widget 的胶背,但因?yàn)?build 在每次界面刷新的時(shí)候都會(huì)調(diào)用,
所以不要在 build 里寫業(yè)務(wù)邏輯喘先,可以把業(yè)務(wù)邏輯寫到你的 StatelessWidget 的構(gòu)造函數(shù)里钳吟。
無(wú)狀態(tài)的Widget
無(wú)法提供setState修改組件的狀態(tài)
內(nèi)部屬性應(yīng)聲明為final,防止意外發(fā)生改變
42 App的生命周期
didChangeAppLifecycleState App生命周期發(fā)生變化
切換后臺(tái):
AppLifecycleState.inactive -> AppLifecycleState.paused
@override
void didChangeAppLifecycleState(AppLifecycleState state){
super.didChangeAppLifecycleState(state);
// app退到后臺(tái)
if (state == AppLifecycleState.paused) {
}
}
切換前臺(tái):
AppLifecycleState.inactive -> AppLifecycleState.resumed
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
// app回到前臺(tái)
if (state == AppLifecycleState.resumed) {
}
}
43 組件移除
頁(yè)面銷毀的時(shí)候會(huì)依次執(zhí)行:
deactivate : State對(duì)象從樹中被移除時(shí)
dispose: State對(duì)象從樹中被永久移除時(shí)調(diào)用窘拯;通常在此回調(diào)中釋放資源
44 GestureDetector處理手勢(shì)操作
HitTestBehavior.opaque 自己處理事件
HitTestBehavior.deferToChild child處理事件
HitTestBehavior.translucent 自己和child都可以接收事件
45 時(shí)間戳獲取
final int timestamp = DateTime.now().millisecondsSinceEpoch;
46 捕獲Flutter framework異常
FlutterError.onError = (FlutterErrorDetails details) {
LogPrint.d("捕獲Flutter framework異常 ${details.exception}");
Zone.current.handleUncaughtError(details.exception, details.stack!);
};
47 Flutter創(chuàng)建module
flutter create -t module flutter_module
48 widget 樹的 root 節(jié)點(diǎn)
runApp()方法中的 Widget红且。
49 編譯模式
Flutter 的 Debug 下是 JIT 模式,release 下是 AOT 模式涤姊。
50 AutomaticKeepAliveClientMixin
Flutter 中可以通過 mixin AutomaticKeepAliveClientMixin 暇番,
然后重寫 wantKeepAlive 保持住頁(yè)面,build 中調(diào)用super.build 思喊。
51 如何實(shí)現(xiàn)點(diǎn)擊空白區(qū)域收起鍵盤壁酬?
FocusScope.of(context).requestFocus(FocusNode());
52 如何統(tǒng)一管理錯(cuò)誤頁(yè)面?
// 自定義錯(cuò)誤頁(yè)面
ErrorWidget.builder = (FlutterErrorDetails flutterErrorDetails) {
return const Text("data");
};
53 Dart 屬于是強(qiáng)類型語(yǔ)言
Dart 屬于是強(qiáng)類型語(yǔ)言 ,但可以用 var 來(lái)聲明變量舆乔,
Dart 會(huì)自推導(dǎo)出數(shù)據(jù)類型岳服,var 實(shí)際上是編譯期的“語(yǔ)法糖”。
dynamic 表示動(dòng)態(tài)類型希俩,被編譯后派阱,實(shí)際是一個(gè) object 類型,
在編譯期間不進(jìn)行任何的類型檢查斜纪,而是在運(yùn)行期進(jìn)行類型檢查贫母。
Flutter知識(shí)積累
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吩愧,“玉大人芋酌,你說我怎么就攤上這事⊙慵眩” “怎么了脐帝?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)糖权。 經(jīng)常有香客問我堵腹,道長(zhǎng),這世上最難降的妖魔是什么星澳? 我笑而不...
- 正文 為了忘掉前任疚顷,我火速辦了婚禮,結(jié)果婚禮上禁偎,老公的妹妹穿的比我還像新娘腿堤。我一直安慰自己,他們只是感情好届垫,可當(dāng)我...
- 文/花漫 我一把揭開白布释液。 她就那樣靜靜地躺著,像睡著了一般装处。 火紅的嫁衣襯著肌膚如雪误债。 梳的紋絲不亂的頭發(fā)上浸船,一...
- 文/蒼蘭香墨 我猛地睜開眼耍鬓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阔籽!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起牲蜀,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笆制,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后涣达,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體在辆,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年度苔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匆篓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站横漏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏熟掂。R本人自食惡果不足惜缎浇,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赴肚。 院中可真熱鬧素跺,春花似錦、人聲如沸誉券。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)踊跟。三九已至踩验,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箕憾。 一陣腳步聲響...
- 正文 我出身青樓钠龙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親御铃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碴里,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 一 Dart基礎(chǔ): Flutter使用Dart進(jìn)行開發(fā),Dart支持JIT與AOT兩種模式上真。app運(yùn)行模式有三種...
- 這8種學(xué)生永遠(yuǎn)拿不到高分犀填!早看早受益! 下面是一位資深班主任總結(jié)了8種成績(jī)提不上去的原因嗓违,分別對(duì)應(yīng)8類孩子九巡,如果你...
- 這8種學(xué)生永遠(yuǎn)拿不到高分!早看早受益涕滋! 下面是一位資深班主任總結(jié)了8種成績(jī)提不上去的原因睬辐,分別對(duì)應(yīng)8類孩子,如果你...
- 怎樣反思自己的教學(xué)——學(xué)習(xí)杜威《我們?cè)鯓铀季S》有感 2015-01-13 14:56:52 來(lái)源:普寧市第三中學(xué)網(wǎng)...
- 小學(xué)寒假培訓(xùn)機(jī)構(gòu)哪個(gè)好增拥?名思教育13年專注1對(duì)1啄巧,承諾用心教好每一個(gè)孩子寻歧。 語(yǔ)文學(xué)習(xí)并不是沒有方法,只是需要較長(zhǎng)時(shí)...