Flutter實(shí)戰(zhàn) 前言

2021-03-06 14:08 更新

本書(shū)是第一本系統(tǒng)介紹 Flutter 技術(shù)的中文書(shū)籍,它是 Flutter 中文社區(qū)發(fā)起的開(kāi)源項(xiàng)目之一,旨在幫助開(kāi)發(fā)者入門(mén),系統(tǒng)地、循序漸進(jìn)的了解 Flutter。

本書(shū)官網(wǎng)訪問(wèn)量較大,由于服務(wù)器配置有限,所以某些時(shí)段訪問(wèn)本站可能略有延遲,如果延遲較久,讀者可以直接在Github上閱讀本書(shū) (opens new window)。

#緣起

在全球,隨著 Flutter 被越來(lái)越多的知名公司應(yīng)用在自己的商業(yè)APP中,F(xiàn)lutter這門(mén)新技術(shù)也逐漸進(jìn)入了移動(dòng)開(kāi)發(fā)者的視野,尤其是當(dāng) Google 在 2018 年 IO 大會(huì)上發(fā)布了第一個(gè) Preview 版本后,國(guó)內(nèi)刮起來(lái)一股學(xué)習(xí) Flutter 的熱潮。

在 Flutter 發(fā)布之初,當(dāng)時(shí),我在看完 Flutter 原理介紹后,就對(duì)它產(chǎn)生了濃厚的興趣。當(dāng)時(shí)筆者身邊也一些人比較關(guān)注 Flutter,我也被經(jīng)常問(wèn)到關(guān)于 Flutter 的一些問(wèn)題,比如 Flutter 怎么樣?和 RN 有什么區(qū)別?Flutter 為什么要用 Dart?當(dāng)時(shí)也聽(tīng)到了一些批評(píng)的聲音,比如有些人說(shuō) Flutter 只是重復(fù)造輪子,沒(méi)啥亮點(diǎn)、Flutter 最大的缺點(diǎn)就是使用了 Dart 語(yǔ)言等。在聽(tīng)到這些問(wèn)題及論調(diào)后,我深知這是對(duì) Flutter 的不了解而造成的,這和當(dāng)時(shí)國(guó)內(nèi)缺乏 Flutter 中文文檔和教程有直接關(guān)系,很多人對(duì) Flutter 的了解都只停留在 Google 的發(fā)布會(huì)介紹(有中文翻譯)。

在筆者深入的了解 Flutter 后,深知 Flutter 必將是一個(gè)會(huì)改變移動(dòng)開(kāi)發(fā)格局的里程碑級(jí)作品,它從設(shè)計(jì)之初就對(duì)性能和開(kāi)發(fā)效率兼顧,并且借鑒了 React(一個(gè) Web 開(kāi)發(fā)框架)的響應(yīng)式的 UI 框架設(shè)計(jì)思想等,總之,很難用一兩句話說(shuō)完 Flutter 的優(yōu)點(diǎn),同時(shí)我也很快成為了 Flutter 的路轉(zhuǎn)粉。

為了更好的幫助中國(guó)開(kāi)發(fā)者了解這門(mén)新技術(shù),我在2018年初開(kāi)始翻譯Flutter官網(wǎng)文檔,同年4月份上線了Flutter中文網(wǎng) (opens new window),上線后反響很強(qiáng)烈,F(xiàn)lutter 中文網(wǎng)也很快被傳播開(kāi),百度搜索排名迅速躥升到前三,截止目前,F(xiàn)lutter 中文官網(wǎng)日 PV 在 7 萬(wàn)左右,每日獨(dú)立訪問(wèn)人數(shù)近一萬(wàn)多。

