發表日期:2018-08 文章編輯:小燈 瀏覽次數:1518
參考官方配置,很容易就配置完畢后https://flutterchina.club/setup-linux/,可能在執行 flutter doctor
會報device 找不到的問題,連上手機或者模擬器再執行一遍,基本就不會報錯了。
Flutter總共分為四層,從下到上分別是:dart:ui,Rendering,Widgets,Material。參照下圖:
dart:ui是flutter底層引擎所提供的一個dart庫,是flutter對dart標準庫的一個擴展。它提供了一套基于canvas的繪圖api,也包含了用于跟操作系統交互的模塊mojo,當然,還包括了所有dart標準庫。dart:ui提供最基礎的底層api,要直接使用它,你必須寫非常多的代碼,進行大量的運算:比如在每一幀中計算每個組件的坐標,編碼工作很繁瑣。一般來說,開發者不會直接使用dart:ui,但如果他們需要寫一些特殊的應用,比如開發游戲,那可能就需要在dart:ui的基礎上去構建自己的框架。
Rendering層是布局(排版)抽象層,它把dart:ui層api抽象封裝成大量的Render對象,免除了大量布局坐標的手動計算,并還對布局數據進行了緩存處理,提升了渲染效率。開發者使用層層嵌套的構造函數來構建一個render對象樹,當發生用戶交互或者數據發生改變時,需要顯式更新對應的render對象,即更新UI。 這樣的設計與其他UI系統非常類似,比如:web的dom,android與ios的視圖層等。因為遵循了傳統的開發思路,喜歡這種方式的開發者可以直接使用本層的api進行開發。
Widgets層是對Rendering層對象的封裝層,它引入element對象以及StatefulBuilder來管理底層的render對象,開發者使用不可變的Widget對象來創建UI,當數據發生變化的時候,再重新構建一個新的widget樹即可,不再需要使用分離的代碼來維護UI(Rendering層就要用一部分代碼構建初始UI,另一部分更新UI)。這一層應該就是flutter默認的或者說最基礎的組件庫,你可以繼承并修改它們,做成屬于自己的組件。
Material層相對來說最容易理解,它們就是使用Widgets層對象,實現了Material Design的頂層UI組件。
語言
Language Tour, 講解語言基礎 - https://www.dartlang.org/guides/language/language-tour 212
Library Tour, 講解標準庫 - https://www.dartlang.org/guides/libraries/library-tour 12
Effective Dart,講解編碼最佳實踐 - https://www.dartlang.org/guides/language/effective-dart 10
Futures, 講解異步編程之Futures - https://www.dartlang.org/tutorials/language/futures 12
Streams, 講解異步編程之Streams - https://www.dartlang.org/tutorials/language/streams 6
Sound Dart, 講解Dart的類型系統 - https://www.dartlang.org/guides/language/sound-dart 1
Dart API文檔 - https://api.dartlang.org/ 29
工具
Pub即Dart包管理器入門 - https://www.dartlang.org/tools/pub/get-started 11
定制Dart靜態分析 - https://www.dartlang.org/guides/language/analysis-options 2
myapp
), 然后點擊 Next上述命令創建一個Flutter項目,項目名為myapp,其中包含一個使用Material 組件的簡單演示應用程序。
在項目目錄中,您應用程序的代碼位于 lib/main.dart
.
第一次創建會比較慢,在國內鏡像url都已經配置好的情況下,稍微等待幾分鐘就會創建完成。
每個flutter都是有一個包管理配置文件pubspec.yaml
,在這里可以引入外部包,可以引入字體庫和一些本地圖片等資源
name: flutter_layout description: A new Flutter application.dependencies: flutter: sdk: flutter cupertino_icons: ^0.1.2dev_dependencies: flutter_test: sdk: flutteruses-material-design: true assets: - images/fonts:- family: Schylerfonts:- asset: fonts/Schyler-Regular.ttf- asset: fonts/Schyler-Italic.ttfstyle: italic- family: Trajan Profonts:- asset: fonts/TrajanPro.ttf- asset: fonts/TrajanPro_Bold.ttfweight: 700
Stateless widgets 是不可變的, 這意味著它們的屬性不能改變 - 所有的值都是最終的.
Stateful widgets 持有的狀態可能在widget生命周期中發生變化. 實現一個 stateful widget 至少需要兩個類:
一個 StatefulWidget類。 一個 State類。 StatefulWidget類本身是不變的,但是 State類在widget生命周期中始終存在.
未完待續...