iT邦幫忙

2023 iThome 鐵人賽

DAY 28
1
Mobile Development

攜手神隊友ChatGPT:攝護腺自我照護App開發歷程!系列 第 28

D28-解碼Flutter官方文件,一起來了解 Styling widgets和Beyond UI的設計: Data & backend

  • 分享至 

  • xImage
  •  

Part1: 今日目標

1.前言
2.內容
3.提問

Part2: 今日內容

1.前言

今天將延續昨天內容,將User interface剩下的兩個Section簡介完畢,並著手開始Beyond UI章節的說明。

2.內容

Part_3: User interface, Widget catalog

Section_13. Styling widgets

包含以下內容:

  • 主題管理(Theme Management): 此部分提供了工具和方法,讓開發者能夠管理應用程式的主題,例如顏色和字型選擇。
  • 響應式設計(Responsive Design): 提供了使應用程式能夠響應不同螢幕尺寸的工具和方法。
  • 內間距(Padding): 允許開發者為小部件添加內間距,以創建更加人性化的用戶界面。
  • 媒體查詢(Media Queries): 此部分允許開發者根據給定的數據解析子樹中的媒體查詢,以創建更加適應性的應用程式。

Section_14. Widget of the Week: Youtube Video

這個分類是一個YouTube播放清單,名為「Flutter Widget of the Week」。這個清單包含了多個短片,每個短片都會介紹一個Flutter的小部件。這些影片提供了關於各種Flutter小部件的實用資訊和使用方法,幫助開發者更加深入地理解如何使用這些小部件來構建應用程式。


Part_4: Beyond UI

Section_1. Data & backend

Paragraph_1: 狀態管理(State Management)

(1) Think declaratively

這部分為開發者介紹在Flutter應用中處理狀態的基礎知識,強調狀態管理的重要性和如何在不同屏幕間共享應用狀態。開發者會學習基礎的狀態管理問題和不同的狀態管理方法。Flutter使用聲明式UI,意味著UI會根據當前狀態來構建,並在狀態變化時重繪。聲明式UI有其學習曲線,但它允許開發者對任何UI狀態有一致且單一的代碼描述。

(2) Ephemeral vs app state

這部分講解了Flutter應用中應用狀態和瞬態的區別及其管理。應用狀態是需要在多個部分共享和在用戶會話間保持的,如用戶偏好和登錄信息;而瞬態主要存在於單個小部件中,如PageView的當前頁面。選擇合適的狀態管理方法取決於應用的特性和開發者的經驗,並且應該根據需求靈活選擇和調整。

(3) Simple app state management

  • 簡單應用狀態管理(Simple App State Management)
    這個部分使用 provider 套件來介紹簡單的應用狀態管理。這個套件易於理解並且不需要太多的代碼。
  • 概念
    • ChangeNotifier: 這是一個簡單的類,包含在Flutter SDK中,它向其監聽器提供變更通知。如果某物是 ChangeNotifier,可以訂閱其變更。
    • ChangeNotifierProvider: 這是一種封裝應用狀態的方式。對於非常簡單的應用,可以使用單個 ChangeNotifier。在複雜的應用中,將有多個模型,因此會有多個 ChangeNotifiers。
  • 範例:
    這部分以購物應用為例,說明了Flutter中狀態的管理和小部件的不變性。在這個應用中,有目錄和購物車兩個螢幕,每個 MyListItem 都能夠將自己添加到購物車中。在Flutter的宣告式框架中,狀態應該被放在使用它的小部件之上,因為改變UI需要重建小部件。而小部件本身是不變的,它們不會改變,而是會被替換。當用戶將項目添加到購物車時,由於購物車位於 MyListItem 之上,需要特定的方法來實現狀態的訪問。
  • 回調和提供者(Callbacks and Providers)
    Flutter有機制讓小部件能夠向其後代提供數據和服務。 舉例: provider 套件就是一個這樣的機制,它與基礎小部件一起工作但使用起來很簡單。
    Question: 何謂基礎小部件? Ans:基礎小部件(Low-level widgets)在Flutter中是指提供構建複雜小部件基礎的基本或原始小部件。這些小部件簡單、基礎,能夠組合成更高級的小部件。例如,provider套件中的Provider,它簡單但能與其他小部件一起實現複雜功能,主要用於數據和服務的提供。

(4) Options

