使用 Flutter 加速應用開發

做者 / Larry McKenzieweb

本文由 eBay 技術負責人 Larry Mckenzie 和 Corey Sprague 撰寫。您能夠收聽他們在 Google Apps, Games & Insights 播客 中的討論,詳細瞭解如何使用 Flutter 構建應用。

構建原生應用原本就不輕鬆,若是須要在不到一年的時間內構建出一款應用,同時還要知足目標受衆的嚴格要求,就更加困難了。咱們在構建 eBay Motors 應用時,就遇到了這樣的挑戰。但在 Google 的界面工具包 Flutter 的幫助下,咱們得以快速針對 Android 和 iOS 平臺提供優質且一致的體驗。編程

eBay Motors

過去十幾年來,eBay 在汽車市場的業務一直十分活躍。但在幾年前,咱們的領導層發現了一個機遇: 咱們能夠在 eBay 平臺提供定製化的車輛買賣服務。購買汽車不一樣於大多數在線購物: 購車是一項較爲重大的消費,並且銷售過程當中存在一些特殊的問題須要考慮。eBay 傾向於上架經典車型、稀有車型、改裝車等獨特品類的車輛。eBay賣家每每想要爲本身的愛車找到真正懂得欣賞和珍惜的買家。不少 eBay 買賣雙方都在尋找更加個性化、更爲獨特的服務,因此咱們想爲這些用戶構建一款特殊的應用——eBay Motors 應用便應運而生。安全

目標受衆

eBay Motors 的目標受衆是廣大汽車愛好者。儘管愛好者們天天都會關注汽車,但可能幾年纔會買一次車。所以,打造一款可以讓他們願意按期使用的應用並不容易。開發團隊着重研究了這些人的使用動機,以及他們但願與其餘汽車愛好者互動的方式。網絡

買家可能正在物色下一輛車,或者只是隨便看看或尋找靈感。在考慮購買車輛時,買家但願在決定購買以前充分獲取相關信息。他們但願可以從各個角度查看車輛 - 內飾、外觀、發動機、傳動系統。他們想了解車況,也想了解賣家。當前車主的用車狀況怎樣?他們天天都開車嗎?車輛是否在修理廠維修拋光過?車輛是每一年行駛一次,只在車展上展出嗎?咱們想構建一種能夠充分知足這些需求的體驗。框架

開發團隊在與賣家談論出售車輛方面的問題時,發現賣家明顯格外關心買家是誰,而並不是老是關心價格。一些賣家表示,若是他們以爲買家真的會悉心呵護他們的愛車,那麼降價出售並不是不可接受。這種態度與傳統汽車市場截然不同,在傳統汽車市場中,賣家老是但願可以以最高價格出售車輛。工具

在調查中,人們認爲買賣雙方的關係並無在交易達成後就結束。賣家但願可以跟蹤愛車狀況,並繼續與他們的買家交流。買家一樣但願保持聯繫,以便詢問: "嗨,我想改裝這裏,但我發現你以前改裝過其餘部位。能夠給我講講具體狀況嗎?" 所以,咱們但願構建一些功能,使買賣雙方造成一個不只僅只是討論交易的社區。學習

選擇 Flutter

在開發這款應用時,eBay Motors 的領導層爲開發團隊提供了很大的自主權。惟一的要求是: 這款應用必須在一年內完成開發。根據咱們的調查,顯然這款應用必須包含 eBay 用戶所指望的所有功能: 鉅細無遺的商品詳情頁、拍賣、消息功能、搜索等。開發團隊還積極地添加了有助於培養活躍社區的功能。這意味着咱們的工做範圍十分龐雜,咱們認爲,若是依然沿用兩支獨立平臺開發團隊的模式,將沒法在截止日期前完成任務。開發工具

顯然,咱們須要一種新的應用開發方法。開發團隊以前對跨平臺開發工具進行過一些評估,但並無找到令咱們滿意的解決方案。測試

但在這個項目開始時,Flutter 1.0 發佈了。Flutter 是 Google 的界面工具包,可基於單個代碼庫爲移動、網絡和桌面端構建富有吸引力的原生編譯應用。這看起來頗有前景,因此咱們的開發團隊開始了更加詳細的調查。編碼

