1.Flutter項(xiàng)目的目錄結(jié)構(gòu)
我們著重需要注意一下幾個(gè)文件夾,其他的暫時(shí)不用理會(huì)
android:android平臺(tái)相關(guān)代碼
ios:ios平臺(tái)相關(guān)代碼
lib:flutter相關(guān)代碼,我們主要編寫(xiě)的代碼就在這個(gè)文件夾
test:用于存放測(cè)試代碼
pubspec.yaml:配置文件,一般存放一些第三方的依賴。
2.分析
(1).導(dǎo)入包:
import'package:flutter/material.dart';
此行代碼作用是導(dǎo)入了Material UI組件庫(kù)吭历。Material是一種標(biāo)準(zhǔn)的移動(dòng)端和web端的視覺(jué)設(shè)計(jì)語(yǔ)言掀鹅, Flutter默認(rèn)提供了一套豐富的Material風(fēng)格的UI組件念恍。
(2).應(yīng)用入口:
void main() => runApp(new MyApp());
(3).應(yīng)用結(jié)構(gòu):
MyApp類(lèi)代表Flutter應(yīng)用已卸,它繼承了StatelessWidget類(lèi)囚霸,這也就意味著應(yīng)用本身也是一個(gè)widget翠订。
在Flutter中缓升,大多數(shù)東西都是widget,包括對(duì)齊(alignment)蕴轨、填充(padding)和布局(layout)港谊。
Flutter在構(gòu)建頁(yè)面時(shí),會(huì)調(diào)用組件的build方法橙弱,widget的主要工作是提供一個(gè)build()方法來(lái)描述如何構(gòu)建UI界面(通常是通過(guò)組合歧寺、拼裝其它基礎(chǔ)widget)燥狰。
MaterialApp是Material庫(kù)中提供的Flutter APP框架,通過(guò)它可以設(shè)置應(yīng)用的名稱斜筐、主題龙致、語(yǔ)言、首頁(yè)及路由列表等顷链。MaterialApp也是一個(gè)widget目代。
Scaffold是Material庫(kù)中提供的頁(yè)面腳手架,它包含導(dǎo)航欄和Body以及FloatingActionButton(如果需要的話)嗤练。 本書(shū)后面示例中榛了,路由默認(rèn)都是通過(guò)Scaffold創(chuàng)建。
home為Flutter應(yīng)用的首頁(yè)煞抬,它也是一個(gè)widget霜大。
(4).首頁(yè)
MyHomePage是應(yīng)用的首頁(yè),它繼承自StatefulWidget類(lèi)革答,表示它是一個(gè)有狀態(tài)的widget(Stateful widget)≌嚼ぃ現(xiàn)在,我們可以簡(jiǎn)單認(rèn)為Stateful widget 和Stateless widget有兩點(diǎn)不同:
Stateful widget可以擁有狀態(tài)残拐,這些狀態(tài)在widget生命周期中是可以變的途茫,而Stateless widget是不可變的。
Stateful widget至少由兩個(gè)類(lèi)組成:
????? 一個(gè)StatefulWidget類(lèi)溪食。
???? 一個(gè) State類(lèi)囊卜;StatefulWidget類(lèi)本身是不變的,但是 State類(lèi)中持有的狀態(tài)在widget生命周期中可能會(huì)發(fā)生變化眠菇。
為了開(kāi)發(fā)的靈活性边败,我們一般將build()方法放在State中袱衷,這樣的話捎废,構(gòu)建過(guò)程則可以直接訪問(wèn)狀態(tài),這樣會(huì)很方便致燥。