昨天為App搭建了筆記區的UI骨架,今天將為這個骨架注入與實作整個App最核心、也最有趣的功能之一:語音轉文字筆記。
這個功能旨在解決靈感閃現時,打字記錄過於緩慢的痛點。使用者只需點擊麥克風,說出想法,App就會自動將語音轉換為文字並填入筆記區,這不僅提升了效率,也讓記錄靈感的操作變得更加直覺與流暢。
今天的任務涵蓋從引入套件、請求權限、實現功能,到最後的資料儲存與使用者提示,一個完整的功能開發流程 。
一、引入speech_to_text與請求麥克風權限
要在Flutter中實現語音轉文字,社群中已經有相當成熟的套件可供使用。選擇了speech_to_text,它封裝了 iOS (Speech) 和 Android (SpeechRecognizer) 的原生 API,讓我們可以輕鬆調用。
實作步驟:
Step1. 添加依賴:先在pubspec.yaml檔案中加入speech_to_text套件。
Step2. 平台權限設定:語音辨識需要使用到裝置的麥克風,這屬於敏感權限,必須由使用者明確授權。
在App首次嘗試啟動語音辨識時,作業系統會自動彈出對話框,向使用者請求授權。
二、實現錄音、轉換與填入筆記區
權限搞定後,接下來就是將昨天建立的麥克風按鈕與speech_to_text的功能綁定起來。
核心邏輯如下:
以上流程實現了從觸發到完成,將語音無縫轉換為文字筆記。
三、關聯insight_id並儲存至Firestore
語音轉換成文字後,還需要將它與對應的靈感卡片關聯起來,並永久儲存。根據Day 19的規劃,我們會將筆記資料存放在Firestore中。
儲存流程:
Step1. 資料模型:我們在NoteProvider中定義一個addNote方法。這個方法會接收兩個參數:筆記內容(String)和當前靈感的insight_id(String)。
Step2. 觸發儲存:當使用者點擊筆記區的「儲存」按鈕時,我們就從TextEditingController中獲取文字內容,並從當前卡片的資料模型中取得insight_id。
Step3. 寫入Firestore:呼叫addNote方法,該方法會在Firestore的notes集合中建立一個新文件。這個文件至少會包含三個欄位:note_content(筆記內容)、insight_id(關聯的靈感 ID)、以及 user_id(確保筆記只對當前使用者可見)。
透過insight_id的關聯,我們確保了每則筆記都能準確地附屬於它所屬的靈感之下 。
四、實作成功/失敗提示
為了提升使用者體驗,明確的即時反饋是不可或缺的,而使用者需要知道他們的操作是否成功。
我們將實作兩種主要的提示:
從請求權限到語音辨識,再到雲端儲存與UX反饋,完整地走完了一個核心功能的開發週期。現在使用者不僅可以滑動卡片,更可以用最自然的方式——語音——來記錄下fleeting的想法。
功能開發完成後,下一步是確保它的穩定性。明天將進入Day 23,開始為我們今天建立的NoteProvider和 FavoriteProvider等核心邏輯撰寫單元測試(Unit Test),為App的品質把關。
【哈囉你好:)感謝你的閱讀!其他我會常出沒的地方:Threads】