Fix Google Navigation initialization timing issues

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>
This commit is contained in:
Jean-Philippe Brule
2025-11-15 20:49:20 -05:00
parent 46af8f55a2
commit 9cb5b51f6d
11 changed files with 558 additions and 192 deletions
+8 -17
View File
@@ -52,11 +52,8 @@ class _NavigationPageState extends ConsumerState<NavigationPage> {
setState(() {
_hasLocationPermission = true;
_isNavigationInitialized = true;
});
if (mounted) {
_initializeNavigationSession();
}
} catch (e) {
if (mounted) {
_showErrorDialog('Initialization error: ${e.toString()}');
@@ -67,19 +64,10 @@ class _NavigationPageState extends ConsumerState<NavigationPage> {
Future<void> _initializeNavigationSession() async {
try {
await GoogleMapsNavigationViewController.initializeNavigationSession();
if (mounted) {
setState(() {
_isNavigationInitialized = true;
});
// Set destination after session is initialized
await _setDestination();
}
} catch (e) {
if (mounted) {
_showErrorDialog('Failed to initialize navigation: ${e.toString()}');
}
debugPrint('Navigation session initialization error: $e');
// Don't show error dialog, just log it
// The session might already be initialized
}
}
@@ -263,8 +251,11 @@ class _NavigationPageState extends ConsumerState<NavigationPage> {
),
body: _hasLocationPermission && _isNavigationInitialized
? GoogleMapsNavigationView(
onViewCreated: (controller) {
onViewCreated: (controller) async {
_navigationViewController = controller;
await _initializeNavigationSession();
await Future.delayed(const Duration(milliseconds: 500));
await _setDestination();
},
initialCameraPosition: CameraPosition(
target: LatLng(