RoboSwag/deeplink-utils
Grigorii 8213f0914e make parsedUrl public 2023-03-30 15:45:19 +04:00
..
src/main make parsedUrl public 2023-03-30 15:45:19 +04:00
.gitignore Create deeplink_utils module 2023-03-22 15:57:37 +04:00
build.gradle Create deeplink_utils module 2023-03-22 15:57:37 +04:00
readme.md Create deeplink_utils module 2023-03-22 15:57:37 +04:00

readme.md

Сущность для централизованнной обработки deeplink'ов

Поддерживает

  • Добавление диплинка в очередь
  • Очистка очереди и отмена всех активных операций
  • Асинхронная обработка диплинка
  • Цепочка обработчиков для диплинка
  • Поиск обработчика в иерархии экранов

Использование

Корневая навигация

DeepLinkHandler  
    .observeDeeplink(  
        observerOrder = 0,  
        navigateAction = { deeplink ->   
            binding.bottomNavigation.selectedItemId = deeplink.getBottomNavigationItem().menuId  
        })  
    .launchIn(viewLifecycleOwner.lifecycleScope)

Навигация на втором уровне

DeepLinkHandler
    .observeDeeplink(
        observerOrder = 1,
        canHandle = { it.getBottomNavigationItem() == args.tabType },
        isFinalObserver = { !it.isListDeeplink() },
        navigateAction = { it.navigateToListScreen() }
    )
    .launchIn(viewLifecycleOwner.lifecycleScope)

Навигация на третьем уровне

DeepLinkHandler
    .observeDeeplink(
        observerOrder = 2,
        canHandle = { it.getBottomNavigationItem() == args.tabType && it.isListDeeplink() },
        navigateCondition = { it.getItemId() != null },
        navigateAction = { it.navigateToDetailsScreen() }
    )
    .launchIn(viewLifecycleOwner.lifecycleScope)

Пример проекта можно посмотреть в: https://github.com/duwna/Deeplinks-test