mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-04 03:27:09 -05:00 
			
		
		
		
	* add deep linking on ios app * add deeplinking to android * code review fixes * lint * cleanly handle malformed URIs when launching app * refactor deep link builder/service, still have bug with navigation stack not containing TabControllerRoute * fix: tab controller insertion conditions * add my.immich.app app linking * chore: remove one-liner if statement --------- Co-authored-by: Alex <alex.tran1502@gmail.com>
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:auto_route/auto_route.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
						|
import 'package:immich_mobile/providers/routes.provider.dart';
 | 
						|
import 'package:immich_mobile/routing/router.dart';
 | 
						|
 | 
						|
class AppNavigationObserver extends AutoRouterObserver {
 | 
						|
  /// Riverpod Instance
 | 
						|
  final WidgetRef ref;
 | 
						|
 | 
						|
  AppNavigationObserver({
 | 
						|
    required this.ref,
 | 
						|
  });
 | 
						|
 | 
						|
  @override
 | 
						|
  Future<void> didChangeTabRoute(
 | 
						|
    TabPageRoute route,
 | 
						|
    TabPageRoute previousRoute,
 | 
						|
  ) async {
 | 
						|
    Future(
 | 
						|
      () => ref.read(inLockedViewProvider.notifier).state = false,
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  void didPush(Route route, Route? previousRoute) {
 | 
						|
    _handleLockedViewState(route, previousRoute);
 | 
						|
 | 
						|
    Future(
 | 
						|
      () => ref.read(currentRouteNameProvider.notifier).state =
 | 
						|
          route.settings.name,
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  _handleLockedViewState(Route route, Route? previousRoute) {
 | 
						|
    final isInLockedView = ref.read(inLockedViewProvider);
 | 
						|
    final isFromLockedViewToDetailView =
 | 
						|
        route.settings.name == GalleryViewerRoute.name &&
 | 
						|
            previousRoute?.settings.name == LockedRoute.name;
 | 
						|
 | 
						|
    final isFromDetailViewToInfoPanelView = route.settings.name == null &&
 | 
						|
        previousRoute?.settings.name == GalleryViewerRoute.name &&
 | 
						|
        isInLockedView;
 | 
						|
 | 
						|
    if (route.settings.name == LockedRoute.name ||
 | 
						|
        isFromLockedViewToDetailView ||
 | 
						|
        isFromDetailViewToInfoPanelView) {
 | 
						|
      Future(
 | 
						|
        () => ref.read(inLockedViewProvider.notifier).state = true,
 | 
						|
      );
 | 
						|
    } else {
 | 
						|
      Future(
 | 
						|
        () => ref.read(inLockedViewProvider.notifier).state = false,
 | 
						|
      );
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |