Google移動UI框架Flutter入門

  • 2020 年 1 月 19 日
  • 筆記

引言

作為Android開發人員,很有必要學習一下Flutter,那麼Flutter是什麼呢?它到底有什麼作用呢?我們一一來揭曉。 Flutter是Google的移動UI框架,可以快速在iOS和Android上構建高品質的原生用戶介面。 Flutter可以與現有的程式碼一起工作。在全世界,Flutter正在被越來越多的開發者和組織使用,並且Flutter是完全免費、開源的。它也是構建未來的Google Fuchsia應用的主要方式。Fuchsia是Google繼Android和Chrome OS之後開發的第三個系統,未來,Google是計劃將Flutter作為這款作業系統的構建方式的。

什麼是Flutter?

Flutter實際上是一個包含多種內容的軟體包,它是用來創建移動2D應用程式SDK的軟體開發包,如果你計劃在某些遊戲中使用3D應用程式,那麼Flutter將無法滿足你的需求,但如果你的計劃是在APP商店中的大多數的2D應用程式,那麼Flutter就是你的選擇。 Flutter軟體包中最重要的就是編程框架,編程框架使用Dart作為程式語言。而實際上,我們不會直接調用Dart,所以我們不需要去深入學習Dart語言。Flutter附帶了大量的小控制項,能夠幫助開發者省去很多功夫。

下載安裝Flutter

現在我們就來看看如何下載安裝Flutter,首先瀏覽器搜索Flutter,找到官網進入,點擊Get started。

選擇對應的作業系統,就會跳轉至下載介面。 由於在中國訪問Flutter有可能會受到限制,Flutter官方為中國開發者搭建了臨時鏡像,大家可以將如下環境變數加入到用戶變數中。

PUB_HOSTED_URL:https://pub.flutter-io.cn  FULTTER_STORAGE_BASE_URL:https://storage.flutter-io.cn

Flutter鏡像設置完成以後,接下來就可以獲取Flutter SDK了。去Flutter官網下載最新可用的安裝包。下載完成後解壓即可。 解壓完後,打開flutter文件夾,找到flutter_console.bat,雙擊運行,進行命令行的安裝。

當看到這樣的一個控制台介面,說明Flutter啟動成功。啟動成功後,我們還需要配置Flutter的環境變數。需要將bin文件夾的位置配置到用戶環境中。需要注意的是:這裡配置的是用戶變數,不是系統變數。將bin目錄位置添加到用戶變數的path中。 配置完後,我們就可以使用Flutter命令了,打開一個控制台,輸入指令:

flutter doctor

這是一條用於檢查當前電腦是否包含運行Flutter的全部環境。運行該條指令便會去自動下載所需資源。

需要注意的是,打勾的地方說明資源下載成功,而感嘆號的位置說明資源下載異常,我們需要去解決這些異常的下載,才能使Flutter正常地運行。

解決資源異常問題

我這裡因為有了Android的運行環境和Android Studio開發工具,所以都是感嘆號,而沒有這些東西的同學就會打一個紅色的叉,看到紅色的叉也不要驚慌失措,只需要將Android的環境下載好即可。 下載好Android環境後,我們接著輸入指令:

flutter doctor --android-licenses

該條指令的作用是接受Android許可,執行該條指令後會多次詢問是否許可,只需輸入』y』回車即可。 再次輸入flutter doctor來檢查一下環境。

證明第二項的異常我們解決了。 接下來我們解決第三個異常,也就是Android Studio的異常。 我們打開Android Studio,點擊File,然後點擊Setting,最後點擊Plugins,打開插件窗口,在該窗口中點擊Browse repositories,選擇從網路上下載插件。在搜索框中搜索Flutter並下載,在下載前Android Studio會詢問是否同意下載Dart插件,我們允許即可。下載完成後重啟Android Studio,我們再次到控制台中檢查一下資源,輸入flutter doctor指令,會發現,第三項也打勾了,問題成功解決。