這個部分提供了多種狀態管理的選項和方法,並包含了相關的學習資源和文檔。以下是一些主要的狀態管理選項和相關資源:

  • Provider
    Provider 是一種非常流行的狀態管理方法,它使用 ChangeNotifier 來管理應用狀態。
  • Riverpod
    介紹: Riverpod 與 Provider 類似,但提供了更多的編譯時安全性,並且不依賴於 Flutter SDK。
    Question: 為何有些需依賴於 Flutter SDK,依賴或不依賴的差別為何?
    Ans: 是否依賴於 Flutter SDK 取決於套件或小部件的用途和需求。特定於 Flutter 的功能會依賴於 Flutter SDK,而更通用、更靈活的功能可能不會依賴於 Flutter SDK。
    • 依賴於 Flutter SDK:
      • 特定於 Flutter: 這些套件或小部件是專為 Flutter 應用開發而設計的,並且會使用 Flutter 提供的各種功能和接口。
      • 功能集成: 由於它們直接依賴於 Flutter SDK,因此可以更好地集成 Flutter 提供的各種功能和服務。
      • 緊密結合: 這些套件或小部件可能會緊密地與 Flutter 的內部機制和生態系統結合。
    • 不依賴於 Flutter SDK:
      • 通用性: 這些套件可能是通用的 Dart 套件,可以在任何 Dart 環境中使用,不僅僅局限於 Flutter 應用。
      • 靈活性: 不依賴於 Flutter SDK 可能會提供更大的靈活性,因為它們不會受到 Flutter 特定實現的限制。
      • 跨平台: 這些通用套件可能更容易適應不同的平台和環境,包括 Flutter、AngularDart 等。
  • setState
    這是 Flutter 中最基礎的狀態管理方法,適合於小型應用或簡單的 UI 交互。
  • 其他:
    這個部分還包含了其他一些狀態管理解決方案,如: Redux、BLoC / Rx、MobX、GetX、Fish-Redux、GetIt、Binder、states_rebuilder、Triple Pattern 等。提供了各種狀態管理方法的相關教程、文章和影片,可以幫助開發者更好地理解和選擇合適的狀態管理方案。

Paragraph_2: Networking & http

  • Overview
    介紹了Flutter中的http套件,該套件提供了發出http請求的最簡單方式,並支持Android、iOS、macOS、Windows、Linux和web。特定平台可能需要額外的設定步驟,例如Android應用必須在AndroidManifest.xml中聲明其使用網路,macOS應用必須在相關的.entitlements文件中允許網絡訪問。
  • Fetch data from the internet
    提供如何從網路獲取數據的具體實例和步驟。
  • Make authenticated requests
    介紹如何發送帶有身份驗證的請求,這對於訪問需要用戶登錄的API端點非常重要。
  • Send data to the internet
    這個部分會講解如何向網路發送數據,這對於創建新的資源或更新現有資源非常有用。
  • Update data over the internet
    介紹如何通過網路更新數據,通常涉及到發送PUT請求到特定的API端點。
  • Delete data on the internet
    這個部分會教如何從網路刪除數據,這通常涉及到向特定的API端點發送DELETE請求。
  • Communicate with WebSockets
    這裡會介紹如何使用WebSockets與服務器進行通信,這對於需要實時數據交換的應用非常有用。
    Question: 實時數據交換定義為何,請舉例說明
    Ans: 實時數據交換是指在網絡應用中,客戶端與服務器之間能夠即時、雙向地傳輸和接收數據的過程。這種交換方式允許服務器在數據發生變化時,能夠立即將這些變化推送到客戶端,而不需要客戶端發起請求。這對於需要即時反應和更新的應用來說,是非常重要和有用的。
    舉例說明: 在這些例子中,WebSockets是一種常用的實現實時數據交換的技術,它允許建立一個持久的、全雙工(Full-Duplex)的通信通道,使得客戶端和服務器能夠互相發送消息。其中,全雙工(Full-Duplex)指的是通信系統中,數據可以在兩個方向上同時、不間斷地傳輸,即發送和接收可以同時進行,而不會互相干擾。
    • 聊天應用
      在即時聊天應用中,如WhatsApp或WeChat,用戶發送的消息需要立即被其他用戶接收,這就需要實時數據交換。當一位用戶發送消息時,服務器會立即將這條消息推送到其他相關用戶的客戶端。
    • 股票交易應用
      在股票交易應用中,股票價格的即時變化需要實時地展示給用戶,以便用戶可以做出快速決策。當股票價格發生變化時,服務器會將最新的價格數據即時推送到客戶端。
    • 遊戲應用
      在多人在線遊戲中,玩家之間的動作和遊戲狀態需要實時同步,以確保所有玩家都能看到一致的遊戲進程和結果。

