
# 緣起
在全球,隨著Flutter被越來越多的知名公司應用在自己的商業APP中,Flutter這門新技術也逐漸進入了移動開發者的視野,尤其是當Google在2018年IO大會上發布了第一個Preview版本后,國內刮起來一股學習Flutter的熱潮。
為了更好的方便幫助中國開發者了解這門新技術,我們,[Flutter中文網](https://flutterchina.club/),前后發起了Flutter翻譯計劃、Flutter開源計劃,前者主要的任務是翻譯Flutter官方文檔,后者則主要是開發一些常用的包來豐富Flutter生態,幫助開發者提高開發效率。而時至今日,這兩件事取得的效果還都不錯!
目前,Flutter中文官網日PV在5W左右,每日獨立訪問人數8000多。
自今年我們在github建立[官方賬號](https://github.com/flutterchina)以來,前后開源了cookieJar、dio、flukit等多個項目,而dio在開源兩周后,就迅速成為Flutter第三方包中Star排名第一的開源庫。
之前,有很多次被沒用過Flutter但對其保持好奇的開發者問到”Flutter的性能究竟怎樣?“,”開發體驗真的好嗎?“這類問題。當時之所以會有很多這樣的問題,主要的原因就是那時Flutter的成功案例太少,雖然國內閑魚是第一個引入Flutter的商業應用,但初期也只是在很少的頁面使用了Flutter,Flutter究竟能否適合用于完整項目缺乏考驗。那時,我就想如果能用Flutter開發一個完整的APP發布到應用商店,這樣開發者就可以在猶豫的時候可以先實際感受一下Flutter的流暢度,這樣有個直觀的了解后,就會容易做出判斷,為此,我開發了[Gitme](https://flutterchina.club/app/gm.html),它是一個Github客戶端,它支持了源碼瀏覽、Issue、Label等Github的大多數功能。到目前為止,通過Gitme登錄過Github賬號的用戶有5000多,日活用戶有500。更重要的是,有很多人正是用了Gitme后,才來學flutter的。
雖然做的事情已經夠多了,但是仍有一些很有必要去做的事情,由于時間原因,一直被擱置。
隨著學習Flutter的人越來越多,一部分開發者通過查看官網的文檔就能入門,但也有很多開發者感覺學習時有些吃力,而這主要的原因是沒有一個資料去系統的學習Flutter。
我們雖然翻譯了官方文檔,但是對于海量的SDK文檔,基本很難去全部翻譯。而那時,電子工業出版社正好找到了我,希望我能寫一本Flutter實戰類的書籍。
這個想法聽起來不錯,書最大的好處就是可以系統性的介紹一門新技術,但由于我平時工作太忙,周末時間已經有很多花費在維護中文網和開源項目上了,所以此事不得不推遲,而直到今天,你現在看到的,也仍然不是完整的內容,目錄灰色的部分都還沒有寫,那什么時候能寫完?
如果只靠我一個人,也只能等我有空了才能寫,但是今年實在是太忙了!當然,還是有一些方法可以加快進度,比如大家一起來寫,本書已經開源,有志之士都可以提PR,然后需要做好的就是Review和校稿;當然還有一個不能保證一定有用的辦法就是點擊下面的”打賞“按鈕,然后發一個大紅包,這樣作者拿了錢,說不定會不好意思慢慢吞吞的寫,畢竟是收了錢的,哈哈。
最后再說一下為什么本書要開源。既然是電子工業出版社約的稿,就這么公開,難道將來就不會沖擊實體書的銷量?這個問題我是仔細考慮過的,很多寫過書的人可能都知道,寫技術書是不賺錢的,能收獲的也就是一點點名氣,而我吧卻只喜歡錢,既然賺不到錢,那何不直接公開得了…當然還有另外一個原因就是要做實體書的話,最后和編輯校稿會花費很多時間,可是我實在是沒時間了,很可能會放棄實體書出版,為了防止本書最后因不能正常出版而不能被大家看到,所以最終決定了開源。
最后,如果您發現本書中的錯誤,歡迎點擊右上角的”編輯按鈕“,提PR。如果您想一起參與本書創作,可以參考[《Flutter實戰》貢獻指南](https://github.com/flutterchina/flutter-in-action#%E8%B4%A1%E7%8C%AE%E9%A1%BB%E7%9F%A5)。
最后,知識是應該付費的,創作不易,開源不等于免費,如果您是本書讀者并手頭寬裕,可以點擊下面打賞按鈕打賞;當然,如果您囊中羞澀,您也可以閱讀本書,但我對您有個小小的要求,希望您在閱讀的過程中能積極參與到本書的糾錯以及未完成內容的創作上來,也算是有所付出。
- 緣起
- 起步
- 移動開發技術簡介
- Flutter簡介
- 搭建Flutter開發環境
- 常見配置問題
- Dart語言簡介
- 第一個Flutter應用
- 計數器示例
- 路由管理
- 包管理
- 資源管理
- 調試Flutter APP
- Dart線程模型及異常捕獲
- 基礎Widgets
- Widget簡介
- 文本、字體樣式
- 按鈕
- 圖片和Icon
- 單選框和復選框
- 輸入框和表單
- 布局類Widgets
- 布局類Widgets簡介
- 線性布局Row、Column
- 彈性布局Flex
- 流式布局Wrap、Flow
- 層疊布局Stack、Positioned
- 容器類Widgets
- Padding
- 布局限制類容器ConstrainedBox、SizeBox
- 裝飾容器DecoratedBox
- 變換Transform
- Container容器
- Scaffold、TabBar、底部導航
- 可滾動Widgets
- 可滾動Widgets簡介
- SingleChildScrollView
- ListView
- GridView
- CustomScrollView
- 滾動監聽及控制ScrollController
- 功能型Widgets
- 導航返回攔截-WillPopScope
- 數據共享-InheritedWidget
- 主題-Theme
- 事件處理與通知
- 原始指針事件處理
- 手勢識別
- 全局事件總線
- 通知Notification
- 動畫
- Flutter動畫簡介
- 動畫結構
- 自定義路由過渡動畫
- Hero動畫
- 交錯動畫
- 自定義Widget
- 自定義Widget方法簡介
- 通過組合現有Widget實現
- 實例:TurnBox
- CustomPaint與Canvas
- 實例:圓形漸變進度條(自繪)
- 文件操作與網絡請求
- 文件操作
- Http請求-HttpClient
- Http請求-Dio package
- 實例:Http分塊下載
- WebSocket
- 使用Socket API
- Json轉Model
- 包與插件
- 開發package
- 插件開發:平臺通道簡介
- 插件開發:實現Android端API
- 插件開發:實現IOS端API
- 系統能力調用
- 國際化
- 讓App支持多語言
- 實現Localizations
- 使用Intl包
- Flutter核心原理
- Flutter UI系統
- Element和BuildContext
- RenderObject與RenderBox
- Flutter從啟動到顯示