Restructures navigation session initialization to occur after the view is created, eliminating race conditions. Session initialization now happens in onViewCreated callback with proper delay before setting destination. Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
477 lines
13 KiB
Dart
477 lines
13 KiB
Dart
import 'dart:async';
|
||
|
||
import 'package:flutter/foundation.dart';
|
||
import 'package:flutter/widgets.dart';
|
||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||
import 'package:intl/intl.dart' as intl;
|
||
|
||
import 'app_localizations_en.dart';
|
||
import 'app_localizations_fr.dart';
|
||
|
||
// ignore_for_file: type=lint
|
||
|
||
/// Callers can lookup localized strings with an instance of AppLocalizations
|
||
/// returned by `AppLocalizations.of(context)`.
|
||
///
|
||
/// Applications need to include `AppLocalizations.delegate()` in their app's
|
||
/// `localizationDelegates` list, and the locales they support in the app's
|
||
/// `supportedLocales` list. For example:
|
||
///
|
||
/// ```dart
|
||
/// import 'l10n/app_localizations.dart';
|
||
///
|
||
/// return MaterialApp(
|
||
/// localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||
/// supportedLocales: AppLocalizations.supportedLocales,
|
||
/// home: MyApplicationHome(),
|
||
/// );
|
||
/// ```
|
||
///
|
||
/// ## Update pubspec.yaml
|
||
///
|
||
/// Please make sure to update your pubspec.yaml to include the following
|
||
/// packages:
|
||
///
|
||
/// ```yaml
|
||
/// dependencies:
|
||
/// # Internationalization support.
|
||
/// flutter_localizations:
|
||
/// sdk: flutter
|
||
/// intl: any # Use the pinned version from flutter_localizations
|
||
///
|
||
/// # Rest of dependencies
|
||
/// ```
|
||
///
|
||
/// ## iOS Applications
|
||
///
|
||
/// iOS applications define key application metadata, including supported
|
||
/// locales, in an Info.plist file that is built into the application bundle.
|
||
/// To configure the locales supported by your app, you’ll need to edit this
|
||
/// file.
|
||
///
|
||
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
|
||
/// Then, in the Project Navigator, open the Info.plist file under the Runner
|
||
/// project’s Runner folder.
|
||
///
|
||
/// Next, select the Information Property List item, select Add Item from the
|
||
/// Editor menu, then select Localizations from the pop-up menu.
|
||
///
|
||
/// Select and expand the newly-created Localizations item then, for each
|
||
/// locale your application supports, add a new item and select the locale
|
||
/// you wish to add from the pop-up menu in the Value field. This list should
|
||
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
|
||
/// property.
|
||
abstract class AppLocalizations {
|
||
AppLocalizations(String locale)
|
||
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
|
||
|
||
final String localeName;
|
||
|
||
static AppLocalizations of(BuildContext context) {
|
||
return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
|
||
}
|
||
|
||
static const LocalizationsDelegate<AppLocalizations> delegate =
|
||
_AppLocalizationsDelegate();
|
||
|
||
/// A list of this localizations delegate along with the default localizations
|
||
/// delegates.
|
||
///
|
||
/// Returns a list of localizations delegates containing this delegate along with
|
||
/// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
|
||
/// and GlobalWidgetsLocalizations.delegate.
|
||
///
|
||
/// Additional delegates can be added by appending to this list in
|
||
/// MaterialApp. This list does not have to be used at all if a custom list
|
||
/// of delegates is preferred or required.
|
||
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
|
||
<LocalizationsDelegate<dynamic>>[
|
||
delegate,
|
||
GlobalMaterialLocalizations.delegate,
|
||
GlobalCupertinoLocalizations.delegate,
|
||
GlobalWidgetsLocalizations.delegate,
|
||
];
|
||
|
||
/// A list of this localizations delegate's supported locales.
|
||
static const List<Locale> supportedLocales = <Locale>[
|
||
Locale('en'),
|
||
Locale('fr'),
|
||
];
|
||
|
||
/// No description provided for @appTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Plan B Logistics'**
|
||
String get appTitle;
|
||
|
||
/// No description provided for @appDescription.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delivery Management System'**
|
||
String get appDescription;
|
||
|
||
/// No description provided for @loginWithKeycloak.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Login with Keycloak'**
|
||
String get loginWithKeycloak;
|
||
|
||
/// No description provided for @deliveryRoutes.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delivery Routes'**
|
||
String get deliveryRoutes;
|
||
|
||
/// No description provided for @routes.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Routes'**
|
||
String get routes;
|
||
|
||
/// No description provided for @deliveries.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Deliveries'**
|
||
String get deliveries;
|
||
|
||
/// No description provided for @settings.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Settings'**
|
||
String get settings;
|
||
|
||
/// No description provided for @profile.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Profile'**
|
||
String get profile;
|
||
|
||
/// No description provided for @logout.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Logout'**
|
||
String get logout;
|
||
|
||
/// No description provided for @completed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Completed'**
|
||
String get completed;
|
||
|
||
/// No description provided for @pending.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Pending'**
|
||
String get pending;
|
||
|
||
/// No description provided for @todo.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'To Do'**
|
||
String get todo;
|
||
|
||
/// No description provided for @delivered.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delivered'**
|
||
String get delivered;
|
||
|
||
/// No description provided for @newCustomer.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'New Customer'**
|
||
String get newCustomer;
|
||
|
||
/// No description provided for @items.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count} items'**
|
||
String items(int count);
|
||
|
||
/// No description provided for @moneyCurrency.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{amount} MAD'**
|
||
String moneyCurrency(double amount);
|
||
|
||
/// No description provided for @call.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Call'**
|
||
String get call;
|
||
|
||
/// No description provided for @map.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Map'**
|
||
String get map;
|
||
|
||
/// No description provided for @more.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'More'**
|
||
String get more;
|
||
|
||
/// No description provided for @markAsCompleted.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Mark as Completed'**
|
||
String get markAsCompleted;
|
||
|
||
/// No description provided for @markAsUncompleted.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Mark as Uncompleted'**
|
||
String get markAsUncompleted;
|
||
|
||
/// No description provided for @uploadPhoto.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Upload Photo'**
|
||
String get uploadPhoto;
|
||
|
||
/// No description provided for @viewDetails.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'View Details'**
|
||
String get viewDetails;
|
||
|
||
/// No description provided for @deliverySuccessful.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delivery marked as completed'**
|
||
String get deliverySuccessful;
|
||
|
||
/// No description provided for @deliveryFailed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to mark delivery'**
|
||
String get deliveryFailed;
|
||
|
||
/// No description provided for @noDeliveries.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No deliveries'**
|
||
String get noDeliveries;
|
||
|
||
/// No description provided for @noRoutes.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No routes available'**
|
||
String get noRoutes;
|
||
|
||
/// No description provided for @error.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Error: {message}'**
|
||
String error(String message);
|
||
|
||
/// No description provided for @retry.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Retry'**
|
||
String get retry;
|
||
|
||
/// No description provided for @authenticationRequired.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Authentication required'**
|
||
String get authenticationRequired;
|
||
|
||
/// No description provided for @phoneCall.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Call customer'**
|
||
String get phoneCall;
|
||
|
||
/// No description provided for @navigateToAddress.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show on map'**
|
||
String get navigateToAddress;
|
||
|
||
/// No description provided for @language.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Language'**
|
||
String get language;
|
||
|
||
/// No description provided for @english.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'English'**
|
||
String get english;
|
||
|
||
/// No description provided for @french.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'French'**
|
||
String get french;
|
||
|
||
/// No description provided for @appVersion.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'App Version'**
|
||
String get appVersion;
|
||
|
||
/// No description provided for @about.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'About'**
|
||
String get about;
|
||
|
||
/// No description provided for @fullName.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{firstName} {lastName}'**
|
||
String fullName(String firstName, String lastName);
|
||
|
||
/// No description provided for @completedDeliveries.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{completed}/{total} completed'**
|
||
String completedDeliveries(int completed, int total);
|
||
|
||
/// No description provided for @navigationTcTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Navigation Service'**
|
||
String get navigationTcTitle;
|
||
|
||
/// No description provided for @navigationTcDescription.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This app uses Google Navigation to provide turn-by-turn navigation for deliveries.'**
|
||
String get navigationTcDescription;
|
||
|
||
/// No description provided for @navigationTcAttribution.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Attribution: Maps and navigation services provided by Google Maps.'**
|
||
String get navigationTcAttribution;
|
||
|
||
/// No description provided for @navigationTcTerms.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'By accepting, you agree to Google\'s Terms of Service and Privacy Policy for Navigation services.'**
|
||
String get navigationTcTerms;
|
||
|
||
/// No description provided for @accept.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Accept'**
|
||
String get accept;
|
||
|
||
/// No description provided for @decline.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Decline'**
|
||
String get decline;
|
||
|
||
/// No description provided for @locationPermissionRequired.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location Permission'**
|
||
String get locationPermissionRequired;
|
||
|
||
/// No description provided for @locationPermissionMessage.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This app requires location permission to navigate to deliveries.'**
|
||
String get locationPermissionMessage;
|
||
|
||
/// No description provided for @locationPermissionDenied.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission denied. Navigation cannot proceed.'**
|
||
String get locationPermissionDenied;
|
||
|
||
/// No description provided for @permissionPermanentlyDenied.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Permission Required'**
|
||
String get permissionPermanentlyDenied;
|
||
|
||
/// No description provided for @openSettingsMessage.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission is permanently denied. Please enable it in app settings.'**
|
||
String get openSettingsMessage;
|
||
|
||
/// No description provided for @openSettings.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Open Settings'**
|
||
String get openSettings;
|
||
|
||
/// No description provided for @cancel.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Cancel'**
|
||
String get cancel;
|
||
|
||
/// No description provided for @ok.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'OK'**
|
||
String get ok;
|
||
|
||
/// No description provided for @requestPermission.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Request Permission'**
|
||
String get requestPermission;
|
||
|
||
/// No description provided for @navigationArrived.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'You have arrived at the destination'**
|
||
String get navigationArrived;
|
||
|
||
/// No description provided for @navigatingTo.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Navigating to'**
|
||
String get navigatingTo;
|
||
|
||
/// No description provided for @initializingNavigation.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Initializing navigation...'**
|
||
String get initializingNavigation;
|
||
}
|
||
|
||
class _AppLocalizationsDelegate
|
||
extends LocalizationsDelegate<AppLocalizations> {
|
||
const _AppLocalizationsDelegate();
|
||
|
||
@override
|
||
Future<AppLocalizations> load(Locale locale) {
|
||
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
|
||
}
|
||
|
||
@override
|
||
bool isSupported(Locale locale) =>
|
||
<String>['en', 'fr'].contains(locale.languageCode);
|
||
|
||
@override
|
||
bool shouldReload(_AppLocalizationsDelegate old) => false;
|
||
}
|
||
|
||
AppLocalizations lookupAppLocalizations(Locale locale) {
|
||
// Lookup logic when only language code is specified.
|
||
switch (locale.languageCode) {
|
||
case 'en':
|
||
return AppLocalizationsEn();
|
||
case 'fr':
|
||
return AppLocalizationsFr();
|
||
}
|
||
|
||
throw FlutterError(
|
||
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
|
||
'an issue with the localizations generation tool. Please file an issue '
|
||
'on GitHub with a reproducible sample app and the gen-l10n configuration '
|
||
'that was used.',
|
||
);
|
||
}
|