Pages fall away downward, the pickup comes back, and a real icon set
── Navigation ── Pages arrived from the right and left to the right. Right is the direction the system back gesture drags, so a page leaving under a button press read as a swipe nobody made — and every push in this app is a layer over the one before it, which arrives from below. The axis is vertical now: the incoming page rises and covers, the page underneath stays put and dims, and back drops the top page off the bottom. Full travel rather than the old 14% nudge, which is what makes the direction nameable. test/page_transition_test.dart holds it. ── Home ── The pickup pill is back under the greeting. It was cut on the argument that the form below already carried the pickup; the form is four hundred points down the screen, and a location you can only see by scrolling to a form is a location you do not trust. It shows the locality while the form keeps the door, so the screen answers one question once, and it now has a resolving state — it used to print the last place you were, confidently, while the fix was still in flight. The sphere's caption was falling off the screen. Adding the pill pushed it out of the scroll viewport, silently, with no overflow warning — the fourth time Home growing has clipped something under the sphere. DmBookOrb.field is no longer a constant: the glow gives way to whatever is left, the sphere never does. ── 74 points of dead canvas, on every root ── Home, Orders and Account each cleared the floating tab bar by `MediaQuery.paddingOf(context).bottom + 74`, on the reasoning that the inset is the home indicator and 74 is the bar above it. Scaffold with extendBody replaces the body's bottom padding with the bar's whole laid-out height — measured, a 34pt inset and this bar hand the body 106. They were clearing the bar, then clearing it again. One helper now, dmTabBarClear(). ── One journey, one vocabulary ── Review said ORIGIN/DESTINATION; Home's form and tracking say PICKUP/DROP. Three screens a customer walks in order. The tracking card had already written down the argument; the booking screen hadn't followed. The rail's first milestone read "Booking created" directly above "Order created" — down the rail: created, created, in transit. It is "Pickup booked", which is what JourneyStage.milestoneLabel has called that stage all along on Orders and on Home's live row. ── The launcher icon ── tool/icons.py renders all twenty-eight files from one master, because the failure mode of exporting by hand is nineteen replaced and nine left on the old mark, at the density nobody checks. The master is a bare mark on a field, so it cannot be dropped into Android's adaptive canvas whole: crimson is the background, the white mark is the foreground, and it is sized by its reach from the canvas centre so a round mask cannot take the arrow tip. Measured on the built file: 63.7dp against a 66dp safe zone. A real monochrome layer replaces the colour foreground that was standing in for one — the system tints by alpha, so that themed as a blob. ic_launcher_round.png exists at last; minSdk is 24 and android:roundIcon had nothing to resolve to below API 26. The artwork is flattened (the source vignettes over ten values of red) and its horizontal offset is placed deliberately rather than inherited — geometric centring made the mark lean, because the arrow carries the bounding box right while contributing almost none of the ink. ── Bundle ── pubspec declared assets/images/ as a folder, which shipped the 974 KB icon master to every customer for a file no code opens. Named explicitly now.
This commit is contained in:
@@ -151,7 +151,7 @@ Future<void> pickCity(
|
||||
Future<void> openPickupEditor(WidgetTester tester) async {
|
||||
await openSend(tester);
|
||||
await pickCity(tester, 'Chennai');
|
||||
await tester.tap(find.text('ORIGIN'));
|
||||
await tester.tap(find.text('PICKUP'));
|
||||
await settle(tester);
|
||||
}
|
||||
|
||||
@@ -250,7 +250,7 @@ void main() {
|
||||
await tester.tap(find.text('Confirm pickup point'));
|
||||
await settle(tester);
|
||||
// Back on the send screen: its title is the route, not a heading.
|
||||
expect(find.text('DESTINATION'), findsOneWidget);
|
||||
expect(find.text('DROP'), findsOneWidget);
|
||||
expect(find.text(corrected), findsOneWidget);
|
||||
await drainToasts(tester);
|
||||
});
|
||||
@@ -396,7 +396,7 @@ void main() {
|
||||
// …and that one point is what the booking carries forward.
|
||||
await tester.tap(find.text('Confirm pickup point'));
|
||||
await settle(tester);
|
||||
expect(find.text('DESTINATION'), findsOneWidget);
|
||||
expect(find.text('DROP'), findsOneWidget);
|
||||
expect(state.draftPickup!.lat, searched.lat);
|
||||
expect(state.draftPickup!.lng, searched.lng);
|
||||
expect(state.draftPickup!.title, 'Brookefields Mall');
|
||||
@@ -517,8 +517,8 @@ void main() {
|
||||
|
||||
// Everything else the booking needs is on one screen, and the route to
|
||||
// the top of it is two rows with no labels but FROM and TO.
|
||||
expect(find.text('ORIGIN'), findsOneWidget);
|
||||
expect(find.text('DESTINATION'), findsOneWidget);
|
||||
expect(find.text('PICKUP'), findsOneWidget);
|
||||
expect(find.text('DROP'), findsOneWidget);
|
||||
// Nothing is asked for here at all any more: no address fields, and no
|
||||
// disclosure hiding three more. The route, the packages and the button.
|
||||
expect(find.byType(TextField), findsNothing);
|
||||
@@ -565,7 +565,7 @@ void main() {
|
||||
expect(state.draftContactPhone, isNull);
|
||||
|
||||
// Changed, it is the number the Miler will ring at the door.
|
||||
await tester.tap(find.text('ORIGIN'));
|
||||
await tester.tap(find.text('PICKUP'));
|
||||
await settle(tester);
|
||||
await tester.tap(find.text('Someone else is handing it over?'));
|
||||
await settle(tester);
|
||||
@@ -723,7 +723,7 @@ void main() {
|
||||
// Five shipment milestones. Everything before the order exists is one
|
||||
// row — the whole pickup visit, which the live card above narrates by
|
||||
// name, with a distance and an ETA.
|
||||
expect(find.text('Booking created'), findsOneWidget);
|
||||
expect(find.text('Pickup booked'), findsOneWidget);
|
||||
expect(find.text('Order created'), findsOneWidget);
|
||||
expect(find.text('In transit'), findsOneWidget);
|
||||
expect(find.text('Out for delivery'), findsOneWidget);
|
||||
@@ -737,7 +737,7 @@ void main() {
|
||||
// Advancing through the visit does not add a row — it moves the detail
|
||||
// under the one row the whole visit occupies.
|
||||
await serverAdvance(tester, state, 'DM-482913', JourneyStage.onTheWay);
|
||||
expect(find.text('Booking created'), findsOneWidget);
|
||||
expect(find.text('Pickup booked'), findsOneWidget);
|
||||
expect(find.textContaining('Miler on the way'), findsWidgets);
|
||||
await drainToasts(tester);
|
||||
});
|
||||
@@ -868,7 +868,7 @@ void main() {
|
||||
// The pickup map: a fixed-height sheet over a full-bleed map, so large
|
||||
// text has nowhere to grow into. Opening the contact fold is the tallest
|
||||
// it ever gets.
|
||||
await tester.tap(find.text('ORIGIN'));
|
||||
await tester.tap(find.text('PICKUP'));
|
||||
await settle(tester);
|
||||
await tester.tap(find.text('Someone else is handing it over?'));
|
||||
await settle(tester);
|
||||
@@ -880,7 +880,7 @@ void main() {
|
||||
await tester.tap(find.text('Track pickup'));
|
||||
await settle(tester); // tracking
|
||||
// The live card names the stage; the rail names the shipment milestone.
|
||||
expect(find.text('Booking created'), findsWidgets);
|
||||
expect(find.text('Pickup booked'), findsWidgets);
|
||||
|
||||
await drainToasts(tester);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user