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:
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -170,7 +171,9 @@ class _IntroscreenState extends State<Introscreen> {
|
||||
color: active
|
||||
? ColorConstants.primary
|
||||
: ColorConstants.borderStrong,
|
||||
borderRadius: BorderRadius.circular(DesignConstants.radiusFull),
|
||||
borderRadius: BorderRadius.circular(
|
||||
DesignConstants.radiusFull,
|
||||
),
|
||||
),
|
||||
);
|
||||
}),
|
||||
@@ -233,7 +236,7 @@ class _SlideView extends StatelessWidget {
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 25.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: -0.6,
|
||||
height: 1.2,
|
||||
color: ColorConstants.slateText,
|
||||
@@ -306,7 +309,7 @@ const Color _hubTeal = Color(0xFF0E7C7B);
|
||||
|
||||
TextStyle _artTitle(double size) => TextStyle(
|
||||
fontSize: size.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: -0.3,
|
||||
color: ColorConstants.slateText,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
@@ -314,7 +317,7 @@ TextStyle _artTitle(double size) => TextStyle(
|
||||
|
||||
TextStyle _artMeta(double size) => TextStyle(
|
||||
fontSize: size.sp,
|
||||
fontWeight: FontWeight.w700,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: ColorConstants.secondaryText,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
);
|
||||
@@ -343,13 +346,15 @@ class _SlotArt extends StatelessWidget {
|
||||
padding: EdgeInsets.symmetric(horizontal: 9.w, vertical: 5.h),
|
||||
decoration: BoxDecoration(
|
||||
color: ColorConstants.neutralLight,
|
||||
borderRadius: BorderRadius.circular(DesignConstants.radiusFull),
|
||||
borderRadius: BorderRadius.circular(
|
||||
DesignConstants.radiusFull,
|
||||
),
|
||||
border: Border.all(color: ColorConstants.borderStrong),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.inventory_2_rounded,
|
||||
LucideIcons.package,
|
||||
size: 11.sp,
|
||||
color: ColorConstants.slateText,
|
||||
),
|
||||
@@ -384,13 +389,13 @@ class _SlotArt extends StatelessWidget {
|
||||
SizedBox(height: 14.h),
|
||||
Row(
|
||||
children: [
|
||||
Icon(Icons.warehouse_rounded, size: 13.sp, color: _hubTeal),
|
||||
Icon(LucideIcons.warehouse, size: 13.sp, color: _hubTeal),
|
||||
SizedBox(width: 6.w),
|
||||
Text(
|
||||
'HUB',
|
||||
style: TextStyle(
|
||||
fontSize: 10.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: 0.6,
|
||||
color: _hubTeal,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
@@ -417,7 +422,7 @@ class _SlotArt extends StatelessWidget {
|
||||
height: 2,
|
||||
color: ColorConstants.borderStrong,
|
||||
),
|
||||
Icon(Icons.warehouse_rounded, size: 13.sp, color: _hubTeal),
|
||||
Icon(LucideIcons.warehouse, size: 13.sp, color: _hubTeal),
|
||||
],
|
||||
),
|
||||
],
|
||||
@@ -432,7 +437,7 @@ class _SlotArt extends StatelessWidget {
|
||||
value,
|
||||
style: TextStyle(
|
||||
fontSize: 12.5.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: -0.3,
|
||||
color: accent,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
@@ -460,7 +465,7 @@ class _StopsArt extends StatelessWidget {
|
||||
'Sri Balaji Stores',
|
||||
'Done',
|
||||
ColorConstants.acceptGreen,
|
||||
Icons.check_rounded,
|
||||
LucideIcons.check,
|
||||
),
|
||||
SizedBox(height: 9.h),
|
||||
_row(
|
||||
@@ -468,7 +473,7 @@ class _StopsArt extends StatelessWidget {
|
||||
'Anand Traders',
|
||||
'Skipped',
|
||||
ColorConstants.warning,
|
||||
Icons.redo_rounded,
|
||||
LucideIcons.redo2,
|
||||
),
|
||||
SizedBox(height: 9.h),
|
||||
_row(3, 'Kumar Textiles', 'Next', ColorConstants.primary, null),
|
||||
@@ -504,7 +509,7 @@ class _StopsArt extends StatelessWidget {
|
||||
'$n',
|
||||
style: TextStyle(
|
||||
fontSize: 10.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: pending
|
||||
? ColorConstants.secondaryText
|
||||
: Colors.white,
|
||||
@@ -520,7 +525,7 @@ class _StopsArt extends StatelessWidget {
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 13.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: -0.2,
|
||||
color: pending
|
||||
? ColorConstants.secondaryText
|
||||
@@ -534,7 +539,7 @@ class _StopsArt extends StatelessWidget {
|
||||
status,
|
||||
style: TextStyle(
|
||||
fontSize: 10.5.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: accent,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
),
|
||||
@@ -556,30 +561,18 @@ class _HubArt extends StatelessWidget {
|
||||
'COLLECT AT THIS STOP',
|
||||
style: TextStyle(
|
||||
fontSize: 9.5.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: 0.9,
|
||||
color: ColorConstants.secondaryText,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 11.h),
|
||||
_line(
|
||||
Icons.inventory_2_rounded,
|
||||
'3 parcels',
|
||||
ColorConstants.pickupAccent,
|
||||
),
|
||||
_line(LucideIcons.package, '3 parcels', ColorConstants.pickupAccent),
|
||||
SizedBox(height: 9.h),
|
||||
_line(
|
||||
Icons.payments_rounded,
|
||||
'₹340 cash',
|
||||
ColorConstants.acceptGreen,
|
||||
),
|
||||
_line(LucideIcons.banknote, '₹340 cash', ColorConstants.acceptGreen),
|
||||
SizedBox(height: 9.h),
|
||||
_line(
|
||||
Icons.photo_camera_rounded,
|
||||
'Photo proof',
|
||||
ColorConstants.slateText,
|
||||
),
|
||||
_line(LucideIcons.camera, 'Photo proof', ColorConstants.slateText),
|
||||
SizedBox(height: 14.h),
|
||||
Container(height: 1, color: ColorConstants.borderSubtle),
|
||||
SizedBox(height: 13.h),
|
||||
@@ -595,7 +588,7 @@ class _HubArt extends StatelessWidget {
|
||||
border: Border.all(color: _hubTeal, width: 1.5),
|
||||
),
|
||||
child: Icon(
|
||||
Icons.warehouse_rounded,
|
||||
LucideIcons.warehouse,
|
||||
size: 12.sp,
|
||||
color: _hubTeal,
|
||||
),
|
||||
@@ -609,7 +602,7 @@ class _HubArt extends StatelessWidget {
|
||||
'RETURN · HUB',
|
||||
style: TextStyle(
|
||||
fontSize: 10.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: 0.7,
|
||||
color: _hubTeal,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
@@ -635,7 +628,7 @@ class _HubArt extends StatelessWidget {
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: 13.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: -0.2,
|
||||
color: ColorConstants.slateText,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
|
||||
Reference in New Issue
Block a user