目录
目录README.md

swiftui-dynamic-forms

The package is early alpha (prototyping stage) Run make workspace from the terminal to generate .xcworkspace for the example

TODO

  • Components
    • DynamicText
    • DynamicButton
    • DynamicStack
    • DynamicTextField
    • DynamicTextView
    • DynamicSpacer
    • DynamicImage
    • DynamicToggle
    • DynamicImage
    • DynamicConfirmationDialog
    • DynamicAlert
    • DynamicDragField
    • DynamicDropField
    • DynamicLink
    • DynamicNavigationView
  • Features
    • Codable support
    • Remove SwiftUI Dependency
      • Create SwiftUI-independent DynamicText modifiers for Color and Font
    • Custom modifiers
  • To-think-about
    • API improvements for state management
    • API improvements for action handling
    • Helper for derived (optional/collection) Bindings

Usage

Example

  • Import DynamicForms

  • Declare your dynamic form model

    DynamicForm {
      DynamicStack(.vertical) {
        DynamicText("Title").bold()
        DynamicText("Description")
        DynamicStack(.horizontal) {
          DynamicText("State: ")
          DynamicText("Initial")
        }
        DynamicStack(.horizontal) {
          DynamicButton(
            DynamicText("OK"),
            action: "content.ok"
          )
          DynamicButton(
            DynamicText("Cancel"),
            action: "content.cancel"
          )
        }
      }
    }

    Equivalent for

    VStack {
      Text("Title").bold()
      Text("Description")
      HStack {
        Text("State: ")
        Text("Initial")
      }
      HStack {
        Button { 
          DynamicFormClient.shared.send("content.id")
        } label: {
          Text("OK")
        }
        Button { 
          DynamicFormClient.shared.send("content.cancel")
        } label: {
          Text("Cancel")
        }
      }
    }
  • Specify body for your dynamic-form-based view using DynamicFormView

    DynamicFormView($form)
  • Handle button actions

    // Returns AnyPublisher<Event, Never> where Event is
    // Event {
    //   id: DynamicElementIdentifier
    //   action: DynamicElementActionIdentifier
    // }
    DynamicFormClient.shared.publisher
    
    // Filters events and returns AnyPublisher<Void, Never>
    DynamicFormClient.shared.publisher(
      for: .init(id: "element", action: "tap")
    )
    
    // Filters events by actionID and returns AnyPublisher<Void, Never>
    DynamicFormClient.shared.publisher(
      for: "actionID"
    )

Installation

Basic

You can add DynamicForms to an Xcode project by adding it as a package dependency.

  1. From the File menu, select Swift Packages › Add Package Dependency…
  2. Enter "https://github.com/capturecontext/swiftui-dynamic-forms.git" into the package repository URL text field
  3. Choose products you need to link them to your project.

If you use SwiftPM for your project, you can add StandardClients to your package file.

.package(
  name: "swiftui-dynamic-forms",
  url: "https://github.com/capturecontext/swiftui-dynamic-forms.git", 
  .branch("0.1.0")
)

Do not forget about target dependencies:

.product(
  name: "DynamicFormss", 
  package: "swiftui-dynamic-forms"
)

License

This library is released under the MIT license. See LICENSE for details.

邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号