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,7 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
import 'package:miler/views/helpers/constants/Colorconstants.dart';
|
||||
import 'package:miler/views/helpers/widgets/app_widgets.dart';
|
||||
import 'package:miler/views/helpers/constants/Font_constant.dart';
|
||||
import 'package:miler/widget/Bottom_page.dart';
|
||||
import 'package:miler/Models/stop_status.dart';
|
||||
@@ -29,6 +31,15 @@ import 'package:miler/views/helpers/constants/design_constants.dart';
|
||||
/// So the banner lifts itself clear by [BottomPage.bottomInset]. Both call sites
|
||||
/// just pin it to `bottom: 0` and let it place itself.
|
||||
class ActivePickupBanner extends StatefulWidget {
|
||||
/// The tallest this banner gets, excluding the device inset.
|
||||
///
|
||||
/// Declared here because the surface that overlays a list is the only thing
|
||||
/// that knows how much of the list it covers. The Deliveries queue reserved
|
||||
/// a flat `80.h` for it — a number measured once, by eye, that every later
|
||||
/// change to this widget made wrong silently by hiding the last row of the
|
||||
/// run behind it.
|
||||
static double get maxHeight => ButtonSizes.primary + 46.h;
|
||||
|
||||
final List<Map<String, dynamic>> activePickups;
|
||||
final void Function(Map<String, dynamic>) onTap;
|
||||
|
||||
@@ -166,11 +177,7 @@ class _Card extends StatelessWidget {
|
||||
color: ColorConstants.pureSurface.withValues(alpha: 0.16),
|
||||
borderRadius: BorderRadius.circular(DesignConstants.radiusXl),
|
||||
),
|
||||
child: Icon(
|
||||
Icons.two_wheeler_rounded,
|
||||
color: Colors.white,
|
||||
size: 22.sp,
|
||||
),
|
||||
child: Icon(LucideIcons.bike, color: Colors.white, size: 22.sp),
|
||||
),
|
||||
SizedBox(width: 11.w),
|
||||
Expanded(
|
||||
@@ -196,7 +203,7 @@ class _Card extends StatelessWidget {
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 15.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: -0.3,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
),
|
||||
@@ -208,7 +215,7 @@ class _Card extends StatelessWidget {
|
||||
Row(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.place_rounded,
|
||||
LucideIcons.mapPin,
|
||||
color: Colors.white.withValues(alpha: 0.72),
|
||||
size: 13.sp,
|
||||
),
|
||||
@@ -244,7 +251,7 @@ class _Card extends StatelessWidget {
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.arrow_forward_rounded,
|
||||
LucideIcons.arrowRight,
|
||||
color: Colors.white,
|
||||
size: 16.sp,
|
||||
),
|
||||
@@ -312,11 +319,11 @@ class _LiveChip extends StatelessWidget {
|
||||
),
|
||||
SizedBox(width: 5.w),
|
||||
Text(
|
||||
'LIVE',
|
||||
'Active',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 9.sp,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontWeight: FontWeight.w700,
|
||||
letterSpacing: 0.7,
|
||||
fontFamily: FontConstants.fontFamily,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user