自己本身一直以來都是做 Android 工作的,最近接觸到 Flutter ,就想把就想把一些學到的東西記錄下來,這是第一次嘗試寫文章,寫得不好請見諒QQ (這邊就不提 Flutter 歷史,跟Hybrid跟的差異等等的,直接用範例來說明)因為個人還是習慣用Android Studio(AS),所以主要還是用這IDE來講解
Step 1. 打開 AS, 選擇 “Start a new Flutter project”
Step 2. 選擇類型 : Flutter Application
Step 3. 輸入專案的名稱
Project name : 自己取的專案名字
Flutter SDK path : 就要選從官方下載的 SDK 的資料夾 ( https://flutter.dev/docs/get-started/install 從這下載)
Project location : 想要把這個專案(資料夾放在哪裡)
Description : 專案的敘述 (可不填)
Step 4. 這邊是Package name, 之後常常會用到, 名字也是可以自己取, 預設是 com.{username}.{projectname}
Step 5. 恭喜你可以Run人生中的第一個APP了呢, 還是兩個平台的! (撒花
人家學程式一開始都是 Hello World, Flutter 內建的程式直接給你一個可以點擊的的App, 是不是高端多了 (誤
新建一個 Project 專案, 就會幫我們建立一~大~堆東西,但實際上一開始跟Fluter比較有關係的只有一個 “lib資料夾”,基本上dart檔案都會放在這裡面(main.dart)。
另外就是專門擺放 Dependencies 的 pubspec.yaml 檔案 (什麼是 Dependencies ? 就是有些高手高手高高手在網路上會分享自己的一些東西,只要你把他加入到這個檔案之後,你就可以用高手寫好的東西了)
在 Flutter 的世界中,所有的東西都是一個 Widget,就像一棵樹一樣,上層的節點會包一個節點,下面的節點在包含更多的節點 ( 個人不太會解釋,推薦一個說得很請楚的文章: https://www.twblogs.net/a/5bc158ff2b717711c9247a80)
開啟 main.dart, 簡單聊一下這個 demo 在做些什麼事情
import ‘package:flutter/material.dart’ => 因為我們裡面用到了MaterialApp 這個 widget,所以需要 import(同理要用到其他地方的東西也都要做這件事情)
這是一個Flutter app 的 起點(就像 Android 要在 Androidmanifest.xml中新增一個Activity當起點一樣,在Flutter中會自動找到main當作起點)
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
因為有了這兩句,所以從class MyApp中就可以傳一個字串(“Flutter Demo Home Page”) 到MyHomePage中
跟 Android 以往開發不一樣,Flutter 是直接將 View(Flutter稱為Widget) 都寫在一隻檔案裡面,以這段 code 來說,就是 return 回一個 MaterialApp 的 widget , 裡面會有其他設定 (theme, 顏色, 等等), home 是因為 MaterialApp 這個元件必須指定一個 widget。
在 Flutter 中, 有分為 StatelessWidget 跟 StatefulWidget,最簡單的差別就是,Widget render 完之後都不會改變的都用 StatelessWidget,而會改變的就用 StatefulWidget,在這Demo中因為有一個FloatingButton (右下角那個那個藍色小Button) ,還有中間的文字會變更計數,所以會用一個 State 把這些Widget 包起來
在 _MyHomePageState 中,會產生一個 Widget : Scaffold, 然後從這就可以看得出 Flutter 是怎麼做 Widget 的,Scaffold 是 Flutter 中提供的一個元件,裡面會有 appBar,body,floatingActionButton,下圖圈起來的部分
跟Android / iOS 以往的做法不一樣,不管是做出 UI 的方式,或者是 UI 的邏輯,一開始會讓人覺得很不適應 (聽說這種方法反而比較適合前端的人來做會比較習慣?不過前端做的話又會面臨其他的一些在Devise上的問題 Orz),不過其實寫起來習慣之後會覺得其實 Flutter 也有很多有趣的地方呢 (也或許是我還沒遇到坑就是了XDDD)
附上個人做的一些 Widget 示範的 App : https://github.com/katelin013/flutter-practice