flutter筆記3:基礎(chǔ)語(yǔ)法安吁、框架、控件

flutter環(huán)境和運(yùn)行環(huán)境搭建好之后燃辖,可以開(kāi)始擼碼了鬼店,然而當(dāng)你打開(kāi)VScode,在打開(kāi)項(xiàng)目文件夾后黔龟,擺在你面前的是main.dart被打開(kāi)的樣子妇智,里面七七八八的已經(jīng)寫(xiě)好了一堆代碼,是不是很懵逼氏身?

項(xiàng)目默認(rèn)打開(kāi)的main.dart

不要緊巍棱,人家官方文檔上說(shuō)了,flutter的玩家不需要Dart和移動(dòng)端語(yǔ)言開(kāi)發(fā)經(jīng)驗(yàn)蛋欣,只需要熟悉面向?qū)ο缶幊碳纯伞?br> 神馬航徙?面向?qū)ο笠膊欢窟€是百度打打基礎(chǔ)去吧陷虎。到踏。倒得。

先來(lái)點(diǎn)下酒菜

簡(jiǎn)單了解下上圖中的幾個(gè)標(biāo)記的編號(hào):
A. main.dart
此文件是每一個(gè)flutter項(xiàng)目的默認(rèn)入口文件,也就是說(shuō)每個(gè)flutter項(xiàng)目啟動(dòng)的時(shí)候夭禽,默認(rèn)先運(yùn)行這個(gè)文件的代碼霞掺,這個(gè)入口文件理論上應(yīng)該是可以配置的,不過(guò)我還不知道在哪配讹躯,大神請(qǐng)留言菩彬,嘿嘿。注意看它所在的路徑潮梯,在項(xiàng)目根目錄的lib文件下骗灶,而文件的后綴名.dart是flutter文件的格式,是不是很容易聯(lián)想到flutter使用的dart語(yǔ)言秉馏。

B.import 'package:flutter/material.dart';
每一個(gè).dart文件的第一行都會(huì)導(dǎo)入flutter/material.dart包耙旦,這個(gè)包是Flutter實(shí)現(xiàn)Material Design設(shè)計(jì)風(fēng)格的基礎(chǔ)包,里面有文本輸入框(Text)萝究、圖標(biāo)(Icon)免都、圖片(Image)、行排列布局(Align)帆竹、列排列布局(Column)绕娘、Decoration(我也不知道是啥)、異步(%#¥@暈倒..)栽连、動(dòng)畫(huà)等等等等控件险领,大家可以理解為網(wǎng)頁(yè)中的按鈕、標(biāo)題秒紧、選項(xiàng)框呀等等控件庫(kù)吧绢陌。

Material Design是啥?是谷歌推出的一套視覺(jué)設(shè)計(jì)語(yǔ)言熔恢。比如有的APP可以換皮膚脐湾,而每一套皮膚就是一種設(shè)計(jì)語(yǔ)言,有古典風(fēng)呀炫酷風(fēng)呀極簡(jiǎn)風(fēng)呀神馬的绩聘,而Material Design就是谷歌風(fēng)沥割,有興趣的同學(xué)可以學(xué)習(xí)了解一下Material Design官方原版Material Design中文翻譯版,這是每一個(gè)產(chǎn)品經(jīng)理的必修教材凿菩。

C.void main() => runApp(new MyApp());
有點(diǎn)像ES6語(yǔ)法的箭頭函數(shù)是不是机杜?對(duì)學(xué)習(xí)過(guò)前端開(kāi)發(fā)的同學(xué)是不是很熟悉呀,意思等同于:

void main() {
return runApp(Widget app);
}

這里的main()函數(shù)是Dart程序的入口衅谷,也就是說(shuō)椒拗,F(xiàn)lutter程序在運(yùn)行的時(shí)候,第一個(gè)執(zhí)行的函數(shù)就是main()函數(shù),結(jié)合A的入口文件蚀苛,flutter項(xiàng)目默認(rèn)執(zhí)行的第一句代碼在验,就是main.dart文件里的void main() => runApp(new MyApp());

D和E.StatelessWidgetStatefulWidget
這是flutter最基礎(chǔ)的的兩種控件類(lèi),分別叫無(wú)狀態(tài)類(lèi)和有狀態(tài)類(lèi)堵未,兩者的差別在于是否有狀態(tài)腋舌,玩家創(chuàng)建的所有控件都繼承自這兩個(gè)控件。當(dāng)你想展示的內(nèi)容只需要改動(dòng)控件本身的配置信息就可以實(shí)現(xiàn)時(shí)渗蟹,例如文本块饺、圖片等,可以考慮使用無(wú)狀態(tài)控件(StatelessWidget)雌芽。如果你想展示的內(nèi)容是可以動(dòng)態(tài)改變才能實(shí)現(xiàn)時(shí)授艰,例如滾動(dòng)列表、動(dòng)畫(huà)效果等世落,可以考慮使用有狀態(tài)控件(StatefulWidget)淮腾。

其實(shí)我也不是很明白,StatefulWidget還有生命周期一說(shuō)屉佳,具體怎么回事谷朝,大家可以參考何小有《Flutter框架基礎(chǔ)》,如果你悟性好忘古,分分鐘貫通也說(shuō)不定徘禁。

寫(xiě)一個(gè)APP試試?

前面寫(xiě)了一大堆廢話髓堪,高手們已經(jīng)不耐煩,萌新們看不懂我也不管了娘荡,擼一管官方萌新教程先~

第一步

main.dart里的代碼替換成這個(gè):

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Welcome to Flutter',
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('Welcome to Flutter'),
         ),
        body: new Center(
          child: new Text('Hello World'),
        ),
      ),
    );
  }
}

