production
This commit is contained in:
@@ -185,18 +185,79 @@ Pinned by: `home_gutter_test` (hero and route share an edge),
|
||||
group), `activity_list_test` (a sheet is `working` or `canvas`, never the
|
||||
warm off-white).
|
||||
|
||||
## 6b. The third pass: the glass came out, and forms became bands
|
||||
|
||||
Two changes, made together because the second one is only possible once the
|
||||
first is done.
|
||||
|
||||
### The glass is gone
|
||||
|
||||
Nothing in `lib/` is translucent any more. What was removed, and why each one
|
||||
was not worth what it cost:
|
||||
|
||||
| Was | Now | Why |
|
||||
|---|---|---|
|
||||
| `milerGlassSurface()` — `BackdropFilter` at sigma 18 on every bar | **deleted** | a full-width blur re-samples everything behind it every frame, on the mid-range Android this ships to, over a map that repaints as it pans. It was already rationed to sigma 18, which is the tell that it was tolerated rather than enjoyed. |
|
||||
| `glassCard` `#EBFFFFFF` (92% white) | `#FFFFFF` | a translucent card takes its contrast from whatever happens to be behind it — the same address is crisp over the canvas and grey over a map. |
|
||||
| `glassSheet` `#E0FDFDFE` (88%) | `#FFFFFF` | every point of transparency was contrast taken off an address read one-handed at a doorstep in sun. |
|
||||
| `glassCardLive` `#0D960019` laid *over* the card | `#FAF2F3`, the same tint flattened | with an opaque surface the overlay would cover the content rather than warm it. A live card is a card with a different fill. |
|
||||
| `glassRim` `#8CFFFFFF` — a specular highlight | `#E5E7EB`, a hairline | the highlight only read as an edge because the surface under it was see-through. |
|
||||
| `glassRed` | **deleted** | its only caller was the blur. |
|
||||
|
||||
`ColorConstants.tint(accent, amount, {on})` replaces the
|
||||
`accent.withValues(alpha: …)` idiom wherever it was painting a *surface*.
|
||||
It resolves the composite once against a named ground and returns an ordinary
|
||||
opaque colour. Same appearance where the old code was already over white;
|
||||
predictable everywhere else. Borders and scrims keep their alpha — those are
|
||||
lines and dims, not surfaces.
|
||||
|
||||
### Forms are bands, not cards
|
||||
|
||||
`MilerBand` (`app_widgets.dart`). A card is right for a screen showing a *list
|
||||
of objects* — a stop, a job, a booking — because the margin is what says these
|
||||
are separate things. It is wrong for a screen that is one long thing: a form, a
|
||||
review, a receipt. There the page margin buys nothing and costs twice.
|
||||
|
||||
- **Width.** 32–40pt off a 390pt phone, spent on two strips of empty ground
|
||||
beside text that is mostly addresses. On the verification screen that is the
|
||||
difference between an address on two lines and one on three.
|
||||
- **A second boundary.** The gap between two cards already separates them; the
|
||||
outline says it again.
|
||||
|
||||
So a band runs edge to edge, the page's ground showing between one band and the
|
||||
next is the only separator, and the margin moves *inside* as padding — air
|
||||
around words rather than air around a box. `MilerBand.pad` (20) and
|
||||
`MilerBand.gap` (10) are the two numbers, declared once, so every band's left
|
||||
edge lines up down the whole flow.
|
||||
|
||||
A band cannot carry state in an outline it does not have, so state goes in the
|
||||
**fill**, and a finished band adds `rail` — a 3pt accent stripe down its
|
||||
leading edge. That is the one mark that survives a phone at arm's length in
|
||||
sun.
|
||||
|
||||
**Which screens took it.** The whole first-mile flow, which is where forms live:
|
||||
`stop_verify` (collect · hand over · confirm), `shipment_capture`,
|
||||
`shipment_review`, `collect_payment`, `delivery_proof_page`. Each is now a grey
|
||||
page (`daylightSurface`) carrying full-bleed white bands — the inverse of the
|
||||
white-page/tinted-panel arrangement §6 landed on, and taken for the width
|
||||
rather than for the tone.
|
||||
|
||||
Home, Bookings and Deliveries are **unchanged**. They are lists of objects and
|
||||
the card is still the right shape there.
|
||||
|
||||
## 7. Known gaps
|
||||
|
||||
This was a foundation pass. It is not a completed product-wide redesign.
|
||||
|
||||
- **`GlassCard` still carries three separation mechanisms** — fill, border and
|
||||
shadow. Its rim is documented as a fix for shadows crushing on a budget LCD,
|
||||
reported twice from a device, so it was left alone rather than changed on a
|
||||
guess. It should be revisited *on a device* now that the ground works.
|
||||
- ~~**`GlassCard` still carries three separation mechanisms.**~~ Closed by §6b:
|
||||
the fill is opaque, and the hairline stays — it is the documented fix for
|
||||
shadows crushing on a budget LCD, reported twice from a device, and nothing
|
||||
about going opaque changes that. Still worth a look **on a device**.
|
||||
- **No typography or spacing consolidation.** Arbitrary `.sp` values still exist
|
||||
across pages; `MilerType` was not rationalised into a smaller scale.
|
||||
- **Icon families are still mixed.** Lucide was adopted for Activity and the
|
||||
status vocabulary; Material rounded remains widespread elsewhere.
|
||||
- **Account/Profile was not audited or migrated.**
|
||||
- **No device or text-scale QA** of the new ground, and **no GPU profiling** of
|
||||
`milerGlassSheet`'s blur — so no blur change was made.
|
||||
- **No device or text-scale QA** of the new ground. The blur question is moot:
|
||||
§6b removed every `BackdropFilter` in `lib/`, so there is nothing left to
|
||||
profile.
|
||||
|
||||
Reference in New Issue
Block a user