產(chǎn)品級Flutter開源項目前域,F(xiàn)unAndroid,Provider MVVM的最佳實踐

基于Google的Flutter,及官方推薦狀態(tài)管理Provider玩Android開放的API眨攘,打造的一款產(chǎn)品級開源App《Fun Android

logo,靈感來自2dimensions是個藍色的F,自己挺喜歡嚣州,就down了下來鲫售,后來又翻了好久也沒找到作者,如果侵權(quán)請聯(lián)系我

Logo的里F该肴,既代表了Fun也代表了Flutter.

先來點樣圖

splash.gif
首頁空中樓閣
tab概覽_1080-50-128.gif
頁面不同狀態(tài)展示.gif
搜索.gif
收藏-50.gif
登錄頁展示.gif
收藏列表到登錄.gif
主題切換-1080-75-256.gif

項目地址

https://github.com/phoenixsky/fun_android_flutter

代碼編譯

  • Flutter SDK (Channel dev, v1.10.4)

  • 如果要查看運行效果,一定要使用Release模式,流暢程度差距非常大

    Flutter的DebugRelease的編譯模式不同,下分別是 JITAOT.Debug模式支持hot reload.

  • iOS運行在splash頁面卡住,需要檢查當(dāng)前的scheme,如果為release,需在命令行執(zhí)行flutter build ios

    image.png

  • 項目國際化部分依賴了AndroidStudio的插件flutter_i18n
    需要在plugin倉庫中,搜索Flutter i18n.安裝插件成功后,重啟AndroidStudio后,會生成lib/generated/i18n.dart文件

    具體方案和使用參考掘金-rhyme_lphlv的博文

介紹

借用群里水友的兩句對白情竹,在預(yù)覽版出來時候

  • 1A:話說玩Android的開源項目已經(jīng)多如牛毛了。

  • 3C:我想看最漂亮的匀哄。

感謝這位朋友對Fun Android的認可秦效。

關(guān)于App的主題風(fēng)格雏蛮,不全是Google倡導(dǎo)的Material Design 也不全是Apple的Cupertino Style。由于我是一個Android開發(fā)者阱州,但又長期使用的iPhone挑秉,所以App的風(fēng)格是兩者的結(jié)合又夾雜了點私貨。個人認為iOS版本的確實好看點苔货。

代碼中存在的問題犀概,請大家積極提Issue.

更新

V0.1.12 2019-10-21 (未發(fā)布)

  • 下拉刷新列表在加載失敗時,如果當(dāng)前頁沒有數(shù)據(jù)顯示錯誤提示頁,有數(shù)據(jù)則彈出toast提示

V0.1.11 2019-10-17

  • 增加網(wǎng)絡(luò)加載失敗的提示

V0.1.10 2019-10-16

  • 修復(fù)收藏頁面'shareUser'字段為空導(dǎo)致報錯的bug

V0.1.9 2019-10-14

  • 極致黑(Native的閃屏頁面適配darkMode)
  • 首頁banner高度根據(jù)屏幕寬高適應(yīng)
  • 簽名文件調(diào)整

V0.1.8 2019-10-13

  • 文章列表加入分享人
  • 首頁加入數(shù)據(jù)為空的邏輯判斷
  • ViewStateModel中邏輯優(yōu)化,bug fix
  • 狀態(tài)欄字體顏色優(yōu)化
  • 修復(fù)TextField中hint為中文時不居中的問題

V0.1.7 2019-09-23

  • DarkMode自動跟隨系統(tǒng)設(shè)置
  • App更新組件調(diào)整
  • 適配Dio3.0版本
  • pull_to_refresh更新:加入國際化

V0.1.6 2019-09-20

  • 修復(fù)收藏列表進入詳情時,頁面報錯的bug

V0.1.5 2019-09-19

  • Flutter SDK更新至Channel dev, v1.10.3,修復(fù)我的頁面莫名卡死的問題
  • 修改Android端App名稱為Fun Android

V0.1.4 2019-09-18

  • 適配Flutter 1.9.x
  • Android加入版本更新
  • 加入LeanCloud API云服務(wù)
  • 移除修復(fù)首頁黑屏問題的代碼官方在1.10.1版本已修復(fù)
  • 移除之前屏幕適配方案,對NativeView影響過大
  • 修復(fù)版本更新導(dǎo)致的AppBar中進度條顏色與背景色不明顯的問題
  • 重構(gòu)Http使用方式,解耦性更好
  • 首頁banner高度調(diào)整
  • Android狀態(tài)欄透明