保存之后干旁,到終端里輸入這個(gè):

flutter doctor
flutter run

看看你的測(cè)試機(jī)都發(fā)生了什么,好了炮沐,恭喜争群!你的flutter人生的第一個(gè)hallo world告成~!

牢記這一點(diǎn)大年,flutter中的一切都是控件(Widget换薄,有的文章稱呼組件,就當(dāng)作一個(gè)意思吧)翔试,控件是可以嵌套的轻要,嵌套后就會(huì)形成組件樹(shù)。

上面的代碼可以簡(jiǎn)單看看垦缅,能懂多少是多少吧冲泥,對(duì)熟悉面向?qū)ο蟮耐瑢W(xué)應(yīng)該沒(méi)有難度。

第二步

打開(kāi)文件pubspec.yaml,在這里加一句代碼english_words: ^3.1.0并保存:

引入外部包

你會(huì)看到終端有動(dòng)作:


引包后熱更新

再回到*main.dart文件凡恍,加一句代碼import 'package:english_words/english_words.dart';

引入的包從未使用過(guò)

這時(shí)控制臺(tái)的問(wèn)題欄也會(huì)彈出一個(gè)提示:

不好好利用引入的包的后果

這是flutter的一個(gè)擼碼規(guī)則志秃,為了保證代碼的高效和簡(jiǎn)潔,避免引入無(wú)用的包造成程序臃腫嚼酝、運(yùn)行效率低下浮还,然后我們?cè)傩薷囊幌麓a并保存:


字符串的駝峰格式化

這時(shí)候APP里的Hello World變成了下面這個(gè)樣子:

好不好玩呀

到終端中按 r 鍵,在APP中發(fā)現(xiàn)什么變化都沒(méi)有闽巩,而按 R 鍵碑定,APP重啟,屏幕中央的字符串隨機(jī)改變了又官,說(shuō)明APP一旦啟動(dòng)后延刘,玩家創(chuàng)建的無(wú)狀態(tài)控件實(shí)例中的屬性值定義后,刷新頁(yè)面不會(huì)再更新六敬,官方的說(shuō)法是無(wú)狀態(tài)控件實(shí)例中的屬性值為final類(lèi)型碘赖,意味著一旦定義將無(wú)法變更,只有APP重啟后外构,重新執(zhí)行代碼普泡,這時(shí)候重生了控件實(shí)例,所以屏幕中央的字符串改變了审编,但是用 r 還是不會(huì)變撼班。

第三步

這次來(lái)點(diǎn)有難度的,用到了StatefulWidget控件垒酬,請(qǐng)將main.dart的代碼替換為:

import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // final wordPair = new WordPair.random();
    return new MaterialApp(
      title: 'Welcome to Flutter',
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('Hello Flutter'),
        ),
        body: new Center(
          // child: new Text('Hello World'),
          // child: new Text(wordPair.asPascalCase), //asPascalCase 駝峰樣式砰嘁,字符串中的每個(gè)單詞的首字母都會(huì)大寫(xiě)
              child: new RandomWords(),  //定義子控件為有狀態(tài)控件RandomWords的實(shí)例
        ),
      ),
    );
  }
}
//定義了一個(gè)有狀態(tài)控件,繼承自StatefulWidget
class RandomWords extends StatefulWidget {
  @override
  createState() => new RandomWordsState();  //為StatefulWidget控件RandomWords定義一個(gè)狀態(tài)類(lèi)
}
//定義了一個(gè)狀態(tài)控件勘究,繼承自狀態(tài)類(lèi)State<RandomWords>矮湘,<RandomWords>指明這個(gè)狀態(tài)控件是RandomWords控件的
class RandomWordsState extends State<RandomWords> {
    @override
    Widget build(BuildContext context) {
      final wordPair = new WordPair.random();
      return new Text(wordPair.asPascalCase);
    }
}