雖然 Flutter 中文網(wǎng)給中國(guó)開(kāi)發(fā)者提供了很好的第一手了解 Flutter 的資料,但是筆者還會(huì)經(jīng)常遇到一些對(duì) Flutter 技術(shù)處于圍觀而不愿嘗試的開(kāi)發(fā)者。這主要是因?yàn)楫?dāng)時(shí) Flutter 在國(guó)內(nèi)沒(méi)有成功案例,再加上新技術(shù)都有學(xué)習(xí)成本,所以即使有文檔,也會(huì)有一些開(kāi)發(fā)者猶豫是否來(lái)學(xué)習(xí)。為了解決這部分開(kāi)發(fā)者的疑慮,我就想如果能用Flutter開(kāi)發(fā)一個(gè)完整的APP發(fā)布到應(yīng)用商店,這樣開(kāi)發(fā)者就可以在猶豫的時(shí)候可以先實(shí)際感受一下Flutter應(yīng)用,這樣有個(gè)直觀的了解后,就會(huì)容易做出判斷,為此,我開(kāi)發(fā)了Gitme (opens new window),它是一個(gè) Github 客戶端,它支持了源碼瀏覽、Issue、Label 等 Github 的大多數(shù)功能,到目前為止,通過(guò) Gitme 登錄過(guò) Github 賬號(hào)的用戶有 8000 多人,日活用戶有 1000 人。更重要的是,有很多人正是用了 Gitme 后,才來(lái)學(xué) Flutter 的。

無(wú)論是做 Flutter 中文網(wǎng),還是寫(xiě) Gitme,主要目標(biāo)都是幫助開(kāi)發(fā)者學(xué)習(xí) Flutter,同時(shí)消除圍觀開(kāi)發(fā)者疑慮。但當(dāng)開(kāi)發(fā)者們真正開(kāi)始動(dòng)手時(shí),F(xiàn)lutter 的生態(tài)問(wèn)題就變得尤為突出。由于在 2018 年初 Flutter 剛起步時(shí),很多基礎(chǔ)的包和庫(kù)都是空白,少數(shù)已有的一些庫(kù)也大都是預(yù)覽版(未到 1.0),存在很多 bug。這個(gè)狀況不是一兩個(gè)人花一兩天能搞定的,這是需要聚整個(gè) Flutter 開(kāi)發(fā)者社群之力,耗費(fèi)數(shù)年時(shí)間才可能有所改善。因此,在2018年4月份,我以 Flutter 中文網(wǎng)名義發(fā)起了 Flutter 開(kāi)源計(jì)劃,該計(jì)劃主要是開(kāi)發(fā)一些常用的包來(lái)豐富 Flutter 生態(tài),幫助開(kāi)發(fā)者提高開(kāi)發(fā)效率。自在 github 建立 Flutter中文開(kāi)發(fā)者社區(qū)賬號(hào) (opens new window)以來(lái),前后開(kāi)源了 dio、cookieJar、flukit 等多個(gè)項(xiàng)目,而 dio 在開(kāi)源兩周后,就迅速成為 Flutter 第三方包中 Star 排名第一的開(kāi)源庫(kù)。

雖然做的事情已經(jīng)夠多了,但是仍有一些很有必要去做的事情,由于時(shí)間原因,一直被擱置。

隨著學(xué)習(xí) Flutter 的人越來(lái)越多,一部分開(kāi)發(fā)者通過(guò)查看官網(wǎng)的文檔就能入門(mén),但也有很多開(kāi)發(fā)者感覺(jué)學(xué)習(xí)時(shí)仍然有些吃力,主要原因有兩個(gè),首先官網(wǎng)的文檔主要是為了引導(dǎo)開(kāi)發(fā)者快速上手的,講的并不是很細(xì);其次是我們雖然翻譯了官方文檔,但是對(duì)于 Flutter SDK 文檔并沒(méi)有翻譯,而在開(kāi)發(fā)中遇到的一些具體問(wèn)題通常都得去查看 SDK 文檔。所以,要解決這兩個(gè)問(wèn)題,必須得有一個(gè)系統(tǒng)化的 Flutter 教程,它不僅可以快速引導(dǎo)開(kāi)發(fā)者入門(mén),而且也能觸及到一些細(xì)節(jié)和原理,最好也能提供一些學(xué)習(xí)和研究 Flutter 的方法。因此,如果能有一本能系統(tǒng)地介紹 Flutter 的書(shū)籍便是便是非常棒的!但是,當(dāng)時(shí)沒(méi)有一本關(guān)于 Flutter 的中文書(shū)籍,因此,我便計(jì)劃寫(xiě)一本能由淺入深、系統(tǒng)介紹Flutter的書(shū)。2018 年 12 月,《Flutter 實(shí)戰(zhàn)》完成初稿,并在 Github 上開(kāi)源,同時(shí)上線了《Flutter實(shí)戰(zhàn)》電子書(shū)官網(wǎng) (opens new window),至今每天有 3000 多人在線瀏覽本書(shū)。那為什么不直接出版?如果直接出版,不僅有稿費(fèi),而且也能保護(hù)知識(shí)產(chǎn)權(quán),而直接開(kāi)源,不就只能當(dāng)雷鋒了?其實(shí),無(wú)論是做中文網(wǎng)、寫(xiě) Gitme、做Flutter開(kāi)源項(xiàng)目,我的出發(fā)點(diǎn)都是為了能幫助中國(guó)開(kāi)發(fā)者了解、學(xué)習(xí) Flutter,而這是一件非常有意義的事,只要堅(jiān)持做對(duì)別人有價(jià)值的事,那么上帝遲早會(huì)獎(jiǎng)賞你;當(dāng)然我們也在網(wǎng)站中留了打賞的按鈕,如果讀者覺(jué)得有幫助,可以掃碼打賞,請(qǐng)筆者喝一杯咖啡。另外由于成書(shū)比較倉(cāng)促,當(dāng)時(shí)書(shū)中也有很多錯(cuò)誤,開(kāi)源后,有很多讀者提PR來(lái)糾正書(shū)中的錯(cuò)別字,時(shí)至今日,有 78 名開(kāi)發(fā)者為本書(shū)提過(guò) PR,我在此,衷心的感謝你們。