2019-09-10

  • flutter版本更新
  • 適配更新AppBar區(qū)域CupertinoActivityIndicator的主題色彩沖突
  • 移除OffState和Indicator的組合使用,優(yōu)化性能
  • 調(diào)整textField的clear實現(xiàn)方式,防止報錯

2019-09-09

  • 修復(fù)各頁面里文章 收藏 狀態(tài)沒有同步的問題
    • 首頁收藏后,其他tab頁對應(yīng)item的收藏狀態(tài)同步
    • 我的收藏頁面里移除收藏.其他頁面狀態(tài)同步
    • 登錄登出后各頁面收藏狀態(tài)刷新
    • 如果相同賬號在其他平臺修改過收藏狀態(tài),只需要刷新列表即可同步收藏狀態(tài).(WanAndroid接口目前存在問題)
  • 優(yōu)化Dropdown彈出動畫
  • 首頁初次加載數(shù)據(jù)禁用上拉記載更多功能
  • 登錄頁面輸入框可通過回車鍵切換

2019-08-30

  • 修復(fù)積分數(shù)值在登錄后沒有刷新的bug
  • 修復(fù)進入Splash頁面短暫黑屏的bug
  • 修復(fù)未登錄時,點擊收藏還可以播放動畫的bug
  • 默認主題色調(diào)整為亮色

2019-08-29

  • 添加積分記錄和排行榜功能

2019-08-28

  • 在設(shè)置中添加WebViewPlugin的開關(guān)
  • 在詳情中移除收藏后,回到收藏列表頁面自動刷新

2019-08-26

  • 更新收藏動畫的實現(xiàn)方式,之前實現(xiàn)的方式侵入性太強,每個頁面都要先隱藏一個小??∑崖福現(xiàn)在換了路由?Hero的思路阱冶,重新調(diào)整了Flare。顯示動畫一行代碼就ok滥嘴。(如果你運行代碼之后發(fā)現(xiàn),該動畫與圖上會有一絲絲不一致,列表項右下角的小心會閃一下.不用擔(dān)心那是flutter的bug,目前在master分支已經(jīng)修復(fù).見pr-37341)

    Hero-收藏-25-64.gif

項目結(jié)構(gòu)

項目結(jié)構(gòu)1
項目解構(gòu)2

Provider MVVM的簡單使用方式

  • 快速添加一個擁有下拉刷新,上拉加載更多的頁面.比如開發(fā)一個玩Android首頁列表頁面
    1. Model


      Api
    2. ViewModel


      -w494
    3. View


      -w637

以上是Provider結(jié)合ViewModel的基礎(chǔ)使用方式,考慮了App中會出現(xiàn)的比較全面的情況,希望大家一起探討使用方式

另外在判斷頁面狀態(tài)的時候,其實拿model.viewState == ViewState.busy會更嚴謹一點.為了書寫方便,加了一個對應(yīng)方法

這里能找到什么木蹬?

  1. Provider狀態(tài)管理的最佳實踐,雖然Google很早就廢棄了Provide若皱,宣布Provider為推薦的狀態(tài)管理工具镊叁,可是在開發(fā)中,我們總是會遇到很多問題走触。

    1. 比如Provider的幾個衍生類在具體的業(yè)務(wù)中應(yīng)該怎么使用晦譬?

    2. 頁面最初需要的數(shù)據(jù)什么時候進行初始化,在哪里初始化。

    3. 如何將頁面的幾個常用狀態(tài)loading互广、error敛腌、emptyidle惫皱、unAuthorized進行組合使用像樊。

    4. 常用的下拉刷新上拉加載更多應(yīng)如何服用才能效果更佳旅敷。

    5. Widget在dispose后生棍,model不再notify()。

  2. 清晰的代碼結(jié)構(gòu)媳谁。

    1. 讓頁面歸頁面涂滴,讓業(yè)務(wù)歸業(yè)務(wù),所有的業(yè)務(wù)邏輯都在view_model中晴音,Widget只關(guān)注頁面本身柔纵。
  3. 不要再滿屏幕的setState()。

    1. 同一頁面內(nèi)可以利用Flutter框架給我們提供的各種XxxBuilder,來局部刷新锤躁。

    2. 多層嵌套可使用前邊提到的Provider首量。

    3. 當(dāng)然顆粒度足夠細的Widget,還是要使用setState()。eg: ChangeLogPage中的ChangeLogView 功能單一加缘,刷新不會影響別的widget。

  4. 實現(xiàn)了App的基礎(chǔ)功能觉啊,可copy當(dāng)作模板代碼快速開發(fā)

    1. 主題切換

    2. 夜間模式切換

    3. 字體切換

    4. 漂亮的骨架屏

    5. 利用IDE插件i18n進行國際化

    6. Dio結(jié)合Cookjar拣宏,實現(xiàn)玩Android的登錄功能

    7. AnimationList結(jié)合SmartRefresh的常規(guī)數(shù)據(jù)加載

  5. 當(dāng)然還有WanAndroid本身也有不錯的內(nèi)容,每日閑暇時杠人,可以讀一讀勋乾。

