官术网_书友最值得收藏!

1.1.2 入口文件及MyApp分析

當你運行初始項目后,可以看到下頁所示的界面。從Android開發者的角度來看,它是由Toolbar、TextView、FloatingActionButton組成的界面。但打開布局邊界查看時,發現并非如此,而是整個頁面只是一個布局,這是為什么呢?

如果是第一次遇見它,對它一無所知,你會如何去分析?當初我是這么做的:既然已經有界面,那么界面上的文字一定會存在于代碼中,這便是突破點。用AndroidStudio的全局搜索功能“Find in Path”(Edit→Find→Find in Path)鎖定界面上的“Home Page”關鍵字,發現線索在main.dart里:

由下面代碼的第一行可以看出是導入包,使用import關鍵字引入flutter包中的material.dart文件。在第二行看到main函數,很自然地想到程序的入口,再根據面向對象的思想來看:runApp函數中傳入的是一個MyApp對象,作為main函數的執行體,所以具有追尋價值的是MyApp。

一開始接觸箭頭你可能有點不適應,但以后你會對它愛不釋手。它是Dart中函數的一種簡化書寫,當函數體只有一行語句時,可以簡寫。下面的代碼,左側等價于右側:

下面是關于MyApp的代碼,可以看出MyApp是一個繼承自StatelessWidget的類,并重寫了build方法,返回Widget對象。既然如此,MaterialApp必然是一個Widget對象,而本文件中并未定義該類,所以必然在上面引入的包中,這是基本的邏輯分析。


class MyApp extends StatelessWidget {
  @override //這個組件是你應用的根組件
  Widget build(BuildContext context) {
    return MaterialApp( title: 'Flutter Demo',
      theme: ThemeData(// 這是你應用的主題
        primarySwatch: Colors.blue, ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    ); 
 }
}

雖然是不同的語言,但是面向對象的思想是不變的。即使是在一個新的領域,也總能找出你的技能匹配點。所以可以進行最基本的邏輯推理來認識未知事物,這是面臨新環境時很有用的技巧。去推理和思考,就很容易將新舊知識進行關聯,也更容易掌握它。

當運行應用時,你將會看到應用有一個藍色的toolbar(下圖左)。之后,不退出應用,嘗試將上面代碼的primarySwatch改成Colors.green,再進行熱啟動(在控制臺里輸入r,或直接在IDE中保存你的修改),可以看到計數器沒有歸零,你的應用沒有重新啟動,但toolbar變成了綠色(下圖右)。

主站蜘蛛池模板: 个旧市| 中宁县| 襄樊市| 竹北市| 旅游| 河池市| 五台县| 吉木乃县| 新化县| 丹东市| 江油市| 鄂托克旗| 沿河| 蒙阴县| 岗巴县| 本溪市| 德州市| 石阡县| 扎兰屯市| 秦皇岛市| 大竹县| 专栏| 呼玛县| 云和县| 宁南县| 吴旗县| 禄丰县| 临武县| 蓝山县| 五指山市| 申扎县| 沿河| 景洪市| 清新县| 栾城县| 庆阳市| 普格县| 宜春市| 双江| 安塞县| 寿宁县|