起初,我沒(méi)有出版實(shí)體書(shū)的打算,當(dāng)時(shí)我以為開(kāi)發(fā)者直接通過(guò)在線訪問(wèn)本書(shū)官網(wǎng)即方便又不用付費(fèi),何樂(lè)而不為。但在本書(shū)上線后,很多讀者來(lái)添加微信好友,表示非常有收益,很期待出版紙質(zhì)書(shū),甚至有比較熱心的讀者想提前付定金預(yù)定!我理解,這是大家對(duì)我所做之事的認(rèn)可和鼓勵(lì)??紤]到,確實(shí)有一部分讀者,尤其是還沒(méi)畢業(yè)的同學(xué),可能更喜歡通過(guò)書(shū)籍去學(xué)習(xí),為此,我已經(jīng)和機(jī)械工業(yè)出版社合作,目前本書(shū)紙質(zhì)版正在出版中,敬請(qǐng)關(guān)注。

#本書(shū)組織結(jié)構(gòu)

本書(shū)采用由淺入深的方式介紹 Flutter 技術(shù)原理,分為三篇,總計(jì) 15 章,各篇的主要內(nèi)容如下。

  • 第一篇,入門(mén)篇(第1章~第7章),包括 Flutter 技術(shù)的出現(xiàn)背景和簡(jiǎn)介、Flutter 的各種類型的Widget 以及如何構(gòu)建 UI。通過(guò)學(xué)習(xí)本章,讀者可以掌握如何使用 Flutter 來(lái)構(gòu)建UI界面。
  • 第二篇,進(jìn)階篇(第 8 章~第 14 章),包括 Flutter 中的事件機(jī)制、動(dòng)畫(huà)、自定義組件、文件和網(wǎng)絡(luò)、插件、國(guó)際化以及 Flutter 核心原理等。通過(guò)本章內(nèi)容,讀者可以對(duì)Flutter整體構(gòu)建及原理有一個(gè)深入的認(rèn)識(shí)。
  • 第三篇,實(shí)例篇(第 15 章),本章主要通過(guò)一個(gè)簡(jiǎn)版的 Github APP 來(lái)將前面介紹的內(nèi)容串起來(lái),讓開(kāi)發(fā)者對(duì)一個(gè)完整的 Flutter APP 開(kāi)發(fā)流有個(gè)了解。

#本書(shū)特色