未完成的功能

  1. 首頁二樓目前是我個人的blog,也無法前進后退嗡善。后期會放一個flutter專題辑莫。

  2. Hero動畫,在非最后一個tab登陸時罩引,logo的動畫會漂移到最后一個各吨,需要加狀態(tài)判斷。

  3. 退出登陸加入動效袁铐。

目前已知存在的問題

  1. webview_flutter 插件的問題還是很多揭蜒,有些鏈接點擊會沒有反應(yīng),不會跳轉(zhuǎn)剔桨。所以接入了兩套WebView方案

  2. webview_flutter 不能結(jié)合CustomScrollView滑動屉更。見issue

  3. 兩個同樣顏色的widget洒缀,中間莫名其妙的會多一條背景色的線瑰谜。見issue

Future

  • 后期會上線大量博客树绩,來講述這個項目里所遇到的問題及解決的思路萨脑。

尋找組織

  • 見Github

感謝

  1. 感謝 V2Lf 開源項目,很早就在TestFlight中下載了該App,那時還沒開源葱峡。萌生了想做一個開源的App的想法砚哗。

  2. 借鑒了goweiiWanAndroid項目的UI,最美原生版WanAndroid砰奕,感謝蛛芥。

  3. 在實踐Provider時,發(fā)現(xiàn)了Tutorials,作者Youtube的教程很好军援。

  4. 感謝優(yōu)秀的pull_to_refresh刷新庫仅淑。

  5. 感謝站酷提供的開源的字體。

  6. 感謝WanAndroid提供的API胸哥。

License

Copyright 2019 phoenixsky

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涯竟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庐船,老刑警劉巖银酬,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筐钟,居然都是意外死亡揩瞪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門篓冲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來李破,“玉大人,你說我怎么就攤上這事壹将∴凸ィ” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵诽俯,是天一觀的道長妇菱。 經(jīng)常有香客問我,道長惊畏,這世上最難降的妖魔是什么恶耽? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮颜启,結(jié)果婚禮上偷俭,老公的妹妹穿的比我還像新娘。我一直安慰自己缰盏,他們只是感情好涌萤,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著口猜,像睡著了一般负溪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上济炎,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天川抡,我揣著相機與錄音,去河邊找鬼须尚。 笑死崖堤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耐床。 我是一名探鬼主播密幔,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撩轰!你這毒婦竟也來了胯甩?” 一聲冷哼從身側(cè)響起昧廷,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偎箫,沒想到半個月后木柬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡镜廉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年弄诲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娇唯。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寂玲,靈堂內(nèi)的尸體忽然破棺而出塔插,到底是詐尸還是另有隱情,我是刑警寧澤拓哟,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布想许,位于F島的核電站,受9級特大地震影響断序,放射性物質(zhì)發(fā)生泄漏流纹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一违诗、第九天 我趴在偏房一處隱蔽的房頂上張望漱凝。 院中可真熱鬧,春花似錦诸迟、人聲如沸茸炒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壁公。三九已至,卻和暖如春绅项,著一層夾襖步出監(jiān)牢的瞬間紊册,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工快耿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囊陡,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓润努,卻偏偏與公主長得像关斜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铺浇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. 前言 項目地址: https://github.com/xfhy/WanAndroid-Flutter 前段...
    瀟風(fēng)寒月閱讀 294評論 0 1
  • 本項目已全部開源痢畜,歡迎Star&Fork。 項目網(wǎng)址:帥帥影視 安裝包地址: 帥帥影視Android版本(對應(yīng)的版...
    苗小帥閱讀 3,200評論 1 10
  • https://github.com/niyingxunzong/AndroidOpenSourceProject...
    奈何心善閱讀 10,502評論 6 223
  • 久違的晴天,家長會丁稀。 家長大會開好到教室時吼拥,離放學(xué)已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗线衫。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,492評論 16 22
  • 創(chuàng)業(yè)是很多人的夢想凿可,多少人為了理想和不甘選擇了創(chuàng)業(yè)來實現(xiàn)自我價值,我就是其中一個授账。 創(chuàng)業(yè)后枯跑,我由女人變成了超人,什...
    亦寶寶閱讀 1,802評論 4 1