── The splash, in three beats ── Crimson edge to edge with the truck running across it in white; the invert; then the mark. The red starts before Flutter does. Four surfaces painted white before any Dart runs — launch_background at both API levels, windowSplashScreenBackground on Android 12+ in light and dark, and the iOS launch storyboard — and leaving any one of them white makes the launch a white flash followed by a red one. That flash is the only part of a launch a customer consciously notices. The invert is one gesture rather than a fade. A white truck on a background turning white is an invisible truck, so the ground lightens as the truck darkens, off one controller, and the screen turns itself inside out with the truck still on it. Fading it would have left the screen empty for the moment before the mark. The truck's colour is no longer its own: it is painted through srcIn, so the file's palette is discarded and only alpha survives. A replacement Lottie now needs no preparation, and tool/lottie_brand.py is off this path. `splash.json` is a seamless 3.9s loop — frame 0 is frame 60, the truck never arrives or departs — so there is no completion to hand over on. _truckBeat is a decision about how long a launch may hold somebody, not a property of the file. The comment claiming six seconds was wrong on both counts. ── Three things the splash was getting wrong quietly ── It showed the wrong logo: doormile-icon.png, the previous mark, to a customer who had just tapped the new one. tool/icons.py now cuts doormile-mark.png from the same master alpha as the launcher icon, so they cannot drift again. The fallback loader was invisible on red. _RoadLoader painted in DmColors.brand on what used to be a white screen; on crimson that is crimson on crimson, and it drew nothing at all on exactly the devices that had fallen back to it. The mark appeared and left in the same frame — _minimum was the sum of the beats exactly, so the clock ran out as the entrance finished. Hence _markHold. ── The truck was not in the middle ── Not a layout bug: both beats sit in a Center and always did. The artwork is drawn low and to the right inside its own 500x500 composition, so a centred widget rendered an off-centre picture — 30pt right, 36pt down. splash_centring_test.dart renders a frame at phone size and density, finds the ink and fails if either beat drifts. It is the only form of test that could have caught this, and the one that will catch it again when the Lottie is replaced, which is when the correction goes stale. Two things it taught: one enormous pump does not let the splash's async start-up chain advance, and capturing at pixelRatio 1 rasterizes the speed lines too faintly to detect, which truncates the bounding box and moves the measured centre by 12pt. ── The destination sheet stops resizing ── Tapping ONE TOUCH opened a tall sheet that snapped shorter a few frames later. DmAsyncList renders four skeleton rows while it loads — 302pt — and the states that replace them are nearer 200; the sheet was Flexible, so it was as tall as whichever state its content happened to be in, and the modal is still animating up while that swap happens. The list now lives in a box of one height. That also removes a second resize: the sheet grew from 48% of the screen to 74% when a state was picked. Both steps now measure 64% and it never changes size again. And DmAsyncList takes initialItems, fed by AppState.cachedCities: FutureBuilder reports `waiting` on its first build even for an already-complete future, so a warm cache still flashed a skeleton over data it already had. Three skeleton rows here rather than four — sheet_stability_test caught that 302pt overflows the smallest box the clamp can produce.
150 lines
6.3 KiB
YAML
150 lines
6.3 KiB
YAML
name: doormile_cx
|
|
description: "Doormile — book a pickup from your door, track it to delivery."
|
|
# The following line prevents the package from being accidentally published to
|
|
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
|
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|
|
|
# The following defines the version and build number for your application.
|
|
# A version number is three numbers separated by dots, like 1.2.43
|
|
# followed by an optional build number separated by a +.
|
|
# Both the version and the builder number may be overridden in flutter
|
|
# build by specifying --build-name and --build-number, respectively.
|
|
# In Android, build-name is used as versionName while build-number used as versionCode.
|
|
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
|
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
|
|
# Read more about iOS versioning at
|
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
|
# In Windows, build-name is used as the major, minor, and patch parts
|
|
# of the product and file versions while build-number is used as the build suffix.
|
|
version: 1.0.0+1
|
|
|
|
environment:
|
|
sdk: ^3.13.2
|
|
|
|
# Dependencies specify other packages that your package needs in order to work.
|
|
# To automatically upgrade your package dependencies to the latest versions
|
|
# consider running `flutter pub upgrade --major-versions`. Alternatively,
|
|
# dependencies can be manually updated by changing the version numbers below to
|
|
# the latest version available on pub.dev. To see which dependencies have newer
|
|
# versions available, run `flutter pub outdated`.
|
|
dependencies:
|
|
flutter:
|
|
sdk: flutter
|
|
|
|
# The following adds the Cupertino Icons font to your application.
|
|
# Use with the CupertinoIcons class for iOS style icons.
|
|
cupertino_icons: ^1.0.8
|
|
|
|
# Lucide — the icon set the whole UI draws from.
|
|
#
|
|
# Material's stock glyphs are heavy, inconsistently weighted and instantly
|
|
# recognisable as "default Flutter". Lucide is a single 1.5px-stroke family,
|
|
# so an icon sits at the same visual weight as the type beside it instead of
|
|
# shouting over it. Same set the Miler rider app uses, so the two apps in
|
|
# this repo read as one product.
|
|
lucide_icons_flutter: ^3.1.17
|
|
flutter_map: ^8.3.2
|
|
latlong2: ^0.10.1
|
|
# Pinned below 14.0.3: that patch pulls geolocator_linux 0.2.6, which pins
|
|
# win32 ^6 through package_info_plus and makes flutter_secure_storage 9.x
|
|
# unsolvable. 10/11.x of that package need compileSdk 37, which this
|
|
# project's Android Gradle plugin does not support. Neither desktop plugin
|
|
# ships here; the constraint is pub's arithmetic, not a runtime need.
|
|
geolocator: 14.0.2
|
|
|
|
# Networking. `http` is the whole transport — every call goes through
|
|
# `ApiClient`, which is the only place in the app that knows about it.
|
|
http: ^1.5.0
|
|
|
|
# Session persistence. Refresh tokens live 60 days and rotate on every use,
|
|
# so they belong in the keychain / EncryptedSharedPreferences, not in a
|
|
# plaintext preferences file.
|
|
flutter_secure_storage: ^9.2.4
|
|
flutter_animate: ^4.5.2
|
|
lottie: ^3.6.1
|
|
|
|
dev_dependencies:
|
|
flutter_test:
|
|
sdk: flutter
|
|
integration_test:
|
|
sdk: flutter
|
|
|
|
# The "flutter_lints" package below contains a set of recommended lints to
|
|
# encourage good coding practices. The lint set provided by the package is
|
|
# activated in the `analysis_options.yaml` file located at the root of your
|
|
# package. See that file for information about deactivating specific lint
|
|
# rules and activating additional ones.
|
|
flutter_lints: ^6.0.0
|
|
|
|
# For information on the generic Dart part of this file, see the
|
|
# following page: https://dart.dev/tools/pub/pubspec
|
|
|
|
# The following section is specific to Flutter packages.
|
|
flutter:
|
|
|
|
# The following line ensures that the Material Icons font is
|
|
# included with your application, so that you can use the icons in
|
|
# the material Icons class.
|
|
uses-material-design: true
|
|
|
|
# Switzer (Indian Type Foundry, via Fontshare) is the app's voice as of
|
|
# 2026-09-23. One variable file, so the weight is selected through the `wght`
|
|
# axis in `DmText` rather than by bundling a file per cut.
|
|
#
|
|
# It replaced Poppins, which has no variable release: four static cuts at
|
|
# ~155 KB each, 625 KB of sans. This is 141 KB and covers 100-900.
|
|
fonts:
|
|
- family: PlusJakartaSans
|
|
fonts:
|
|
- asset: assets/fonts/PlusJakartaSans-Variable.ttf
|
|
- family: Switzer
|
|
fonts:
|
|
- asset: assets/fonts/Switzer-Variable.ttf
|
|
- family: GeistMono
|
|
fonts:
|
|
- asset: assets/fonts/GeistMono-VF.ttf
|
|
|
|
assets:
|
|
# ── Named one by one, not as a folder ──
|
|
#
|
|
# `assets/images/` bundled the whole directory, and that directory is also
|
|
# where the launcher-icon master lives — 974 KB of PNG that `tool/icons.py`
|
|
# reads at build time on a developer's machine and the app never loads.
|
|
# Declaring the folder shipped it to every customer, along with anything
|
|
# else dropped in there to work from. These two are the only images any
|
|
# code actually opens; see `splash_screen.dart` and `auth_scaffold.dart`.
|
|
- assets/images/doormile-mark.png
|
|
- assets/images/doormile-logo.png
|
|
- assets/animations/
|
|
|
|
# To add assets to your application, add an assets section, like this:
|
|
# assets:
|
|
# - images/a_dot_burr.jpeg
|
|
# - images/a_dot_ham.jpeg
|
|
|
|
# An image asset can refer to one or more resolution-specific "variants", see
|
|
# https://flutter.dev/to/resolution-aware-images
|
|
|
|
# For details regarding adding assets from package dependencies, see
|
|
# https://flutter.dev/to/asset-from-package
|
|
|
|
# To add custom fonts to your application, add a fonts section here,
|
|
# in this "flutter" section. Each entry in this list should have a
|
|
# "family" key with the font family name, and a "fonts" key with a
|
|
# list giving the asset and other descriptors for the font. For
|
|
# example:
|
|
# fonts:
|
|
# - family: Schyler
|
|
# fonts:
|
|
# - asset: fonts/Schyler-Regular.ttf
|
|
# - asset: fonts/Schyler-Italic.ttf
|
|
# style: italic
|
|
# - family: Trajan Pro
|
|
# fonts:
|
|
# - asset: fonts/TrajanPro.ttf
|
|
# - asset: fonts/TrajanPro_Bold.ttf
|
|
# weight: 700
|
|
#
|
|
# For details regarding fonts from package dependencies,
|
|
# see https://flutter.dev/to/font-from-package
|