Easy-to-use navigation system for SwiftUI apps

OpenBytesNavigation

OpenBytesNavigation is a SwiftUI library that provides a flexible and easy-to-use navigation system for your SwiftUI apps. It allows you to navigate between views, show modal views, display alerts and action sheets, and show toast notifications.

Usage

To use OpenBytesNavigation, you need to create an instance of OpenBytesNavigationPath, which keeps track of the navigation state. You can then use the OpenBytesNavigationView view to display your content and provide navigation functionality.

import OpenBytesNavigation
import SwiftUI

struct ContentView: View {
    @ObservedObject private var path = OpenBytesNavigationPath(id: "path_id")

    var body: some View {
        OpenBytesNavigationView(path: path) {
            // your content here
        }
    }
}

Navigation Examples

SwiftUI Previews

Call the preview function on OpenBytesNavigationView to create a preview of your navigation stack. This is useful for SwiftUI previews as the path won’t be able to save.

struct ExampleView_Previews: PreviewProvider {
    static var previews: some View {
        OpenBytesNavigationView.preview {
            // your content here
        }
    }
}

Action Sheet

path.actionSheet(
    title: "Delete Item?",
    actions: {
        Button("Delete", role: .destructive) {
            // Delete item
        }
    },
    message: {
        Text("Are you sure you want to delete this item?")
    }
)

Alert

path.alert(
    title: Text("Error"),
    message: Text("An error occurred. Please try again."),
    primaryButton: .default(Text("OK")),
    secondaryButton: .cancel()
)

Modal

path.modal(
    body: {
        Text("Modal body")
    }
)

Toast

path.toast(
    title: "Success",
    message: "Item saved successfully",
    style: .success
)

Push

.navigationDestination(for: Date.self, destination: { DateView(date: $0) })
...
path.push(Date())

Pop

path.pop()

Save and Load

let id = "test"
let path = OpenBytesNavigationPath(id: id, isPreview: false)

XCTAssertEqual(path.navigation.count, 0)

path.push("Value")

XCTAssertEqual(path.navigation.count, 1)

path.save()

let loadedPath = OpenBytesNavigationPath.load(id: id)

XCTAssertEqual(loadedPath.navigation.count, path.navigation.count)

GitHub

View Github