Flutter系列(四)——HelloWorld

Demo_Yang發表於2020-03-05


Flutter系列(四)——HelloWorld

想學Flutter,就請關注這個專欄
Flutter系列(一)——詳細介紹
Flutter系列(二)——與React Native進行對比
Flutter系列(三)——環境搭建(Windows)
Flutter系列(四)——HelloWorld
文件歸檔:
github.com/yang0range/…

建立的第一個Demo

上一篇文章,詳細的介紹了Flutter的環境搭建,搭建完成之後,自然迫不及待看看如何建立我們的第一個Demo。

開啟Android Studio

image.png
image.png

可以看到,可以看見有四個選項。

Flutter系列(四)——HelloWorld

那麼這四個選項有什麼區別呢?

Flutter Application
Flutter標準引用程式

Flutter Plugin
Flutter封裝的Native工程的基礎外掛

Flutter Package
Dart庫工程

Flutter Modue
作為已有工程的一個Module

這裡,我們需要建立一個Flutter Application專案。

Flutter系列(四)——HelloWorld

工程目錄結構

Flutter系列(四)——HelloWorld

這裡,我們首先可以看到三個比較重要的目錄,分別是androidios還有lib

android
顧名思義,就是寫Android平臺相關程式碼的地方。

ios
和上面類似,這就就是寫ios平臺相關程式碼的地方。

lib
這裡才是我們真正寫flutter相關程式碼的地方。

這裡還有一個十分重要的檔案,


Flutter系列(四)——HelloWorld

pubspec.yaml
這個檔案是我們flutter的配置檔案,比如三方的依賴都在這裡,最重要的是這裡還要寫一些資原始檔,比如圖片等等,後面我們會詳細介紹。

從上面目錄結構大致可以理解為,整理的flutter的工程結構為。

Flutter系列(四)——HelloWorld

執行官方Demo

先把官方Demo執行起來。

執行不起來

我們第一次執行官方Demo的時候,可能會有執行不來,一直卡在
Running Gradle task 'assembleDebug'...
的情況,這裡是因為Gradle的Maven倉庫在國外,因為眾所周知的問題,無法載入。

解決辦法

這裡,我們就可以使用阿里雲的映象地址,來解決這個問題。
開啟如下目錄,修改的地方。


Flutter系列(四)——HelloWorld

也可以直接複製如下程式碼。

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'
    }
}
複製程式碼

再重新執行,就成功了!


Flutter系列(四)——HelloWorld

官方Demo結構

開啟main.dart檔案,就是運動Demo的程式碼了。

根據程式碼,我們可以畫出這個Demo的結構如下圖。


Flutter系列(四)——HelloWorld

官方Demo中幾個重要的內容

下面我們著重依次介紹一下。

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

入口函式,這裡用的是Dart語法當中的箭頭函式,這裡和Kotlin的用法十分相像。

我們可以看到這裡的MyApp()繼承的是StatelessWidgetStatelessWidget繼承的是Widget

可以說在flutter當中,一切皆為widget

這裡的 runApp起到了一個全域性更新的作用,一般flutter啟動時呼叫後不會再呼叫

MyApp

這裡的Myapp返回的是一個MaterialApp相信瞭解Android的小夥伴對這個不會陌生,這個就是讓這個Flutter保持一個MMaterial的UI風格。

當然,也有IOS的風格,這裡我們可以使用CupertinoApp

StatelessWidget

無中間狀態變化的widget,初始狀態設定以後就不可再變化,
用於不需要維護元件狀態的場景,
createElement()建立StatelessElement物件,一個StatelessWidget對應一個StatelessElement。

可以看到MyApp就是繼承自StatelessWidget。

StatefulWidget

存在中間狀態變化的widget,createElement()建立StatelfulElement物件
,createState()建立State物件(可能呼叫多次),createState()建立State物件(可能呼叫多次)。

MyHomePage因為有點選的count++的導致UI變化,所以繼承自StatefulWidget。

State

State是一個狀態物件,<>裡面是表示該狀態是跟誰繫結的。

State有兩個作用
1.在修改狀態就在這個類裡編寫,Weidget的時候可以同步的讀取。

2.當狀態有所改變的時候,呼叫State.setState()同時去重新整理Weidget。

State.setState()

將子樹作StatefulWidget的一個子Widget,並建立對應的State類例項,通過呼叫State.setState()觸發子樹的重新整理。

在Demo當中,可以看到_MyHomePageState就是繼承自State並且通過State.setState()這個方法區域性重新整理UI。

最後

以上就是關於整個官方Demo的一個較為詳細的介紹,也是我們接觸的第一個Flutter專案,接下來我們就瞭解一下什麼是Dart語言,看看Dart語言有哪些特點,為什麼Flutter要使用Dart語言。

Flutter已經是Top20的軟體庫,通過接下來的一系列的文章,希望我和大家一起來學習Flutter,一起進步,一起有所收穫,掌握未來技術主流的主動權!

有什麼好的建議,意見,想法歡迎給我留言!

歡迎關注公共號

關注公眾號會有更多收穫!

Flutter系列(四)——HelloWorld

動動小手指點贊,收藏,關注一鍵三連走一波吧!


相關文章