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變成了綠色(下圖右)。
- Spring技術內幕:深入解析Spring架構與設計
- 自己動手寫Java虛擬機
- Twilio Best Practices
- 人人都是網站分析師:從分析師的視角理解網站和解讀數據
- Java EE 8 Application Development
- Learning Unity 2D Game Development by Example
- 低代碼平臺開發實踐:基于React
- HTML 5與CSS 3權威指南(第3版·上冊)
- Hands-On GUI Programming with C++ and Qt5
- Hadoop 2.X HDFS源碼剖析
- Android 游戲開發大全(第二版)
- PHP動態網站開發實踐教程
- 用Python動手學統計學
- 透視C#核心技術:系統架構及移動端開發
- JavaScript Unit Testing