第四項異常是因為IDEA沒有安裝Flutter的插件,這裡我們只用Android Studio進行開發,所以可以不用管,沒有這個開發工具的同學也不會產生這個問題。那麼接下來,我們看最後一個異常,這個異常是因為現在沒有設備連接,所以我們必須準備一個Android設備。

創建Flutter項目並啟動

經過前面的一些操作,Flutter總算是成功安裝上來了,那麼,接下來,我們就嘗試創建一個Flutter項目並運行到設備上。 在這之前,我們需要再設置一些資訊,在Android Studio中點擊File,然後點擊Setting,找到Flutter設置介面。

將我們最開始下載的Flutter的解壓文件路徑設置上去,Dart我們可以不用設置,它會自動去尋找路徑。設置完成後點擊OK,然後新建一個Flutter Project,點擊Flutter Application。

點擊Next,然後點擊Finish。等待片刻,Android Studio會自動幫我們構建開發環境。構建完成後我們右上角選擇一下運行設備,然後點擊運行。

然而點擊運行之後,有些同學會發現Android Studio停留在了這個介面。

再也沒有變化過,這不禁讓人感到奇怪,這麼長的構建時間,它到底在幹什麼?其實這不奇怪,展開gradle-wrapper文件夾。

發現了沒,構建工具並不存在,所以,Android Studio其實就是在下載構建工具,通過觀察文件夾變化,我找出了它需要下載的版本。

這個版本確實是我所有構建版本中沒有的,然後因為網路的原因,下載速度極慢,於是便出現了剛才的那一幕,所以,該怎麼解決呢?兩種辦法,要麼就一直等,網速再慢,幾十MB的東西下個一天還下不完嗎?哈哈,開個玩笑。第二個辦法,就是自己把它需要的構建版本下載好,然後放到這個文件夾下面去。當然,還是有其它辦法的,就是去gradle-wrapper.properties文件中將構建工具版本改為自己已經有的,這樣也是可以的,我就不演示了。 將下載完的構建工具放進去,我們停止構建,然後重新運行,果然這一次就快了許多,應用很快就運行到了Android設備上。

這是Flutter項目自動生成的,我們並沒有編寫一條程式碼。 需要注意的是,很多同學可能在這裡還會遇到一些問題,比如在運行的時候報這個錯。

Error:FAILURE: Build failed with an exception.    * What went wrong:  Could not resolve all files for configuration ':app:debugCompileClasspath'.  > Could not resolve com.google.android.gms:play-services-ads:latest.release.    Required by:        project :app     > Could not resolve com.google.android.gms:play-services-ads:12.0.1.        > Could not get resource 'https://jcenter.bintray.com/com/google/android/gms/play-services-ads/12.0.1/play-services-ads-12.0.1.pom'.           > Could not GET 'https://jcenter.bintray.com/com/google/android/gms/play-services-ads/12.0.1/play-services-ads-12.0.1.pom'.              > Read timed out    * Try:  Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.    * Get more help at https://help.gradle.org    BUILD FAILED in 35s

這還是因為網路的原因,無法下載到這些資源文件,解決方案如下: 在project級別下的build.gradle文件中添加如下程式碼:

buildscript {        repositories {          google()          jcenter()      }      dependencies {          classpath 'com.android.tools.build:gradle:3.1.1'          classpath 'com.google.gms:google-services:4.0.1'  //Google服務庫依賴        }  }    allprojects {      repositories {          google()          jcenter()          mavenCentral ()          maven {url 'https://dl.bintray.com/jetbrains/anko'} //這個是解決這個問題的關鍵      }  }    task clean(type: Delete) {      delete rootProject.buildDir  }

這樣問題應該就解決了,我也不可能一一地列舉出所有的問題,如果大家還是碰到了問題,可以自行百度解決。

總結

經歷了千辛萬苦,第一個Flutter項目終於成功運行起來了。Flutter打包出來的是純原生應用,和瀏覽器應用完全不同,原生應用指的是安裝在手機內部會帶圖標的應用,這種應用是可以發布到Android市場或者App Store裡面的。

最後貼上gradle構建工具的下載網址:http://services.gradle.org/distributions/