package Ġcom . react nat iven avigation . views . element Ċ Ċ import Ġcom . react nat iven avigation . options . Element Transitions Ċ import Ġcom . react nat iven avigation . options . Nested Animations Options Ċ import Ġcom . react nat iven avigation . options . Shared Elements Ċ import Ġcom . react nat iven avigation . view controllers . view controller . ViewController Ċ import Ġcom . react nat iven avigation . views . element . finder . Existing View Finder Ċ import Ġcom . react nat iven avigation . views . element . finder . Optim istic View Finder Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . await All Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠTransition Set Creator Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation : ĠNested Animations Options , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Screen : ĠView Controller <* >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Screen : ĠView Controller < *> ĊĠĠĠ Ġ) Ġ= ĠTransition Set (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd All ( create Shared Element Transitions ( from Screen , Ġto Screen , Ġanimation . shared Elements )) ĊĠĠĠĠĠĠĠ Ġadd All ( createElement Transitions ( from Screen , Ġto Screen , Ġanimation . element Transitions )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Shared Element Transitions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Screen : ĠView Controller <* >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Screen : ĠView Controller <* >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Elements : ĠShared Elements ĊĠĠĠ Ġ): ĠList < Transition > Ġ= Ġwith Context ( Dispatch ers . Main . immediate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Elements . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShared Element Transition ( to Screen , Ġit ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExisting View Finder (). find ( from Screen , Ġfrom Id )?. let Ġ{ Ġfrom Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptim istic View Finder (). find ( to Screen , Ġto Id )?. let Ġ{ Ġto Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isValid () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠcreateElement Transitions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Screen : ĠView Controller <* >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Screen : ĠView Controller <* >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Transitions : ĠElement Transitions ĊĠĠĠ Ġ): ĠList < Element Transition > Ġ= Ġwith Context ( Dispatch ers . Main . immediate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement Transitions . transitions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransition Ġ= ĠElement Transition ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExisting View Finder (). find ( from Screen , Ġtransition . id )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . view Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . view Controller Ġ= Ġfrom Screen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptim istic View Finder (). find ( to Screen , Ġtransition . id )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . view Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition . view Controller Ġ= Ġto Screen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isValid () Ġ} ĊĠĠĠ Ġ} Ċ }