筆者在大學(xué)時(shí)讀過(guò)候捷(真名侯俊杰)寫(xiě)的一些 C++ 相關(guān)書(shū)籍,在他的《深入淺出 MFC》一書(shū)中,有一句話我印象像非常深 “唯有深入,方能淺出”。我非常認(rèn)同這句話,對(duì)于一門(mén)技術(shù),只有了解的深入,才能用最淺顯、通俗的話語(yǔ)描述出。我在寫(xiě)作本書(shū)時(shí),深入淺出就是一個(gè)主要目標(biāo)。所以,本書(shū)的目標(biāo)不僅是想告訴讀者如何使用 Flutter,而且也非常關(guān)注各個(gè)知識(shí)點(diǎn)的底層實(shí)現(xiàn)以及設(shè)計(jì)思想。從本書(shū)章節(jié)劃分上來(lái)看,入門(mén)篇為“淺出”,進(jìn)階篇?jiǎng)t是“深入”。另外由于 PC 客戶端開(kāi)發(fā)、移動(dòng)開(kāi)發(fā)、Web 開(kāi)發(fā)這些經(jīng)驗(yàn)我都有,而 Flutter 本質(zhì)上是一個(gè) UI 系統(tǒng),而 UI 系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)在”大前端“下有很多相通之處,所以在本書(shū)中的一些知識(shí)點(diǎn)我也會(huì)對(duì)比一些其他 UI 系統(tǒng)(主要是 Android 或Web)相應(yīng)的實(shí)現(xiàn),便于有相關(guān)開(kāi)發(fā)經(jīng)驗(yàn)的讀者對(duì)比理解。

#本書(shū)讀者對(duì)象

  • 讀者至少熟悉一種編程語(yǔ)言。
  • 讀者最好接觸過(guò) PC 客戶端、移動(dòng)開(kāi)發(fā)或 Web 前端開(kāi)發(fā)中的一種。
  • 本書(shū)不適合做為編程的入門(mén)讀物。

#關(guān)于隨書(shū)源碼

由于篇幅所限,本書(shū)中大多數(shù)示例代碼都只是部分核心代碼,讀者可以去這里 (opens new window)查看下載。

#致謝

感謝一直以來(lái)支持 Flutter 中文網(wǎng)、Flutter 開(kāi)源項(xiàng)目的人以及所有對(duì)本書(shū)提過(guò) PR 的人,正是因?yàn)橛心銈儯庞羞@本書(shū)。另外尤其感謝給本書(shū)打賞過(guò)的同學(xué),你們的支持給了我很大的鼓勵(lì)。

#權(quán)益

最后,知識(shí)是應(yīng)該付費(fèi)的,創(chuàng)作不易,開(kāi)源不等于免費(fèi),如果您是本書(shū)讀者并手頭寬裕,可以點(diǎn)擊下面打賞按鈕打賞;當(dāng)然,如果您囊中羞澀,您也可以閱讀本書(shū),但我對(duì)您有個(gè)小小的要求,希望您在閱讀的過(guò)程中能積極參與到本書(shū)的糾錯(cuò)以及未完成內(nèi)容的創(chuàng)作上來(lái),也算是有所付出。

近來(lái)在網(wǎng)上發(fā)現(xiàn)很多原封不動(dòng)復(fù)制本書(shū)的鏡像網(wǎng)站和大量復(fù)制或引用了本書(shū)但未注明出處的博客、文章甚至?xí)?;?duì)此,筆者在此聲明,本書(shū)著作權(quán)歸 wendux 所有,任何組織或個(gè)人在未經(jīng)授權(quán)的情況下復(fù)制、拷貝、抄襲本書(shū)用于商業(yè)目的,筆者保留追究其法律責(zé)任的權(quán)利。如果是非商業(yè)目的的轉(zhuǎn)載和引用,請(qǐng)注明出處并附上本書(shū)網(wǎng)址。另外如有出版機(jī)構(gòu)愿意為本書(shū)出版實(shí)體書(shū)或者想轉(zhuǎn)載本書(shū)內(nèi)容,亦或是想合作,請(qǐng)加微信 Demons-du.

#勘誤

由于 Flutter SDK 在不斷更新,本書(shū)中的部分內(nèi)容(如類的繼承關(guān)系、參數(shù)等)可能會(huì)和新版本的 Flutter 不一致,讀者以最新的 Flutter SDK 為準(zhǔn)。另外,由于時(shí)間倉(cāng)促,書(shū)中難免有錯(cuò)誤之處,如果您發(fā)現(xiàn)本書(shū)中的錯(cuò)誤,歡迎點(diǎn)擊右上角的”編輯按鈕“,提 PR。如果您想一起參與本書(shū)創(chuàng)作,可以參考《Flutter實(shí)戰(zhàn)》貢獻(xiàn)指南 (opens new window)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)