ionic-planb-logistic-app-fl.../lib/components/navigation_tc_dialog.dart
Jean-Philippe Brule 46af8f55a2 Implement Google Navigation Flutter integration for turn-by-turn delivery navigation
Adds complete Google Navigation support with:
- LocationPermissionService for runtime location permissions
- NavigationSessionService for session and route management
- NavigationPage for full-screen turn-by-turn navigation UI
- NavigationTermsAndConditionsDialog for service acceptance
- Comprehensive i18n support (English/French)
- Android minSdk=23 with Java NIO desugaring
- iOS location permissions in Info.plist
- Error handling with user-friendly dialogs
- Location update and arrival notifications

Includes detailed setup guide and implementation documentation with API key
configuration instructions, integration examples, and testing checklist.

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:43:29 -05:00

83 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class NavigationTermsAndConditionsDialog extends StatelessWidget {
final VoidCallback onAccept;
final VoidCallback? onDecline;
const NavigationTermsAndConditionsDialog({
Key? key,
required this.onAccept,
this.onDecline,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
final colorScheme = Theme.of(context).colorScheme;
return AlertDialog(
title: Text(
l10n?.navigationTcTitle ?? 'Navigation Service',
style: Theme.of(context).textTheme.headlineSmall?.copyWith(
color: colorScheme.onSurface,
),
),
content: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
l10n?.navigationTcDescription ??
'This app uses Google Navigation to provide turn-by-turn navigation for deliveries.',
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
color: colorScheme.onSurface,
),
),
const SizedBox(height: 16),
Text(
l10n?.navigationTcAttribution ??
'Attribution: Maps and navigation services provided by Google Maps.',
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: colorScheme.onSurfaceVariant,
),
),
const SizedBox(height: 12),
Text(
l10n?.navigationTcTerms ??
'By accepting, you agree to Google\'s Terms of Service and Privacy Policy for Navigation services.',
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: colorScheme.onSurfaceVariant,
),
),
],
),
),
actions: [
if (onDecline != null)
TextButton(
onPressed: () {
Navigator.of(context).pop();
onDecline!();
},
child: Text(
l10n?.decline ?? 'Decline',
style: TextStyle(color: colorScheme.error),
),
),
TextButton(
onPressed: () {
Navigator.of(context).pop();
onAccept();
},
child: Text(
l10n?.accept ?? 'Accept',
style: TextStyle(color: colorScheme.primary),
),
),
],
);
}
}