Flutter使用總結

前言

Flutter 是一個由谷歌開發的開源移動應用軟件開發工具包,用于為 Android、iOS、Windows、Mac、Linux、Google Fuchsia 開發應用。

我們可以將 Flutter 理解為一個移動 UI 框架,它可以快速在 iOS 和 Android 上構建高質量的原生用戶界面,使用這一框架可以大大提高開發效率。在全世界,Flutter 正在被越來越多的開發者和組織使用,并且 Flutter 是完全免費、開源的。


flutter.jpeg

Flutter 的特點

  • 跨平臺:Flutter 支持常見的 MacOS、Windows、Linux、Android、iOS 平臺,可以說是目前支持平臺最多的 UI 框架。良好的跨平臺性,可以大大減少了開發成本。
  • 絲滑般的體驗:使用 Flutter 內置的 Material Design(Android 風格)和 Cupertino(iOS 風格)風格組件,以及豐富的 motion API,平滑而自然的滑動效果和平臺感知,為用戶帶來全新的體驗。
  • 響應式框架:使用一系列基礎組件和響應式框架,可以輕松構建用戶界面。使用功能強大且靈活的 API 可以實現復雜的界面效果。
  • 聲明示編程:主流編程思想,以結果為導向,允許多種實現方式,開發更加靈活。(當然,要表達更復雜的目標時,也應向命令式靠攏了。把流程表達的清晰明了才是一個合格的程序員)
  • 開發效率高:支持Hot reload和Hot restart,寫UI界面的時候,一鍵看效果。
  • 支持插件:使用插件可以訪問平臺本地 API,如相機、藍牙、WiFi 等等。借助現有的 Java、Swift、Object-C、C++ 代碼實現對原生系統的調用。
  • 60fps超高性能:Flutter 編寫的應用可以達到 60fps(每秒傳輸幀數)。Flutter 采用 GPU 渲染技術,所以性能很好,完全可以勝任游戲開發。
  • 嵌套式編碼方式復雜界面嵌套嚴重,可讀性不高

Flutter 的發展

在 2017 年 Google I/O 大會上,Google 首次發布 Flutter。到 2022年5月中旬,已經有 140K 的 Star,Star 數量 Github 上排名18位 。經歷了5年的發展,Flutter 生態系統得以快速增長,國內外有非常基于 Flutter 的成功案例,國內的互聯網公司基本都有專門的 Flutter 團隊。總之,歷時 4 年,Flutter 發展飛快,已在業界得到了廣泛的關注和認可,在開發者中受到了熱烈的歡迎,成為了移動跨端開發中最受歡迎的框架之一。
Google 目前在大力推廣 Flutter,Flutter 項目的貢獻者中有很多人都是來自 Chromium 團隊,并且 Github上活躍度很高。

一、學習路線

Flutter作為一門新開源的移動UI框架,在設計之初,谷歌的工程師就考慮到了開發者在學習Flutter的成本問題,Dart語言與Flutter的結合,獲得泛型、class等強類型語言的特性保證了我們開發的應用安全可控,同時Flutter借鑒了FaceBook成熟開源框架React的單向數據綁定的特性,使我們在開發的過程中可以恰到好處的更新和控制我們的頁面。

通過我們的實際開發使用的經驗看,Flutter是一門學習起來十分順滑的成熟技術框架,下面將推薦一下學習路線讓你快速的入門Flutter,構建你想要的應用:

1.學習Dart語言

