Wire up start-session flow (variable-rate aware) + fix About dark mode

- New StartSession screen off MeterDetail: pick vehicle -> duration (from the live
  multi-estimate ladder, exact cost per option) -> card; detects a free prefix and
  shows "Free until X, then charged"; explicit Pay $X confirmation before charging
  via postStartParkingSession; schedules the local expiry reminder on success
- About screen themed (was black-on-dark in dark mode)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hank 2026-07-06 11:39:19 -07:00
parent 9a5c9d445f
commit f044a9a511
4 changed files with 340 additions and 11 deletions

View file

@ -20,12 +20,14 @@ import { ProfileScreen } from '@/screens/ProfileScreen';
import { VehiclesScreen } from '@/screens/VehiclesScreen';
import { PaymentMethodsScreen } from '@/screens/PaymentMethodsScreen';
import { NotificationsScreen } from '@/screens/NotificationsScreen';
import { StartSessionScreen } from '@/screens/StartSessionScreen';
import { useTheme } from '@/theme/ThemeContext';
import type { Zone } from 'parksmarter-client';
export type RootStackParamList = {
Tabs: undefined;
MeterDetail: { zone: Zone };
StartSession: { zone: Zone };
About: undefined;
Profile: undefined;
Vehicles: undefined;
@ -111,6 +113,11 @@ export function RootNavigator() {
component={MeterDetailScreen}
options={{ title: 'Meter' }}
/>
<Stack.Screen
name="StartSession"
component={StartSessionScreen}
options={{ title: 'Start session' }}
/>
<Stack.Screen name="About" component={AboutScreen} options={{ title: 'About' }} />
<Stack.Screen name="Profile" component={ProfileScreen} options={{ title: 'Profile' }} />
<Stack.Screen name="Vehicles" component={VehiclesScreen} options={{ title: 'Vehicles' }} />