本書將向你展示:通過使用變量和數(shù)據(jù)結(jié)構(gòu)編寫有效的Dart代碼。通過探索小部件和數(shù)據(jù)處理構(gòu)建Flutter應(yīng)用程序。探索云提供商解決方案,并將其與Flutter集成。通過使用Google Cloud無服務(wù)器管理API來處理數(shù)據(jù)。使用Firebase解決方案,如身份驗證和Cloud Firestore數(shù)據(jù)庫。構(gòu)建適用于移動和桌面平臺的Web應(yīng)用程序。
前言歡迎閱讀本書。首先讓我們來了解一下Flutter,這是一種多平臺開發(fā)框架,正在迅速席卷開發(fā)社區(qū)。Dart 是Flutter 的基礎(chǔ),提供了一個功能豐富的軟件開發(fā)工具包(SDK)。與學(xué)習(xí)多種技術(shù)不同,F(xiàn)lutter 讓你能夠用單一的代碼庫針對Android、iOS、Linux、Web 和Windows 進(jìn)行開發(fā)。作為一個經(jīng)常觀看YouTube 的人,我總是對那些示例應(yīng)用程序深感印象深刻。Flutter 和Dart 不僅讓我重新熱愛編程,還使我有機(jī)會結(jié)識一些了不起的Flutter 社區(qū)成員。Flutter 社區(qū)非常棒,不斷提供高質(zhì)量的內(nèi)容。向那些在YouTube 和Google 開發(fā)者社區(qū)上投入時間和精力幫助人們進(jìn)入軟件行業(yè)的人們致敬。無論你是經(jīng)驗豐富的開發(fā)人員,還是剛開始入門的新手,F(xiàn)lutter 都會讓開發(fā)變得有趣。它學(xué)習(xí)起來非?焖俣夜δ軓(qiáng)大,可以與Firebase 等強(qiáng)大的基于云的解決方案進(jìn)行集成。立即開始,讓我們構(gòu)建一個面向下一百萬用戶的應(yīng)用程序吧。誰該閱讀本書無論你是否了解Flutter 和Dart,都可能聽到過那令人難以抗拒的呼喚,想要著手構(gòu)建一些東西。不要讓拖延的欲望左右你,現(xiàn)在就開始建設(shè)未來。那么,你如何保持動力,并達(dá)到能夠交付一個應(yīng)用程序的狀態(tài)呢?不妨讀讀這本書。學(xué)習(xí)Flutter 和Dart 的美妙之處在于它們擁有非常低的學(xué)習(xí)門檻。開發(fā)應(yīng)用程序需要技能和努力,軟件工程師因此而獲得高薪是有其道理的。無論你是否有多種語言的經(jīng)驗,或是零經(jīng)驗的軟件開發(fā)者,F(xiàn)lutter 和Dart 都是創(chuàng)建令人驚艷應(yīng)用程序的絕佳起點。從第一天開始,你就可以迅速提高工作效率,并以極少的努力制作出美觀的應(yīng)用程序。構(gòu)建應(yīng)用程序涉及許多組件的協(xié)同工作,以及與外部服務(wù)的集成。學(xué)習(xí)使用Firebase 套件的基礎(chǔ)知識,是邁出云端的第一步。開始構(gòu)建游戲,然后跟隨本書了解Flame 游戲引擎的構(gòu)建模塊。寫這本書的緣由我第一次接觸Flutter 是因為我的妻子開始學(xué)習(xí)這門語言,她使用了谷歌提供的Flutter 開發(fā)課程。令我印象深刻的是應(yīng)用程序的快速構(gòu)建速度和精美外觀。這種立即提升的生產(chǎn)力讓我迅速沉迷于構(gòu)建簡單的多平臺應(yīng)用程序。在我剛開始學(xué)習(xí)這項新技術(shù)時,有一些事情并不明顯,或者很難記住。我希望當(dāng)時能有這本技術(shù)手冊陪伴我一起學(xué)習(xí)課程,F(xiàn)在網(wǎng)絡(luò)上有更多出色的在線課程可供選擇,但一個問題仍然困擾著我:在Flutter 中如何實現(xiàn)某個功能?對于一些讀者來說,本書將作為你在創(chuàng)建應(yīng)用程序的旅程中現(xiàn)有知識的補(bǔ)充。對于其他人來說,它將成為你作為Flutter 開發(fā)者的旅程中的安全保障,指導(dǎo)和支持你前進(jìn)。本書概覽對于任何一門語言的初學(xué)者來說,開始時常常會面臨很多不確定的情況,不知道從何處入手,需要掌握哪些知識。雖然我希望你能從頭到尾地閱讀本書,但實際上你很可能會直接跳轉(zhuǎn)到Flutter 的章節(jié)。為此,本書采用了廣泛的分類,以便你能夠根據(jù)需要深入了解相關(guān)主題。以下是本書的大致結(jié)構(gòu):? 第1 ~ 2 章為你提供了Dart 語言的高級介紹,幫助你掌握變量和控制流等基礎(chǔ)知識。? 第3 ~ 6 章快速深入介紹了Dart 語言的基本要素,幫助你能夠熟練運(yùn)用這門語言。? 第7 ~ 14 章涵蓋了Flutter 語言,并演示了如何在屏幕上渲染小部件的基礎(chǔ)知識。如果我猜得沒錯,這一部分將是你在開發(fā)需要創(chuàng)建小部件和管理數(shù)據(jù)的應(yīng)用程序時最常參考的內(nèi)容。? 第15 ~ 16 章介紹了云端開發(fā),特別是使用Firebase 添加身份驗證、數(shù)據(jù)庫和托管功能。? 第17 章介紹了如何使用Flame 游戲引擎,并為你提供了使用該引擎的基本要點。如果你有一個空閑的周末,你可以使用它來重新創(chuàng)建游戲Frogger。? 附錄部分涵蓋了你需要了解的設(shè)置環(huán)境的內(nèi)容,例如安裝Flutter 框架、使用Flutter Doctor 檢查工具以及在集成開發(fā)環(huán)境中的操作方法等。排版約定本書使用以下排版約定:斜體(Italic)表示新術(shù)語、URL、示例電子郵件地址、文件名和擴(kuò)展名。等寬字體(Constant Width)表示程序片段,以及正文中出現(xiàn)的變量、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字等。加粗等寬字體(constant width bold)表示應(yīng)該由用戶輸入的命令或其他文本。等寬斜體(constant width italic)表示應(yīng)該由用戶輸入的值或根據(jù)上下文確定的值替換的文本。OReilly 在線學(xué)習(xí)平臺(OReilly Online Learning)近40 年來,OReilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識和卓越見解,來幫助眾多公司取得成功。公司獨有的專家和改革創(chuàng)新者網(wǎng)絡(luò)通過OReilly 書籍、文章以及在線學(xué)習(xí)平臺,分享他們的專業(yè)知識和實踐經(jīng)驗。OReilly 在線學(xué)習(xí)平臺按照您的需要提供實時培訓(xùn)課程、深入學(xué)習(xí)渠道、交互式編程環(huán)境以及來自O(shè)Reilly 和其他200 多家出版商的大量書籍與視頻資料。更多信息,請訪問網(wǎng)站:https://www.oreilly.com/。聯(lián)系我們?nèi)魏斡嘘P(guān)本書的意見或疑問,請按照以下地址聯(lián)系出版社。美國:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國:北京市西城區(qū)西直門南大街2 號成銘大廈C 座807 室(100035)奧萊利技術(shù)咨詢(北京)有限公司我們?yōu)楸緯O(shè)有一個網(wǎng)頁,其中列出勘誤表、示例和任何額外信息。你可以訪問該網(wǎng)頁:https://oreil.ly/fl-dt-ckbk。對本書的評論或技術(shù)性問題,請發(fā)電子郵件至:errata@oreilly.com.cn。如欲了解OReilly 圖書、培訓(xùn)課程、會議和新聞的更多信息,請訪問網(wǎng)站http://www.oreilly.com。我們的 Facebook:http://facebook.com/oreilly。我們的Twitter:http://twitter.com/oreillymedia。我們的YouTube:http://www.youtube.com/oreillymedia。致謝這個版本特別獻(xiàn)給我可愛的妻子,是她激勵我學(xué)習(xí)Flutter,其目的只是為了讓我修復(fù)她的應(yīng)用程序。感謝我的家人,盡管我忙于寫這本書,但他們總是抽出時間大聲地演奏音樂,或者在我專心工作時突然過來聊天。但說真的,感謝Dawn、Bailey、Elliot、Noah 和Amelia。一年的時間里,撰寫這本書已經(jīng)超越了一個項目,成了一種靈感來源。特別感謝Dylan Peck、Casey Palowitch、Alessandro Palmieri 和Andrew Brogdon 的支持和給予我將Flutter 帶給Google Developer Group 社區(qū)的機(jī)會。正是這樣的行動產(chǎn)生了差異,從我個人的經(jīng)歷來看,我知道這些活動真的備受贊賞。我還要感謝技術(shù)審閱者Alex Moore、Rob Edwards 和Majid Hajian,他們提供了很多寶貴的見解和反饋意見。寫書雖然不容易,但有人愿意抽出他們的閑暇時間并幫助完成這樣的工作真的非常有幫助。非常感謝你們每個人所付出的努力和時間。我要衷心感謝Jeff Bleiel,作為一名出色的編輯,他使這個過程非常愉快,明顯比應(yīng)有的壓力要小得多。同時也感謝OReilly 的Zan McQuade 和Jonathon Owen。
Richard Rose是一名Google Cloud實驗室架構(gòu)師,專注于平臺工程、Kubernetes和無服務(wù)器技術(shù)。他還是《Hands-On Serverless Computing with Google Cloud》一書的作者。
目錄
前言 1
第1 章 學(xué)習(xí)Dart 變量 7
1.1 運(yùn)行Dart 應(yīng)用程序 8
1.2 使用整數(shù)值 .9
1.3 使用雙精度值(Double)的操作 . 11
1.4 使用布爾值(Boolean)的操作 11
1.5 使用字符串(String) 12
1.6 輸出信息到控制臺 13
1.7 添加一個常量變量(編譯時) 15
1.8 添加一個常量變量(運(yùn)行時) 16
1.9 使用空變量 16
第2 章 深入理解控制流程 .19
2.1 驗證條件是否滿足 19
2.2 在滿足條件之前迭代 21
2.3 迭代一系列項 .23
2.4 基于值執(zhí)行條件動作 25
2.5 使用枚舉器表示數(shù)值 26
2.6 實現(xiàn)異常處理 .28
第3 章 實現(xiàn)函數(shù) 31
3.1 聲明函數(shù)31
3.2 向函數(shù)添加參數(shù) 32
3.3 使用可選參數(shù) .33
3.4 從函數(shù)中返回值 35
3.5 聲明匿名函數(shù) .36
3.6 使用Future 添加函數(shù)延遲 38
第4 章 處理列表和映射表 .41
4.1 創(chuàng)建數(shù)據(jù)列表 .42
4.2 修改列表數(shù)據(jù) .43
4.3 使用復(fù)雜類型的列表 44
4.4 處理映射表的鍵/ 值對 46
4.5 打印映射表數(shù)據(jù)結(jié)構(gòu)的內(nèi)容 48
4.6 驗證映射表中是否存在內(nèi)容 49
4.7 打印復(fù)雜數(shù)據(jù)類型 50
第5 章 開始使用面向?qū)ο蟮腄art 53
5.1 開始使用面向?qū)ο蟮腄art 54
5.2 創(chuàng)建一個類 55
5.3 使用構(gòu)造函數(shù)初始化類 .56
5.4 添加類的繼承 .58
5.5 添加類接口 61
5.6 添加Mixin 聚合類 64
第6 章 Dart 測試用例 .67
6.1 將Dart 測試包添加到應(yīng)用程序中 68
6.2 創(chuàng)建示例測試應(yīng)用程序 .70
6.3 在Dart 應(yīng)用程序中運(yùn)行單元測試 71
6.4 分組多個單元測試 74
6.5 為測試添加模擬數(shù)據(jù) 77
第7 章 Flutter 框架基礎(chǔ) .81
7.1 模擬應(yīng)用程序接口 82
7.2 創(chuàng)建一個基礎(chǔ)模板的Flutter 項目 83
7.3 去除Flutter 調(diào)試橫幅 .85
7.4 了解小部件 87
7.5 深入理解小部件樹 88
7.6 提高小部件渲染性能 89
第8 章 添加資源文件 91
8.1 使用pubspec.yaml 文件.92
8.2 添加資源文件夾 94
8.3 引用圖像95
8.4 添加Google Fonts 包 97
8.5 導(dǎo)入包 98
第9 章 使用小部件 101
9.1 在Flutter 中創(chuàng)建無狀態(tài)小部件 102
9.2 在Flutter 中創(chuàng)建有狀態(tài)小部件 103
9.3 重構(gòu)Flutter 小部件 107
9.4 使用Scaffold 類 . 111
9.5 添加一個AppBar 標(biāo)題欄 114
9.6 使用容器構(gòu)建 117
9.7 使用Center 小部件 120
9.8 使用SizedBox 小部件 .122
9.9 使用Column 小部件 .125
9.10 使用Row 小部件 . 129
9.11 使用Expanded 小部件 132
第10 章 開發(fā)用戶界面 . 137
10.1 使用Google Fonts 包 . 138
10.2 結(jié)合RichText 139
10.3 識別宿主平臺 141
10.4 使用Placeholder Widget 144
10.5 使用LayoutBuilder .146
10.6 使用MediaQuery 訪問屏幕尺寸 150
第11 章 組織屏幕數(shù)據(jù) . 155
11.1 實現(xiàn)垂直ListView 156
11.2 實現(xiàn)水平ListView 159
11.3 添加一個SliverAppBar. 162
11.4 添加SliverList 165
11.5 添加一個項目的GridView 170
11.6 添加SnackBar(彈出通知) . 172
第12 章 Flutter 頁面導(dǎo)航 177
12.1 使用路由添加頁面導(dǎo)航(命令式) 178
12.2 使用路由添加頁面導(dǎo)航(聲明式) 182
12.3 實現(xiàn)導(dǎo)航抽屜 186
12.4 使用選項卡 . 191
12.5 添加底部導(dǎo)航欄 195
12.6 使用Key 傳遞信息 . 198
第13 章 處理數(shù)據(jù)資源 . 201
13.1 戰(zhàn)略性地訪問數(shù)據(jù) 202
13.2 重構(gòu)數(shù)據(jù) 204
13.3 從JSON 生成Dart 類 206
13.4 異步使用本地JSON 數(shù)據(jù) 209
13.5 從資產(chǎn)文件夾中使用JSON 數(shù)據(jù)集 214
13.6 訪問遠(yuǎn)程JSON 數(shù)據(jù) .218
第14 章 測試Flutter 用戶界面 . 221
14.1 Flutter 中的自動化小部件測試 .222
14.2 進(jìn)行自動化小部件測試 224
14.3 使用Flutter Driver 進(jìn)行集成測試 225
14.4 測試Android/iOS 設(shè)備兼容性 227
第15 章 讓Firebase、Flutter 一起工作 231
15.1 在Flutter 中使用Firebase 平臺 232
15.2 設(shè)置Firebase 項目 233
15.3 初始化用于本地開發(fā)的Firebase SDK 235
15.4 配置Firebase 仿真器 .238
15.5 在開發(fā)環(huán)境中添加flutterfire_cli .240
15.6 集成Firestore 數(shù)據(jù)庫 243
15.7 向Firestore 數(shù)據(jù)庫寫入數(shù)據(jù) .246
15.8 從Cloud Firestore 中讀取數(shù)據(jù) .251
15.9 將Firebase 身份驗證添加到Flutter 256
15.10 使用Firebase Hosting 托管Flutter Web 應(yīng)用程序 262
第16 章 介紹云服務(wù) . 265
16.1 開始使用云服務(wù)提供商 266
16.2 使用身份和訪問管理 . 266
16.3 使用云存儲托管對象 . 268
16.4 使用Dart 開發(fā)后端HTTP 服務(wù)器 270
16.5 構(gòu)建Dart 容器 271
16.6 介紹Dart 的Serverless .273
第17 章 開始游戲開發(fā) . 277
17.1 將Flame 包添加到Flutter 中 . 278
17.2 創(chuàng)建Flame 腳手架 279
17.3 添加精靈圖 . 281
17.4 向精靈圖添加手動水平移動 283
17.5 添加精靈圖的自動垂直移動 286
17.6 添加碰撞檢測 290
17.7 添加文本渲染 294
17.8 添加圖形基元 298
17.9 添加音效 304
附錄 設(shè)置你的開發(fā)環(huán)境 313