FlowStacks:为SwiftUI导航添加超能力





项目名称:FlowStacks

项目简介

FlowStacks是一个为SwiftUI提供的库,它增强了NavigationStack API,使得开发者可以使用相同的API来处理页面推送、展示sheets和全屏覆盖。这个库不仅支持最新的SwiftUI版本,还可以在旧版本的iOS、tvOS、watchOS和macOS上使用。它特别适合需要深度链接、视图重用、导航逻辑集中管理、以及将导航拆分为多个可重用协调器的场景。

核心功能

  • 深度链接支持:支持将链接深入到应用的深层导航路径中。

  • 视图重用:在不同的导航上下文中轻松重用视图。

  • 导航控制:方便地回到根屏幕或导航堆栈中的特定屏幕。

  • 协调器模式:使用协调器模式将导航逻辑集中在一个地方。

  • 可组合的导航:将应用的导航拆分为多个可重用的协调器,并组合它们。

熟悉的API

FlowStacks提供了与NavigationStack相似的API,通过将Navigation替换为Flow来使用。例如,NavigationStack变为FlowStackNavigationLink变为FlowLinkRoute枚举结合了目标数据和展示样式信息。FlowLink创建时需要指定路由样式,如.push.sheet.cover

示例代码

import FlowStacks
import SwiftUI

struct ContentView: View {
  @State var path = FlowPath()
  @State var isShowingWelcome = false

  var body: some View {
    FlowStack($path, withNavigation: true) {
      HomeView()
        .flowDestination(for: Int.self, destination: { number in
          NumberView(number: number)
        })
        .flowDestination(for: String.self, destination: { text in
          Text(text)
        })
        .flowDestination(isPresented: $isShowingWelcome, style: .sheet) {
          Text("Welcome to FlowStacks!")
        }
    }
  }
}

struct HomeView: View {
  @EnvironmentObject var navigator: FlowPathNavigator
  
  var body: some View {
    List {
      ForEach(0 ..< 10, id: \.self) { number in
        FlowLink(value: number, style: .sheet(withNavigation: true), label: { Text("Show \(number)") })
      }
      Button("Show 'hello'") {
        navigator.push("Hello")
      }
    }
    .navigationTitle("Home")
  }
}

struct NumberView: View {
  @EnvironmentObject var navigator: FlowPathNavigator
  let number: Int

  var body: some View {
    VStack(spacing: 8) {
      Text("\(number)")
      FlowLink(
        value: number + 1,
        style: .push,
        label: { Text("Show next number") }
      )
      Button("Go back to root") {
        navigator.goBackToRoot()
      }
    }
    .navigationTitle("\(number)")
  }
}

附加功能

  • FlowNavigator:通过环境访问当前路由数组,并使用便捷方法更新它。

  • 便捷方法:提供了多种便捷方法,如pushpresentSheetgoBack等,简化导航操作。

  • 深度链接:解决了SwiftUI在处理深层导航链接时的限制。

  • 绑定:支持与屏幕状态的绑定,允许屏幕自身更新其在路由数组中的状态。

项目地址

FlowStacks GitHub

或许喜欢

Atributika:Swift库将HTML风格文本转换为NSAttributedString

Atributika是一个Swift库,能够识别和样式化HTML风格标签、链接、电话号码等,并生成NSAttributedString,支持iOS、tvOS、watchOS和macOS。

最近更新 2024-12-09

WaterTracker: 跨平台纯SwiftUI开发的喝水追踪应用

WaterTracker是一款跨iOS、iPadOS和watchOS平台的喝水追踪应用,使用SwiftUI开发,支持HealthKit和CloudKit数据同步,无广告、无内购。

最近更新 2024-12-09

ShuffleIt:SwiftUI自定义堆叠视图与动画库

ShuffleIt是一个SwiftUI库,提供多种自定义堆叠视图和优雅的洗牌、滑动、滑动行为,适用于iOS、macOS、watchOS和tvOS。

最近更新 2024-12-09

热榜

Made with in Shangrao,China By 老雷

Copyright © devler.cn 1987 - Present

赣ICP备19009883号-1