Miler rider app: surface system, visible design language, backend lifecycle
Design system - MilerSurface ladder (canvas → working → raised → floating) with MilerPanel as layer 1; canvas moved to #DEE3EA so white separates at 1.290:1. - Visible vocabulary applied across Home, Deliveries, Activity, Account and the sheets: hero heads (tabular numeral + small caption, clamped at 1.3x), canvas wells for anything that opens, small filled tags for shelf labels, demoted placeholders. Recorded in DESIGN_SYSTEM.md §6. - One icon family: 222 Material glyphs migrated to Lucide; none left outside lib/xpress. - Colour semantics corrected: amber only for what is genuinely owed, brand red reserved for the live stop, disabled primaries go neutral rather than pale. Data and lifecycle - lib/data/lifecycle.dart reads mutations for what they prove; route_order.dart makes admin sequence the single ordering authority; service_day.dart, and stop_area.dart rewritten against live Coimbatore addresses (digit-token stripping, city stoplist, street suffixes, stammer collapse). - countLabel states the load once, in bags. Testing - 1440 tests passing; golden shot harnesses for Home, Deliveries, Activity, sheets and verify, with test/failures/ now gitignored (diff debris). - New pins: home_gutter_test, stop_area_test, plus updated structural bounds. Note: this commit also carries pre-existing working-tree deletions that were present before this work (API_SPEC.md, README.md, demo test fixtures). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,8 +5,36 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
|
||||
|
||||
import 'package:miler/data/service_profile.dart';
|
||||
import 'package:miler/views/Dashboard/pickups/stop_verify.dart';
|
||||
|
||||
/// ── The line this page's own review still belongs to ──
|
||||
///
|
||||
/// [StopVerificationPage] ends with a review only where nothing downstream
|
||||
/// subsumes it. On **logistics** something does: the shipment desk opens
|
||||
/// straight after, and its Review & Pay screen covers the parcel, the
|
||||
/// addresses, the fare and the payment on one page — so a review here would be
|
||||
/// the same facts twice, two screens apart.
|
||||
///
|
||||
/// The review is therefore kept for a line that verifies without pricing, and
|
||||
/// this is that line. Built here rather than shipped as a profile because no
|
||||
/// signed client needs it yet; the day one does, this is the shape it takes.
|
||||
/// See `ServiceProfile.capturesShipmentAddresses`.
|
||||
const ServiceProfile _verifyOnlyLine = ServiceProfile(
|
||||
line: ServiceLine.parcel,
|
||||
label: 'Doormile',
|
||||
jobNoun: 'booking',
|
||||
jobNounPlural: 'bookings',
|
||||
completionVerb: 'Picked up',
|
||||
collectsCash: true,
|
||||
needsVerification: true,
|
||||
needsProofPhoto: true,
|
||||
acceptsPerStop: true,
|
||||
sourceIsKitchen: false,
|
||||
handoffAt: HandoffPoint.accepted,
|
||||
capturesShipmentAddresses: false,
|
||||
);
|
||||
|
||||
/// The review step used to be untestable — "it sits behind a camera gate no
|
||||
/// widget test can pass" — so the only thing held about it was the pure packing
|
||||
/// rule in [packReviewFacts]. That left the screen itself unwatched, and it
|
||||
@@ -31,6 +59,9 @@ class _FakeCamera extends ImagePickerPlatform {
|
||||
}
|
||||
|
||||
void main() {
|
||||
setUp(() => ServiceProfile.setActive(_verifyOnlyLine));
|
||||
tearDown(() => ServiceProfile.setActive(ServiceProfile.parcel));
|
||||
|
||||
setUpAll(() async {
|
||||
final dir = await Directory.systemTemp.createTemp('miler_review');
|
||||
final png = File('${dir.path}/proof.png')
|
||||
|
||||
Reference in New Issue
Block a user