接觸 Flutter 三個月,現在寫了兩個小程序,一個是工作上原本就有在用易語言做小程序,用 Flutter 重新實現,第二個小程序是模仿開源項目的一款簡易的 RSS 閱讀器。
Flutter 前端框架#
Flutter 只要一套代碼庫,即可構建、測試和發布適用於移動、Web、桌面和嵌入式平台的精美應用。
遇見 Flutter 是一個很偶然的機會,在手機版谷歌瀏覽器上看過一眼,被它的跨平台的特性所吸引,現在市面上大多前端框架要麼只能寫 App,要麼只能寫 Web,而且需要學習不同的編程語言,單學任何一個難度都不小。
剛開始在網上找到很多信息,顯示 flutter 發展一直在攀升,和其它成熟的框架相比還是有距離,但是跨平台的特性,對於寫跨平台小軟件是一個很好的選擇,加上 Dart 語言也是相對簡單,最後我選擇了 Flutter。
第一个小程序#
第一個用 Flutter 寫的小程序是一個計算工具,主要是給現在在職的銷售用的。在工作中就有在用易語言寫的小程序,但是只能在電腦端使用,對於銷售來說在手機上用相對更加方便,這個做出來大概率是可被銷售們使用起來的,是有實際需求的,用這個來試水再考慮後面是否要深入。
最終整個程序復刻的時間跨度大概花了 2 個月,白天上班基本上都是晚上弄,第一個頁面出來用了 6 個星期,主要是要一邊學一邊做,同時做了一些常用組件標準化以及螢幕適配,第二個頁面在組件佈局上花的時間不多,主要是在數據處理上花了我三個晚上,用一個星期完成。
第二个小程序#
一款簡易 RSS 閱讀器。
這是我找的一個開源項目,用來模仿和學習被認識怎麼寫程序的,特別是在文件框架和代碼格式上。所以我看掉了所有可以沒有的功能。這個主要是在 Feed 的解析上花了比較多的時間,這是這個項目最核心的功能,否則就沒有後面什麼事情了。分析源碼是怎麼實現的用了 1 個星期,然後自己邊驗證邊學習這些代碼用了 1 個星期,只做最核心的幾個功能,一個 Feed 源的解析和添加,以及標題的瀏覽,以及全文閱讀的頁面,雖然看起來就是幾個小功能,但是也是前後用了我一個月,具體寫只是花了兩個星期,包括中間學習了 Isar 數據庫和 Riverpod 狀態管理,獲取的 Feed 的數據需要有一個數據庫存放可以用來快速查詢,這是之前沒有涉及,寫第一個小程序的時用的是 Provider 來做狀態管理,會有一個很大的限制就是在跨 Widget 樹時實現狀態管理就比較麻煩,容易發生衝突,而 Riverpod 狀態管理是對 Provider 的再次包裝,用起來相當於全局變量,不受 Widget 樹的限制。
最後做出來一個很簡易的小程序,最大收穫就是在閱讀項目源碼也讓我對文件框架的設置上比以前清楚多了,以及接觸到超級好用的 Isar 數據庫。
我的編程經歷#
在此之前,只是作為業餘喜好學過 Python、C 語言、微信小程序,都是一些基礎的語法和基本的使用。
大學做畢業需要用單片機,而單片機用 C 語言,接著是小程序也是在大學做畢業設計時學的,當時畢業設計在做一個基於物聯網的力量訓練計數器,當時需要小程序將設備上記錄的數據顯示在微信小程序上,當時做畢業設計只給了一個月時間,那段時間算是每天從早上起來一直弄到晚上睡覺,小程序的學習相關功能需要的代碼語法的學習也就用了 1 個星期不到,單片機用 ESP8266 用 Arduino 來編寫也是邊學邊做用了不到兩個星期驗證了模塊所需的代碼,然後組合在一起。另外花了 1 個星期時間設計了個外殼加製作和組裝,再到實際的使用和修改。
還有就是學過 Python 基礎語法自己能寫一些辦公自動化的腳本程序。
Flutter 用的是全新的 Dart 語言,我沒有去學 Dart 語法,基於以前自學其它編程語言的基礎過程讓我知道對於新手而言完全沒必要,有點編程基礎的就能直接動手寫 Flutter 程序,寫程序能夠最快帶來反饋。
借著前面的一些雜七雜八的基礎下不需要學習 Dart 語法我就可以看懂一些代碼,基本就是看官方的教程和文檔,看不懂再去谷歌搜索,整體上雖然還有很多理解的不是很透徹但是基本能夠寫出一個程序。
新手開發第一關:開發環境配置#
Flutter 是我第一個配置的前端框架開發環境,但是 Flutter 的環境配置的過程會有很多各種你意想不到的問題,就光 flutter 環境配置就花了我 4 個晚上(電腦用的 Windows)。
在這配置過程中會遇到各種問題,網上大多數安裝教程裡都是沒有提到過。光安裝配置遇到的問題至少 8 個,還有一些小問題沒有記錄,不過好在都解決了,有些問題找了很久才找到解決方案。
第一次裝的時候每次遇到一個問題就能卡我至少 1 個小時,就怕連環境配置的這個環節都過不去,中間有時候找不到解決方法都想要放棄這個東西,但目前就 Flutter 可以全平台一套代碼解決的框架,硬著頭皮去弄,好在後半段順暢起來,不然真的就放棄了。
最後想說Flutter 開發環境對小白一點都不友好。
新手開發第二關:組件的使用#
過了開發環境配置這一關,在 Flutter 的代碼上寫出一個簡單小程序基本沒什麼問題,Flutter 是用 Widget 小部件的方式來構建所有 UI 組件,組件樣式直接就在小部件中構建,交互邏輯、業務邏輯也是寫在小部件中,在 Flutter 中 Widget 貫穿所有頁面和組件,在 Flutter 中每個組件、頁面都是可以看作小部件,可以互相嵌套,最終會形成一個 Widget 樹,編寫代碼的時候不存分層。展開講就需要涉及 flutter 底層的原理,這一塊只做了簡單了解,就目前我的使用深度來說還涉及不到,就沒有過多深入。
對於組件的使用主要還是看官方文檔,官方文檔也是比較詳細,再配合網上有很多教程,基本就能學會用。
新手開發第三關:狀態管理#
組件有交互,就會有不同的狀態,如何在發生交互時實時改變狀態在 Flutter 中就會顯得八仙過海各顯神通,社區目前有很多的狀態解決方案,各有利弊。剛開始不太了解,就選擇了官方第三方包 Provider 來做狀態管理,Provider 包裝了一個能夠監聽 widget 變化的類的使用,比起自己構建相對方便一點,在做一些簡單的狀態管理是沒有問題的,但是一旦涉及跨 Widget 樹(或者說跨頁面)的狀態管理就不好用了,這是一個很大的限制。
後面去學習了 Riverpod 才知道什麼才是強大,它是對 Provider 的包裝但是使用起來就像是全局變量一樣簡單,對於一般的狀態管理完全夠用,而且上手也非常容易,基本上找一篇教程就能用起來,而 Provider 我學了 4 個晚上才能勉強理解一點它的原理,否則你都不知道怎麼用。
新手開發第四關:應用打包#
因為手上只有 Windows 電腦只能打包安卓應用和 Windows 應用。
如果從來沒有弄過安卓應用的打包,過程還是比較麻煩的。打包 App 安裝包最重要的就是配置簽名,創建簽名可以用 Android Studio 自帶功能的來弄,但是網上的教程要麼不完整要麼看不懂,就放棄這個方法了,後面找了用命令行的方法創建簽名,感覺這個比起前面的方式簡單,不過也是要花點時間找教程和嘗試,網上有很多教程是不完整的。
接著就按照網上教程配置打包時自動簽名的代碼,這部分照做就基本上可以了,剛開始弄的時候會熟悉要花費點時間,但是弄完之後基本上就是一次性,一個項目基本上只要配置一次就可以了。
Windows 應用打包就比較簡單了,不需要任何配置,只需要一行打包命令行就可以了。
新手開發第五關:應用安裝包分發#
正常一個應用完成需要上架各大應用商店進行分發,但是沒有弄過的話備案還是挺費時間的,目前也完全沒必要,具體怎麼樣不太清楚,但是可以用 [蒲公英] 應用內測分發平台,基本就是免費用,而且不需要備案。
最後#
基本上就簡單的把 Flutter 整個應用項目的開發的過程總結了一下,整體開發下來這應該是我第一次完整的開發出一個 APP 在使用,上手程度比較簡單的。
但是再深入下去對於一些複雜的應用來說不知道 Flutter 能不能應對,這個目前還不太了解。
對於業餘的人來說 Flutter 是一個不錯的選擇,開發效率也不錯的,已經有很多現成的東西做好,對於簡單的小程序是完全沒有問題。