Paragraph_3: Serialization序列化

(1) JSON and serialization

  • 本指南探討了在Flutter中使用JSON的各種方法,涵蓋了在不同情境下應使用哪種JSON解決方案,以及為什麼。
  • 文章涵蓋了兩種一般策略來處理JSON:
    • 手動序列化(Manual serialization)
      手動序列化使用dart:convert的JSON解碼器,適合小型項目,但隨著項目增大,管理變得困難。
    • 使用代碼生成進行自動序列化(Automated serialization using code generation)
      自動序列化則通過代碼生成庫,如json_serializable和built_value,適合大型項目,能在編譯時捕獲錯誤,並避免手寫模板。Flutter還提供基本JSON序列化,通過簡單模型類實現類型安全性和編譯時異常。

這個網頁提供了豐富的信息,幫助開發者理解如何在Flutter中有效地使用JSON和序列化,並根據項目的大小和複雜性選擇最合適的序列化策略。

(2) Parse JSON in the background

這個網頁教授開發者如何在Flutter中後台解析大型JSON文檔以優化用戶體驗。由於Dart默認在單一線程運行,故需利用Isolate將耗時計算移到後台,避免主線程卡頓。實作中,需加入http套件進行網絡請求,並利用compute()函數將解析和轉換的工作移至後台Isolate。開發者需創建對應的數據類和解析函數,並注意Isolate的通信需透過傳遞消息,較複雜的對象可能會遇到錯誤,可考慮使用worker_manager和workmanager套件作為替代方案。


Paragraph_4: Persistence

  • Store key-value data on disk
    這個網頁教如何使用shared_preferences插件來存儲簡單的鍵值對數據,例如整數、布爾值和字符串等,並且這些數據會在應用程序重新啟動後持久存在。
  • Read and write files
    這個網頁展示了如何結合path_provider插件和dart:io庫來讀取和寫入文件,這對於需要在應用程序啟動間保持數據的情況有幫助。
  • Persist data with SQLite
    這個網頁指導如何使用sqflite插件來在Flutter應用中實現SQLite數據庫的存儲,這允許存儲和檢索用戶數據,即使在應用程序關閉和重新啟動後也能保持數據。

Paragraph_5: Firebase

  • Firebase是一個Backend-as-a-Service (BaaS,後端即服務) 應用開發平台,提供如實時數據庫、雲存儲、認證、崩潰報告、機器學習、遠程配置和靜態文件的託管等後端服務。
  • Firebase支持Flutter,並有相關的插件(Firebase plugins)。
  • 提供了與Firebase和Flutter一起入門的資源,包括影片工作坊和codelab。
  • 社群創建了一些有用的文檔和影片,例如建立聊天應用、使用Firestore作為Flutter應用的後端等。
  • 也可以使用Firebase來託管Flutter應用於網頁上。

Paragraph_6: Google APIs
這個網頁提供了如何使用Google APIs的資訊,且還提供一個實作這些概念的範例。以下是該網頁的簡單摘要:

  • Google APIs套件(Google APIs package)
    這個套件公開了數十個可以在Dart項目中使用的Google服務。
  • 使用者數據API(User-data APIs)
    例如Calendar、Gmail和YouTube,這些API允許與終端用戶數據互動。
  • API使用步驟: 選擇所需的API → 啟用API → 用所需的範圍對用戶進行身份驗證 → 獲取經過身份驗證的HTTP客戶端 → 創建並使用所需的API類別。
  • 身份驗證(Authentication)
    使用google_sign_in套件來對用戶進行Google身份驗證。
  • HTTP客戶端(HTTP Client)
    經過身份驗證的HTTP客戶端會在調用Google API類別時包含必要的憑證。
  • API類別的創建與使用
    創建所需的API類型並調用方法。

Part3: 提問

請搜尋此網頁: Question,即可查詢筆者在閱讀Flutter官方文件遇到的疑問和對應參考說明。


真正的失敗者不是那些沒有贏的人,而是那些害怕失敗而不敢嘗試的人
Real loser isn’t someone who doesn’t win. A rea; loser is someone so afraid of not wining, they don’t even try.
中秋連假來到尾聲,鐵人賽也即將完賽哩!


上一篇
D27-解碼Flutter官方文件,一起來了解Layout、Material、Painting、Scrolling widgets
下一篇
D29-解碼Flutter官方文件,一起來了解Beyond UI的設計: 所有Section摘要
系列文
攜手神隊友ChatGPT:攝護腺自我照護App開發歷程!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言