在導入 Flutter 之前,你應該知道什麼? - Weizhong Yang(Zonble) === > 請從這裡開始 ## Flutter Production [KKbox Kids](https://www.kkbox.com/service/kkboxkids/) ## 什麼是 Flutter * 把瀏覽器的元件打散後重組,逼近Native速度 * 精簡過的 Web * 跳過HTML parse的步驟直接組合出DOM結構 * Flutter: AOT編譯,直接組好 Widget tree,用Dart語言操作Widget,Widget同時包含元件與樣式,沒有另外拆分CSS * Dart 類似於 web,但是是**真正的**OO語言 * 在iOS上有一個 FlutterViewController、在 Android 上有一個 Flutter Activity,當中包含 Dart VM 與 Skia Render * 沒有用到UIKit或Android UI Conponents,而是用自己的引擎在Canvas上繪製元件 * 不同平台上可繪製相同 UI ## Flutter 如何加速開發? * Flutter 可以在不同平台使用同一套 UI設計與 UI codebase,省下討論時間,直接進入產品開發 * reduce discuss time, some codebase with both of platform ## 與 HTML 跨平台框架比較 * Flutter 效能明顯優於 pure Web ## 與 NativeScript/RN 比較 * 執行編譯過的 Dart 程式,無需在 runtime 解析 ## 怎麼樣的 App 適合 Flutter * **原為網站,想改造成 Mobile App 的最適合** * 電商、售票、交友、報表 ... * 遊戲還是建議使用遊戲引擎(EX:Unity) * 如果要做更接近硬體原生功能如影像處理類別(拍照、錄影等)仍建議使用 Native App ## 導入之前 * 確定有人手 * 從小專案開始,再導入大專案 ## 最後,還是要做iOS/Android App * 除了Flutter 之外 * cocoa pod / Gradle 套件管理 * Android Manifest / Proguard ## KKBOX Kids 的組合 * UI 使用 Flutter 製作 * 呼叫原生 WebView 實作 OAuth 登入 * 開發原生的音樂播放器 * 自己寫了FB App Events 的 plugin ## Flutter 團隊組成 * 目前人力市場還比較沒有所謂的 Flutter Engineer * * 建議先學會 iOS/Android 其中一種,再來學 Flutter * 在團隊中,還是要有資深 Android/iOS 工程師 * Flutter 還無法真正取代原生的 iOS / Android lib ## 怎樣學 Flutter * 安裝 IDE, SDK * 學習 Dart * 先動手寫一個 Flutter App 上手 * 熟悉 Flutter Widget * 練習寫 Flutter plugin * 練習寫 Dart package * 熟悉 Flutter Pattern 和更新機制 ## 安裝IDE與SDK * IDE * Android Studio and/or XCode * IntelliJ IDEA * Visual Studio Code * Flutter SDKx * Dart SDK ## 學習 Dart 語言 ![](https://i.imgur.com/3ukBpco.jpg) * [Learn X in Y minutes](https://learnxinyminutes.com/docs/dart/) * [DartPad]( https://dartpad.dev/https://dartpad.dev/) ## Flutter Widgets :book: [Widget catalog](https://flutter.dev/docs/development/ui/widgets) ## Flutter 的 Pattern * 開發前先忘了MVC * Flutter的每一層都是ViewModel * 所有的物件(Widget)都在一棵樹裡 * 呼叫API的動作也是用一個Widget(FutureBuilder)完成 ## Pattern? * pattern 是物件之間的關係 * Flutter中的Widget只有三種關係 * 在當前Widget的上方 * 在當前Widget的下方 * 跟當前Widget在不同棵樹上 ## 網上尋找節點 * of * 往上尋找最接近且符合某個形態的節點 ## 狀態管理 * Bloc * Provider ## CI/CD [BitRise](https://www.bitrise.io/) 對Flutter支援非常好 ## KKbox OpenAPI SDK for Dart https://pub.dev/packages/kkbox_openapi ## Slide https://www.slideshare.net/zonble/flutter-191993884 ###### tags: `DevFest2019`