我們終於完成了第一個App,掌握了從開發到上架的最基本流程!
但是App有許許多多的面向,我們來看看App還可以怎麼做
多語系
- internatinalization,俗稱i18n。在App加入多種語言,對世界各地的使用者更友善。
- 官方推薦的套件是flutter_localizations,詳細設定和安裝可以看
這篇
更複雜的state management
- 我們這次練習使用的Provider結構較為簡單,要使用跨widget的state要一層一層傳遞,當App架構變得更複雜,層級變得更多之後,使用Provider會是一個較麻煩且沒有效率的做法
- 好在官方有推薦其他的state management package:
- Redux: 同網頁開發用的Redux
- MobX:蠻有名的state management工具,基於observable
- GetIt: 基於 Service Locator 設計模式的狀態管理工具
- Bloc: bloc作為viewmodel的observable state management
- Riverpod:Provider 的進階版,state可以脫離widget傳遞和保存
手機功能
測試
-
要確保程式碼的品質,測試是不可或缺的一環。可以使用 官網推薦的套件test
import 'package:counter_app/counter.dart'; // 要測試的widget
import 'package:test/test.dart'; // test library
void main() {
// 每一個test是一個測試案例
test('Counter value should be incremented', () {
final counter = Counter();
counter.increment();
expect(counter.value, 1);
});
}
-
如果是要直接看到widget樣式和效果的測試的話,可以使用storybook flutter,和一般測試不同的是,storybook會直接渲染刻好的widget,我們可以直接跟widget互動,而不是用程式碼來測試widget的input/output
佈建
- obfuscation: 在程式碼打包時,為了避免有心人士使用打包完成的app進行反編譯等逆向工程,會進行obfuscation,也就是混淆程式碼。這會隱藏真實的變數和函式名稱讓人難以閱讀,從而不清楚app真正的編寫邏輯。
android知名的obfuscating tool是 Proguard,而在flutter上見 Obfuscating Dart code
- 自動化部屬: 開發完app接著就是打包上架的流程,程式碼每修改一次,就要重新打包上架一次;那有沒有辦法能夠不用每次都手動操作打包上架流程,讓程式碼改好就自己上架呢? 有的,我們可以使用 fastlane 來自動化打包和簽署的行為,並配合其他CI/CD工具部屬到特定的地方(私有的雲端倉庫或者商店),見Continuous delivery with Flutter
App監控
- 在App中加入firebase相關的功能,用以分析App用戶目前的狀況,便於作出優化/除錯/市場分析等行為
-
Analytics:可以在App中加入tag,分析哪些元件、哪些頁面的點擊率最高最受用戶歡迎。
-
Crashlytics:用戶手中的App若有當機或者運行時發生的錯誤,會回傳到雲端的後台讓開發者知道,及早搶修問題。
-
Remote config: 可以在雲端調整參數,改變App的行為/樣式。
Recap
寫一個App絕對不會只有這次示範的這麼簡單,還有好多有趣的功能待各位探索呢。接下來,就靠各位發揮自己的想像力,建造屬於自己的強大APP囉!