Size: a a a

Cicerone Chat (RUS)

2021 January 19

VS

Vladislav Shipugin in Cicerone Chat (RUS)
Всем привет!

У меня тут интересный кейс навигации.

Есть сценарий покупки и продажи.

Допустим я на экране А.
B - продажа
С - покупка

Есть ещё экран проверки данных D
И SMS подтверждение E.


Я перехожу с A -> B. Но вдруг оказывается, что нужно данные проверить или смс подтверждение.

И получается

А -> D -> E -> B
Или
А -> D -> E -> С

А может быть
A -> D -> C
или
A  -> C

Проблема на экране D и E нужно знать какой сценарий мы начали. Открытие B или C.

Можно в useCase хранить флаг сценария или передавать из экрана в экран.

Как cicerone может помочь в организации таких сценариев?
источник

VS

Vladislav Shipugin in Cicerone Chat (RUS)
Vladislav Shipugin
Всем привет!

У меня тут интересный кейс навигации.

Есть сценарий покупки и продажи.

Допустим я на экране А.
B - продажа
С - покупка

Есть ещё экран проверки данных D
И SMS подтверждение E.


Я перехожу с A -> B. Но вдруг оказывается, что нужно данные проверить или смс подтверждение.

И получается

А -> D -> E -> B
Или
А -> D -> E -> С

А может быть
A -> D -> C
или
A  -> C

Проблема на экране D и E нужно знать какой сценарий мы начали. Открытие B или C.

Можно в useCase хранить флаг сценария или передавать из экрана в экран.

Как cicerone может помочь в организации таких сценариев?
@terrakok У тебя семплов или тестов таких не было?
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
открыть "скоуп" со стейтом на весь флоу
источник

AC

Arsen CeH9 in Cicerone Chat (RUS)
такой совет канешн сильно от архитектуры зависит
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
да, библиотека не навязывает, как хранить и передавать параметры бизнес логики.
в лоб через параметр
или через открытие скоупа
источник

VS

Vladislav Shipugin in Cicerone Chat (RUS)
Не, тут же вопрос про то, чтобы создасть сценарий, а экраны вызывали просто метод toNext() без описания логики по определению экранов.
источник

VS

Vladislav Shipugin in Cicerone Chat (RUS)
Что то типо:

    stageNavigator.init(
           stage = StageNavigator.stagesOf(
               A, E, D
           )
       )

А потом вызывать просто
stageNavigator.toNextStage()
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
для этого я делал координатор с методом goNext(), который по входным данным определял что делать дальше
источник

VS

Vladislav Shipugin in Cicerone Chat (RUS)
Konstantin Tskhovrebov
для этого я делал координатор с методом goNext(), который по входным данным определял что делать дальше
Вот, да. А примера его нет? Или это просто логика поверх cicerone?
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
общее между всеми координаторами - только название
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
тащить интерфейс маркер в библиотеку? :)
источник

VS

Vladislav Shipugin in Cicerone Chat (RUS)
Не, я про то, что такой координатор можно написать поверх FragmentManager и повер cicerone. И вот я думаю, стоит ли затаскивать cicerone или нет)
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
в сотый раз: чичероне это про отвязку от ЖЦ и батчинг команд
источник

AD

Aleksey D. in Cicerone Chat (RUS)
Vladislav Shipugin
Не, я про то, что такой координатор можно написать поверх FragmentManager и повер cicerone. И вот я думаю, стоит ли затаскивать cicerone или нет)
я в такой координатор тащил ради отвязки навигации от жизненного цикла
сейчас на проекте нет чичероне, поэтому координтор на чистом менеджере и святом духе с надеждой, что мы не вызовем его, пока view == null
источник
2021 January 28

AD

Aleksey D. in Cicerone Chat (RUS)
кажется, что FragmentParams был более подходящим концептом для работы с FragmentFactory, чем новый FragmentScreen#Creator

теперь вместо «декларативного» описания фрагмента мне нужно каждый раз работать с фабрикой, вызывать ее методы, брать откуда-то ClassLoader и угадывать, какую именно строчку нужно передать в качестве имени фрагмента 🤷
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
не понял, зачем? фрагменты можно создавать ровно как раньше, не используя фабрику
источник

AD

Aleksey D. in Cicerone Chat (RUS)
Konstantin Tskhovrebov
не понял, зачем? фрагменты можно создавать ровно как раньше, не используя фабрику
так я ж наоборот хочу использовать фабрику)
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
а, тогда возможно можно придумать экстеншн, который поможет не писать одно и тоже
источник

AD

Aleksey D. in Cicerone Chat (RUS)
Konstantin Tskhovrebov
а, тогда возможно можно придумать экстеншн, который поможет не писать одно и тоже
кстати, а откуда в Presenter/ViewModel брать ClassLoader?
мы же AppScreen используем именно там, но ClassLoader для FragmentFactory#instantiate получается через Context#getClassLoader
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
нет, я предлагаю передавать в ваши скрины свой FragmentParams, а над FragmentParams написать экстеншн, который будет на вход получать фабрику, а на выход отдавать фрагмент
источник