保存代碼后,再到終端口糕,每按一次 r 鍵缅阳,APP中央的字符串就會(huì)隨機(jī)改變,這就是StatefulWidget類(lèi)的特性景描,其實(shí)例內(nèi)的屬性值可以在對(duì)象實(shí)例化后隨意變更十办,一個(gè)StatefulWidget控件至少包含兩個(gè)類(lèi),一個(gè)是用于實(shí)例化的StatefulWidget類(lèi)超棺,一個(gè)是它的State狀態(tài)類(lèi)向族。純粹的StatefulWidget控件本身是不可變的,但是它的State類(lèi)會(huì)在StatefulWidget控件的整個(gè)生命周期持續(xù)存在说搅。

經(jīng)過(guò)這么一折騰炸枣,我也對(duì)StatefulWidget和StatelessWidget的特性有個(gè)了一個(gè)簡(jiǎn)單的認(rèn)識(shí),不知道小伙伴們感覺(jué)如何呀,如果還有不明白的地方适肠,請(qǐng)?jiān)诹粞灾刑釂?wèn)霍衫,flutter圈子說(shuō)不定哪個(gè)大牛心情好會(huì)有解答喲。

本篇就介紹到這里侯养,大家可以自行敲敲代碼敦跌,多體驗(yàn)體驗(yàn),從知道flutter到現(xiàn)在36小時(shí)逛揩,而我能寫(xiě)到這里柠傍,首先感謝技術(shù)達(dá)人狐神的大力支持,幫我拉來(lái)了flutter先驅(qū)何小有和一梭子前端大神辩稽,再者感謝何小有flutter圈子的入門(mén)掃盲貼投稿惧笛,也感謝大家的支持,我也就不再?gòu)U話什么自我激勵(lì)了逞泄,總之 加油~患整!

再啰嗦一句廣告,對(duì)flutter感興趣的小伙伴可以關(guān)注我喷众,歡迎大家到Flutter圈子中投稿各谚,也可以聯(lián)系管理員加入我們的flutter微信群嗨聊,謝謝捧場(chǎng)~到千!
flutter 中文社區(qū)(官方QQ群:338252156)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昌渤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子憔四,更是在濱河造成了極大的恐慌膀息,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件加矛,死亡現(xiàn)場(chǎng)離奇詭異履婉,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)斟览,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辑奈,“玉大人苛茂,你說(shuō)我怎么就攤上這事○埃” “怎么了妓羊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)稍计。 經(jīng)常有香客問(wèn)我躁绸,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任净刮,我火速辦了婚禮剥哑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淹父。我一直安慰自己株婴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布暑认。 她就那樣靜靜地躺著困介,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蘸际。 梳的紋絲不亂的頭發(fā)上座哩,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音粮彤,去河邊找鬼根穷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛驾诈,可吹牛的內(nèi)容都是我干的缠诅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼乍迄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼管引!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起闯两,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤褥伴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后漾狼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體重慢,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年逊躁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了似踱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稽煤,死狀恐怖核芽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酵熙,我是刑警寧澤轧简,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站匾二,受9級(jí)特大地震影響哮独,放射性物質(zhì)發(fā)生泄漏拳芙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一皮璧、第九天 我趴在偏房一處隱蔽的房頂上張望舟扎。 院中可真熱鬧,春花似錦恶导、人聲如沸浆竭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邦泄。三九已至,卻和暖如春裂垦,著一層夾襖步出監(jiān)牢的瞬間顺囊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工蕉拢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留特碳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓晕换,卻偏偏與公主長(zhǎng)得像午乓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闸准,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評(píng)論 25 707
  • Flutter應(yīng)用程序是由一些零散且有關(guān)聯(lián)的控件組成的益愈,那么控件是什么?控件夷家,就是你在屏幕上看到那些東西蒸其。例如,一...
    何小有閱讀 17,304評(píng)論 4 31
  • 今天才知道,原來(lái)哭的夠久眼睛就可以腫起來(lái)义屏,而不必等到一覺(jué)醒來(lái)時(shí)靠汁,喚醒快要被遺忘的心情。 而我闽铐,是為一只狗膀曾。 它是一...
    橙子柚子西葫蘆閱讀 417評(píng)論 1 2
  • 上網(wǎng)搜了一大堆,但也沒(méi)有解決問(wèn)題 參考了別人的UC開(kāi)發(fā)調(diào)試: 費(fèi)了好大勁終于在PC上的chrome實(shí)現(xiàn)了調(diào)試财喳,然而...
    竹杖芒鞋輕勝碼閱讀 1,555評(píng)論 0 0
  • 當(dāng)一種日子過(guò)久了察迟,有了某種的味道斩狱,這種味道會(huì)深深地烙在記憶里,繚繞在回憶人的心頭扎瓶,揮之不去所踊。
    Ctian閱讀 127評(píng)論 0 0