fix(app): 後端比 App 新時,進行中的訂單會從畫面上消失(第二十七輪) - #99
Merged
Conversation
本輪掃兩族。第一族(金額與數值格式)**沒有找到任何問題**,五項查證結果寫進 TODO——不寫的話下一輪會有人再查一次同樣的東西(第十九輪立的規矩)。 重點結論:畫面上「車資+清潔費=合計」不會加不起來,因為後端 roundNtd/floorNtd 把每筆都收斂到整數元;司機收入頁四個數也全部由後端算好帶回。 第二族修掉一個:RideStatus.isTerminal 是白名單,未知狀態碼不算終態,所以 controller 會繼續把它當進行中的訂單輪詢;但畫面的 switch 走 default 回到 **叫車表單**。三件事同時發生——那一按必定被後端「已有進行中訂單」擋掉、整張 進行中的訂單在畫面上完全消失、controller 還在背景輪詢它。 這是前瞻性修補(現行後端只有 0/1/2/3/4/9,未知碼只會來自後端比 App 新), 但行為本身是確定的、測試可重現,不是猜測。 修法:UnknownPhaseContent——據實說出狀態碼(客服問「畫面上寫什麼」時這是唯一 能對帳的線索)、保留「取消行程」這條唯一脫身出口、不提供叫車。卡片版首頁的 default 是 SizedBox.shrink()(更徹底的隱形),一併對齊——那支目前沒被 app.dart 使用,但哪天換回來這個洞會安靜地回來。 順手補完第二十六輪留的缺口:遺失物描述/預約備註/評分評論三個畫面的「真畫面 接上去了」測試。補的過程確認了一件事——預約表單是 push 出去的新 route,provider 要放在 MaterialApp 之上才看得到,而 production 的 CustomerApp 確實是這樣放的 (所以那是測試結構問題,不是 App 會崩)。 驗收:flutter analyze 無 issue、flutter test 440 passed(434+新 6)、56 個測試檔、 flutter build apk --debug --flavor customer 成功。 反向驗證:把 default 改回 OrderFormContent → 該案 FAIL;另有一案守「沒有把正常 流程一起改壞」(status=0 仍是 SearchingContent)。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
本輪掃了兩族。第一族沒有找到任何問題——這件事本身也寫進 TODO 了,免得下一輪重掃。
一、掃過但沒有發現問題的:金額與數值格式
formatCentsAsNtd的 0/負數/千分位NT$ 0、負數帶-、四捨五入對稱roundNtd/floorNtd把每筆收斂到整數元,三個數小數位一致、同方向進位totalCents是 App 自己加的ride.completedpayload 只有fare_amount_cents/cleaning_fee_cents,後端沒送總額(送總額的 estimate 那支,App 也確實吃後端的)min_fare_cents沒被收斂成整數元(validator 只檢查範圍),但不破壞上面任何一條等式,且目前無真金流——不值得為它改後端二、第二族修掉一個:未知的 ride status code
根因一句話
RideStatus.isTerminal是白名單,未知碼不算終態 → controller 繼續把它當進行中的訂單輪詢;但畫面的switch走default:回到叫車表單。三件事同時發生:
誠實說清楚這是什麼等級的東西
前瞻性修補,不是現在就會踩到的 bug:現行後端只有
0/1/2/3/4/9,未知碼只會來自「後端比 App 上架版本新」。但行為本身是確定的、測試可重現,不是「看起來可能有問題」的猜測。修法
新增
UnknownPhaseContent:據實說出狀態碼(「狀態 7・請更新 App 以看到完整資訊」——客服問「畫面上寫什麼」時這是唯一能對帳的線索)、保留「取消行程」這條唯一的脫身出口(能不能取消由後端判斷)、不提供叫車。卡片版首頁一併改:它的
default:是SizedBox.shrink()(更徹底的隱形)。那支目前沒被app.dart使用,但兩邊要一致——否則哪天換回來,這個洞會安靜地回來(pitfall-error-set-but-never-shown的「新功能加在沒被使用的那個首頁」是這個 repo 踩過的坑)。三、順手補完第二十六輪留的缺口
上一輪只補了常用地點與聊天室的「真畫面接上去了」測試,另外三個留著缺口。本輪補齊:遺失物描述 300/預約備註 200/評分評論 200,各自開真表單、貼 emoji、斷言擋在 rune 上並看計數器數字。
補的過程確認了一件事:預約表單是
Navigator.push出去的新 route,provider 要放在MaterialApp之上才看得到(否則ProviderNotFoundException)。查了 production 的CustomerApp——它確實是放在上面的,所以那是我測試結構沒比照 production,不是 App 會崩。這一步不能跳過:如果 production 也放錯,那就是一個真的會崩的畫面。驗收
flutter analyze無 issue、flutter test440 passed(434 +新 6)、56 個測試檔。default:改回OrderFormContent→ 該案 FAIL(Found 1 widget with type "OrderFormContent")。status=0仍然是SearchingContent。flutter build apk --debug --flavor customer -t lib/main_customer.dart成功。開工前的例行實查(第十次)
三個外部卡點依然都不在;開工時三個 repo 的 open PR 皆為 0。
🤖 Generated with Claude Code