Guest User

stinsen change root example

a guest
Aug 1st, 2022
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.93 KB | None | 0 0
  1. import Stinsen
  2. import SwiftUI
  3.  
  4. final class MainCoordinator: NavigationCoordinatable {
  5.    
  6.     static let Notifications: NotificationCenter = {
  7.         NotificationCenter()
  8.     }()
  9.    
  10.     let stack = NavigationStack(initial: \MainCoordinator.login)
  11.    
  12.     @Root
  13.     var login = makeLogin
  14.     @Root
  15.     var home = makeHome
  16.    
  17.     init() {
  18.         Self.Notifications.addObserver(self, selector: #selector(didReceiveLogin), name: .init(rawValue: "login"), object: nil)
  19.         Self.Notifications.addObserver(self, selector: #selector(didReceiveLogout), name: .init(rawValue: "logout"), object: nil)
  20.     }
  21.    
  22.     @objc
  23.     func didReceiveLogin() {
  24.         root(\.home)
  25.     }
  26.    
  27.     @objc
  28.     func didReceiveLogout() {
  29.         root(\.login)
  30.     }
  31.    
  32.     func makeLogin() -> LoginCoordinator {
  33.         LoginCoordinator()
  34.     }
  35.    
  36.     func makeHome() -> HomeCoordinator {
  37.         HomeCoordinator()
  38.     }
  39. }
  40.  
  41. final class LoginCoordinator: NavigationCoordinatable {
  42.    
  43.     let stack = NavigationStack(initial: \LoginCoordinator.start)
  44.    
  45.     @Root
  46.     var start = makeStart
  47.    
  48.     @ViewBuilder
  49.     func makeStart() -> some View {
  50.         VStack {
  51.             Text("Press below to login!")
  52.            
  53.             Button {
  54.                 MainCoordinator.Notifications.post(name: .init(rawValue: "login"), object: nil)
  55.             } label: {
  56.                 Text("Login")
  57.             }
  58.         }
  59.     }
  60. }
  61.  
  62. final class HomeCoordinator: NavigationCoordinatable {
  63.    
  64.     let stack = NavigationStack(initial: \HomeCoordinator.start)
  65.    
  66.     @Root
  67.     var start = makeStart
  68.    
  69.     @ViewBuilder
  70.     func makeStart() -> some View {
  71.         VStack {
  72.             Text("Home")
  73.            
  74.             Button {
  75.                 MainCoordinator.Notifications.post(name: .init(rawValue: "logout"), object: nil)
  76.             } label: {
  77.                 Text("Logout")
  78.             }
  79.         }
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment