MessageCenterContent

@MainActor
public struct MessageCenterContent : View

The Message Center content view. This view can be used to construct a custom Message Center. For a more turnkey solution, see MessageCenterView.

To use this view, a MessageCenterController must be supplied. The controller will be shared between the list and message views, keeping the state in sync.

### Using it with your own navigation stack:

    @StateObject
    private var messageCenterController = MessageCenterController()

    var body: some View {
        NavigationStack(path: $messageCenterController.path) {
            MessageCenterContent(controller: messageCenterController)
                .navigationDestination(for: MessageCenterController.Route.self) { route in
                    switch(route) {
                    case .message(let messageID):
                        MessageCenterMessageViewWithNavigation(messageID: messageID)
                    @unknown default:
                        fatalError()
                    }
                }
        }
    }

### Using it in a deprecated NavigationView or UIKIt:

     @StateObject
     private var messageCenterController = MessageCenterController()

     var body: some View {
         NavigationView {
             ZStack {
                 MessageCenterContent(controller: self.messageCenterController)
                 NavigationLink(
                     destination: Group {
                         if case .message(let messageID) = self.messageCenterController.path.last {
                             MessageCenterMessageViewWithNavigation(messageID: messageID) {
                                 // Clear selection on close
                                 self.messageCenterController.path.removeAll()
                             }
                         } else {
                             EmptyView()
                         }
                     },
                     isActive: Binding(
                         get: { self.messageCenterController.path.last != nil },
                         set: { isActive in
                             if !isActive { self.messageCenterController.path.removeAll() }
                         }
                     )
                 ) {
                     EmptyView()
                 }
                 .hidden()
             }
         }
     }
  • Initializer.

    Declaration

    Swift

    @MainActor
    public init(
        controller: MessageCenterController,
        listViewModel: MessageCenterMessageListViewModel
    )

    Parameters

    controller

    The message center controller.

    listViewModel

    The message center list view model.

  • Initializer.

    Declaration

    Swift

    @MainActor
    public init(
        controller: MessageCenterController,
        hostingController: UIViewController? = nil,
        predicate: (any MessageCenterPredicate)? = nil
    )

    Parameters

    controller

    The message center controller.

    hostingController

    A weak reference to the hosting controller to apply apperance changes.

    predicate

    A predicate to filter messages.

  • The body of the view.

    Declaration

    Swift

    @ViewBuilder
    @MainActor
    public var body: some View { get }