對 Flutter 進行完全的評估後,開發團隊對其至關滿意。短短几周內,開發團隊便確信 Flutter 是開發這款應用的最佳選擇。

eBay Motors 以前組建了兩支開發團隊,分別採用不一樣的工做方式、工做安排和編程風格。在決定使用 Flutter 時,必須弄清楚應該如何協調兩支開發團隊。因爲時間緊迫,所以開發團隊在如何構建應用方面必須達成一致。全部人都秉持着相同的目標 - 打造高品質的產品、快速交付並超越預期。

兩支團隊開會討論了全部分歧,儘管雙方各有讓步,但最終結果很是協調,這也爲順利發佈產品作好了充分準備。

兩支團隊都缺少 Flutter 和 Dart 的使用經驗,但官方提供的指引很是詳盡,學習起來很是簡單。

首個版本

咱們在 2019 年 3 月收到了第一份產品需求——咱們須要在三個月內向咱們的 CEO 交付包含可用交易體驗的 Beta 版應用。

第一個版本需求由於時間緊張,迫使團隊大幅削減應用的功能。咱們知道,即使在 Flutter 的幫助下,咱們也不可能一次性解決全部問題——沒法構建出包含全部買賣功能的完整社區和完善的消息功能。咱們必須制定合理的開發策略,肯定須要優先開發的重點功能,而非同時開發全部功能。團隊經過討論削減哪些功能,總結出了大量關注重點。這樣咱們就肯定了研究重點,以及隨之而來的開發重點。每一個微小變化都會解鎖下一個變化,使咱們共同朝着里程碑一步步邁進。咱們積極地關注問題,專一地解決用戶但願咱們處理的細節。這一過程困難且經常凌亂不堪,但在 Flutter 的強力助推下,咱們以意想不到的方式加速追遇上了一個個任務節點。每到達一個節點,團隊都會爲之振奮。

實現首個里程碑以後,咱們還要攻克多個後續里程碑,而 Flutter 使得咱們可以一次性解決問題,並繼續向前邁進。咱們的產品從交付給 CEO 的 Beta 版發展爲 eBay 內測 Beta 版,供數千名 eBay 用戶使用。一個月後,咱們的產品進入了公開 Beta 版測試階段。終於,咱們於 2019 年 12 月底正式發佈了 iOS 和 Android 版應用。

對於 eBay Motors 而言,每一個時刻都意義非凡。開發團隊也經過這些時刻一步步地創建了信心。將產品交付給新用戶、得到反饋,並進行更正和調整,咱們可謂 "邊作邊學"。朝着目標快速地交付小規模迭代,也有助於咱們的產品團隊取得成功。即便應用的功能和複雜程度不斷提升,Flutter 也讓咱們可以持續快速地交付產品。

因爲在發佈時大幅削減了應用功能,致使此時咱們並無聊天和社區功能。所以,在 2020 年 1 月,開發團隊着手從零開始構建咱們的社區,並在發佈後的幾個月內增長了 50% 的應用功能。

Flutter 的影響

在剛開始採用 Flutter 時,咱們只是將其視爲一種支持共享代碼並節省時間的工程工具。但 Flutter 幫助開發團隊解決了許多咱們並未期待它能解決的問題。在某些狀況下,它甚至解決了咱們未知的問題。

咱們但願確保用戶界面在各個平臺之間的一致性: 將用戶體驗重點凝聚在 eBay Motors 品牌上,而非迎合特定平臺的設計語言。可是,產品必須保留所在平臺的具體行爲,例如滾動的物理效果以及導航機制。幸運的是,Flutter 以開箱即用的方式使這些問題迎刃而解。這意味着設計師能夠省去不少工做,由於他們只須要製做一份與平臺無關的設計便可。

在產品需求方面,咱們但願平臺之間不存在差別。因爲每項需求只需實現一次,因此減輕了咱們很多的負擔。咱們開會的次數減小了,事半功倍。

