使用 Nillerr/Detour 的 SwiftUI 中丰富路由的概念验证
星云导航
此存储库包含使用 Nillerr/Detour 在 SwiftUI 中丰富路由的概念验证。
它由流、路由、演示文稿和流组成,作为 SwiftUI 视图的概念,并假定一次不超过一个模式表示的规则。
介绍
演示文稿显示从根视图显示为模式的流和视图。两者都受支持,并且在其中任何一个之间更改呈现的视图等待另一个的解雇以提供无缝支持。sheet
fullScreenCover
import Detour
enum TodoPresentations {
case edit
}
typealias TodoPresenter = Presenter<TodoPresentations>
struct ContentView: View {
@StateObject var presenter = TodoPresenter()
var body: some View {
Presentations(presenter: presenter) {
RootView(edit: { presenter.present(.edit) })
} content: { presentation in
switch presentation.presentable {
case .edit:
EditView(dismiss: { presenter.dismiss() })
}
}
}
}
路线
路由通过 导航到视图。NavigationView
import Detour
enum TodoRoutes: Routeable {
case todo(TodoDetailViewModel)
var path: [TodoRoutes] {
switch self {
case .todo(let todo):
return [.todo(todo)]
}
}
}
typealias TodoRouter = Router<TodoRoutes>
struct ContentView: View {
@StateObject var router = TodoRouter()
var body: some View {
Routes(router: router) {
TodoListView(selectTodo: { todo in router.navigate(to: .todo(todo)) })
} content: { destination in
switch destination {
case .todo(let todo):
TodoDetailView(viewModel: todo, dismiss: { router.navigate(to: nil) })
}
}
}
}
Flows
Flows are navigation flows either using or itself.Routes
NavigationView