想學Flutter,就請關注這個專欄
Flutter系列(一)——詳細介紹
Flutter系列(二)——與React Native進行對比
Flutter系列(三)——環境搭建(Windows)
Flutter系列(四)——HelloWorld
文檔歸檔:
github.com/yang0range/…
android
上一篇文章,詳細的介紹了Flutter的環境搭建,搭建完成以後,天然火燒眉毛看看如何建立咱們的第一個Demo。ios
打開Android Studiogit
能夠看到,能夠看見有四個選項。github
那麼這四個選項有什麼區別呢?bash
Flutter Application
Flutter標準引用程序app
Flutter Plugin
Flutter封裝的Native工程的基礎插件less
Flutter Package
純Dart庫工程maven
Flutter Modue
做爲已有工程的一個Module函數
這裏,咱們須要建立一個Flutter Application項目。post
這裏,咱們首先能夠看到三個比較重要的目錄,分別是android,ios還有lib。
android
顧名思義,就是寫Android平臺相關代碼的地方。
ios
和上面相似,這就就是寫ios平臺相關代碼的地方。
lib
這裏纔是咱們真正寫flutter相關代碼的地方。
這裏還有一個十分重要的文件,
pubspec.yaml
這個文件是咱們flutter的配置文件,好比三方的依賴都在這裏,最重要的是這裏還要寫一些資源文件,好比圖片等等,後面咱們會詳細介紹。
從上面目錄結構大體能夠理解爲,整理的flutter的工程結構爲。
先把官方Demo運行起來。
咱們第一次運行官方Demo的時候,可能會有運行不來,一直卡在
Running Gradle task 'assembleDebug'...
的狀況,這裏是由於Gradle的Maven倉庫在國外,由於衆所周知的問題,沒法加載。
這裏,咱們就可使用阿里雲的鏡像地址,來解決這個問題。
打開以下目錄,修改的地方。
也能夠直接複製以下代碼。
buildscript {
ext.kotlin\_version = '1.3.50'
repositories {
// 這裏作了修改,使用國內阿里的代理
// google()
// jcenter() maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin\_version"
}
}
allprojects {
repositories {
//修改的地方
//google()
//jcenter() maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
}}
複製代碼
接着打開flutter.gradle文件,路徑在
..\fluttersdk\flutter\packages\flutter_tools\gradle下,修改內容
buildscript {
repositories {
// 這裏作了修改,使用國內阿里的代理
// google()
// jcenter()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
複製代碼
再從新運行,就成功了!
打開main.dart文件,就是運動Demo的代碼了。
根據代碼,咱們能夠畫出這個Demo的結構以下圖。
下面咱們着重依次介紹一下。
入口函數,這裏用的是Dart語法當中的箭頭函數,這裏和Kotlin的用法十分相像。
咱們能夠看到這裏的MyApp()繼承的是StatelessWidget而StatelessWidget繼承的是Widget
這裏的 runApp起到了一個全局更新的做用,通常flutter啓動時調用後不會再調用
這裏的Myapp返回的是一個MaterialApp相信瞭解Android的小夥伴對這個不會陌生,這個就是讓這個Flutter保持一個MMaterial的UI風格。
固然,也有IOS的風格,這裏咱們可使用CupertinoApp。
無中間狀態變化的widget,初始狀態設置之後就不可再變化,
用於不須要維護組件狀態的場景,
createElement()建立StatelessElement對象,一個StatelessWidget對應一個StatelessElement。
能夠看到MyApp就是繼承自StatelessWidget。
存在中間狀態變化的widget,createElement()建立StatelfulElement對象
,createState()建立State對象(可能調用屢次),createState()建立State對象(可能調用屢次)。
MyHomePage由於有點擊的count++的致使UI變化,因此繼承自StatefulWidget。
State是一個狀態對象,<>裏面是表示該狀態是跟誰綁定的。
State有兩個做用
1.在修改狀態就在這個類裏編寫,Weidget的時候能夠同步的讀取。
2.當狀態有所改變的時候,調用State.setState()同時去刷新Weidget。
將子樹做StatefulWidget的一個子Widget,並建立對應的State類實例,經過調用State.setState()觸發子樹的刷新。
在Demo當中,能夠看到_MyHomePageState就是繼承自State而且經過State.setState()這個方法局部刷新UI。
以上就是關於整個官方Demo的一個較爲詳細的介紹,也是咱們接觸的第一個Flutter項目,接下來咱們就瞭解一下什麼是Dart語言,看看Dart語言有哪些特色,爲何Flutter要使用Dart語言。
有什麼好的建議,意見,想法歡迎給我留言!