隨着開發團隊對 Flutter 的瞭解日益加深,咱們意識到,代碼共享可謂意義非凡。在咱們的代碼庫中,咱們在 Android 和 iOS 之間共享了 98.6% 的代碼。只有大約 0.5% 的代碼爲平臺特定的原生代碼。其他部分包括咱們的持續集成流水線、自動化工具和開發者支持。

在開發過程當中,經過共享代碼能夠節省大量資金,而在測試方面也一樣如此。在開發團隊曾使用過的全部平臺當中,Flutter 在測試方面是佼佼者之一。它的測試功能幫助咱們加快了進度,並讓咱們在發佈產品時信心十足。咱們從一開始就採起了強制執行 100% 代碼覆蓋率的策略,Flutter 讓咱們可以輕鬆實現這一目標。

隨着應用進入生產階段,節省資金的優點也在持續體現。因爲咱們沒必要單獨處理 iOS 或 Android 錯誤,所以支持內容的可預測性要高得多。開發團隊能夠將新的版本發佈到更具包容性的 Android 測試版渠道,以後再充滿信心地發佈 iOS 版本。因爲只需構建和支持一個應用,咱們可以節省大量資金。

Flutter 入門技巧

若是是初上手 Flutter,在解決移動應用中的某些問題的時候,必須擺脫先入爲主的觀念,由於 Flutter 所使用的範式與傳統 iOS 和 Android 大相徑庭。當您理解了 Flutter 所用的應用構建方式後,一切都將水到渠成。最好的學習方法是花些時間研究 Flutter 代碼庫。

Flutter 的一大優勢就是開源。您能夠查看 Flutter 團隊是如何構建每一個組件的,從中能夠收穫不少有價值的信息。

Flutter 社區也很是活躍。若是您須要 Flutter 框架還沒有提供的解決方案,那麼極可能已經有人構建瞭解決這個問題的 package。咱們鼓勵您的團隊探索並查找所需信息,也歡迎您貢獻本身的專業知識並積極擁抱開源文化。

Flutter 的前景

在 eBay Motors 剛開始使用 Flutter 時,還鮮有大型公司公開使用該框架: 它當時僅是一款小衆工具包,彷佛還缺少實戰檢驗。時至今日,這個框架勢頭愈發強勁,不少公司向其敞開了懷抱。使人興奮的是,Flutter 提供了最爲現代且最爲優秀的應用開發體驗。而最棒的一點是,它仍在不斷地發展與改進。

隨着 Flutter 的發展,Dart 獲得了大量的資源投入。Swift 和 Kotlin 中諸如空安全等一些必不可少的特性獲得了積極的引入。看到 Flutter 的持續發展,以及這種發展爲構建 Flutter 應用所帶來的改進,咱們感到十分喜悅。不管公司體量大小,當你們逐漸意識到 Flutter 能夠幫助他們基於單個代碼庫開發桌面、web 和移動端應用,天然也會有更多團隊採用 Flutter。

結語

雖然 eBay Motors 開發團隊的全部成員都擁有原生 iOS 或原生 Android 開發背景,但在用過 Flutter 以後,全部人都不約而同地喜歡上了它。Flutter 的開發者體驗明顯好於以往: 它能夠利用熱重載功能讓開發者在進行編碼時就得到快速反饋,並且因爲開發流程的順暢,使得問題可以快速獲得解決,這些都是很是有價值的優點。在兩年的使用過程當中,驚喜無處不在。咱們常能聽到同事大喊: "我愛 Flutter!我剛發現了一個新的妙招!"

對於咱們這樣規模的團隊,若是沒有選擇 Flutter,就沒辦法完成 eBay Motors 應用的開發。它讓咱們可以將資源集中到一塊兒,這是分別構建兩個平臺應用的模式所沒法實現的。Flutter 是幫助咱們加快開發進程的加速器。

更多 Google Play 開發者播客節目,請移步《Apps, Games & Insights 播客節目合輯》,瞭解不一樣領域的開發者經過多種視角與主題,探討海外市場開發與發行的經驗心得。

您對使用 Flutter 構建應用有何想法?歡迎在評論區分享您的評論。

相關文章
相關標籤/搜索