Flutter學(xué)習(xí)(二)基礎(chǔ)知識(shí)
Dart語(yǔ)言的基本知識(shí)必須要掌握,關(guān)鍵字和運(yùn)算符必須至少學(xué)習(xí)一遍。網(wǎng)上有很多教程,此處不展開(kāi)來(lái)講??梢詤⒖脊俜轿臋nhttps://flutter.cn/docs/resources/bootstrap-into-dart。
Flutter應(yīng)用中,所有用戶看到的“東西”皆是Widget。圖片、按鈕、文字這些常規(guī)的控件是我們熟悉的,還有布局(Stack,Align,F(xiàn)lex,ListView等),邊距(Padding),可視(Visibility)等等,它們都是Widget。
下面看看Hello World中的兩個(gè)Widget:
MaterialApp:Flutter自帶的主題Widget,可以設(shè)置各種主題顏色,包含更多主題的Widget,例如Scaffold,TextField等。如果不用MaterialApp會(huì)怎樣?結(jié)果就是連個(gè)輸入框都沒(méi)有,需要造輪子或者找輪子。
Scaffold:依賴MaterialApp的一個(gè)排版布局的Widget,支持很多功能,如標(biāo)題,左邊返回按鈕,右邊工具按鈕,底部導(dǎo)航等。
其他Widget就不一一介紹了,想用的時(shí)候再去找就行。想查看全部Widget可以參考官方文檔https://flutter.cn/docs/reference/widgets。
當(dāng)我們學(xué)會(huì)了寫界面的時(shí)候,接下來(lái)要做的大概就是界面的跳轉(zhuǎn)和返回,這里貼一下自定義的方法:
void push(BuildContext context,Widget widget, {OnRouteResult? callback}) {
? ? Navigator.of(context).push(MaterialPageRoute<ApiResult>(builder: (context) => widget)).then((value) {
? ? ? callback?.call(value ?? ResultImpl(-1, "cancel"));
? ? });
? }
void pop(BuildContext context,[ApiResult? result]) {
? ? Navigator.of(context).maybePop(result);
? }
context:Widget內(nèi)的變量,StatelessWidget中只有build方法才能獲得context對(duì)象,可以在按鈕的回調(diào)方法可以這么寫onPressed: () => _doSomething(context),這樣就可以拿到context對(duì)象;
widget:需要跳轉(zhuǎn)的界面;
callback:需要監(jiān)聽(tīng)從widget返回時(shí)攜帶的數(shù)據(jù);
Navigator:Flutter的路由功能類;
MaterialPageRoute:Navigator.push方法的參數(shù),MaterialPageRoute<ApiResult>表示widget返回的數(shù)據(jù)是ApiResult抽象類型,ResultImpl是ApiResult的實(shí)例;
then:Dart異步知識(shí),不知道需要去學(xué)習(xí)Dart異步Future;
value:widget返回時(shí)攜帶的數(shù)據(jù),可以是空。