官網快速入門:Dart 語言開發文檔(dart.cn/guides

2.學習Flutter UI框架

掌握Widget,在Flutter中,萬物皆Widget!Widget作為我們搭建應用的組件,需要至少掌握我們常見的Widget

Widget 說明
Container 一個擁有繪制、定位、調整大小的 widget。
Row 在水平方向上排列子widget的列表。
Column 在垂直方向上排列子widget的列表。
Image 一個顯示圖片的widget
Text 單一格式的文本
Icon A Material Design icon.
RaisedButton Material Design中的button, 一個凸起的材質矩形按鈕
Scaffold Material Design布局結構的基本實現。此類提供了用于顯示drawer、snackbar和底部sheet的API。
Appbar 一個Material Design應用程序欄,由工具欄和其他可能的widget(如TabBar和FlexibleSpaceBar)組成。
ListView 列表顯示
Icon 圖標
Switch 單選開關
Checkbox 復選框
TextField 輸入框
Form 表單組件
Flex、Expanded 彈性布局
Wrap 流式布局
Stack、Positioned 層疊布局,用于頁面定位,層疊擺放
Align 對齊與相對定位
GestureDetector 手勢識別

基礎知識點

二、進階學習

  • 系統學習:Flutter實戰
  • 插件使用:pub.dev
  • 原生調用:文件操作、拍照、語音、視頻播放、本地化數據緩存、消息通道封裝處理...

三、拓展學習

  • 即使Flutter已經完成了大部分移動開發需要的Widget,但是還是有一些特殊的用戶需求需要我們去實現,既然是跨平臺開發,那就離不開原生開發!是的,如果需要深入移動領域,要學習原生!
  • 學習Flutter運行機制可以幫助我們更好的解決實際開發中的一些問題,譬如:渲染、動畫機制、數據綁定、流數據處理。學習方法:讀Flutter源碼,大量實踐 、思考及總結。

四、環境配置

安裝和環境配置:
flutter官網
mac安裝流程

五、代碼風格

好的代碼有一個非常重要的特點就是擁有好的風格。一致的命名、一致的順序、以及一致的格式讓代碼看起來是一樣的。這非常有利于發揮我們視力系統強大的模式匹配能力。如果我們整個 Dart 生態系統中都使用統一的風格,那么這將讓我們彼此之間更容易的互相學習和互相貢獻。它使我們所有人都可以更容易地學習并為彼此的代碼做出貢獻。

1.命名

在 Dart 中標識符有三種類型。

  • UpperCamelCase(大駝峰): 每個單詞的首字母都大寫,包含第一個單詞。
  • lowerCamelCase (小駝峰):除了第一個字母始終是小寫(即使是縮略詞),每個單詞的首字母都大寫。
  • lowercase_with_underscores(下劃線): 只是用小寫字母單詞,即使是縮略詞,并且單詞之間使用 _ 連接。
要使用 UpperCamelCase 風格命名類型

每個單詞的首字母都大寫,包含第一個單詞。

Classes(類名)、 enums(枚舉類型)、 typedefs(類型定義)、擴展名()、以及 type parameters(類型參數)應該把每個單詞的首字母都大寫(包含第一個單詞),不使用分隔符。

要使用lowerCamelCase 風格來命名。

除了第一個字母始終是小寫(即使是縮略詞),每個單詞的首字母都大寫。

類成員、頂級定義、變量、參數以及命名參數等 。

要使用 lowercase_with_underscores風格命名類型

小寫字母單詞,即使是縮略詞,并且單詞之間使用 _ 連接。

命名庫,包,文件夾,源文件。

2. 引用順序

為了使文件前面部分保持整潔,我們規定了關鍵字出現順序的規則。每個“部分”應該使用空行分割。(暫未查到Flutter有類似iOS的PrefixHeader頭文件,一些大量復用的工具類文件要多次引用?)
順序如下:dart: =>package:=>export

import 'dart:async';
import 'dart:html';
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
import 'foo.dart';
import 'foo/foo.dart';
export 'src/error.dart';

六、插件使用規范

使用規范

建議所有的第三方插件都進行二次封裝后放入pubs文件夾使用,有利于插件版本升級、更換,符合我們開發原則:“一處處理,多處實現”,降低我們的維護成本和開發成本。

插件匯總

1.Provder:數據動態管理插件

熟悉provider是如何調用build方法去通知頁面更新,了解context掛載provider實例,如何通過context在element tree中獲取到對應的provider實例。

2. dio:網絡請求插件

熟悉dio基本配置,攔截網絡請求做業務處理

3. flutter_screenutil:屏幕適配

了解屏幕適配的基本原理,如何調用全局context for root

4. shared_preferences:本地持久化

主要應用場景:少量本地化存取,例如:user信息、版信息。大批量、反復調用存取不建議使用。

5. mqtt_client:mqtt客戶端
6. sqflite:數據庫

主要應用場景:大批量數據本地化存取,例如:搜索歷史、聊天歷史等。注意使用是表的開關,以釋放內存。

7. device_info:設備信息
8. cached_network_image:圖片緩存
9. cached_video_player:視頻播放
10. wechat_assets_picker:圖片視頻選擇器

仿微信選擇圖片與視頻

11. path_provider:設備路徑

注意區分臨時文件路徑和項目文件路徑的區別

12. permission_handler:權限管理
13. isolate:線程管理使用

在大批量調用渲染和網絡請求等“高消耗”的操作下,Flutter Ui視圖會造成卡頓現象,這時候要開啟一個線程去跑這些操作。在使用isolate過程中注意使用完后關閉isolate并釋放掉內存,否則會因內存占用大而導致應用奔潰。

14. flutter_sound:音頻錄取和播放

七、Flutter常用命令

1.環境安裝

flutter --version 查看當前安裝的flutter 版本
flutter upgrade 升級當前的flutter 版本
flutter doctor 檢查環境安裝是否完成
flutter channel 查看flutter所處分支
flutter channel master 切換flutter分支到master(建議使用'stable'穩定分支)

2.項目編譯運行

flutter clean 清空build目錄
flutter pub get 獲取pub插件包
open -a Simulator 運行iOS模擬器
flutter devices 可用模擬器設備列表
flutter run -d 設備名稱 運行項目到指定設備

3.打包

flutter build apk --release --target-platform android-arm64 生成指定CPU架構的apk
flutter build ios iOS打包 這一步并不能生成ipa文件,需要使用Xcode 打包
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容