From c646764065fe31e75f6d718a6b9eb798f0970068 Mon Sep 17 00:00:00 2001 From: Daniel Saidi Date: Wed, 24 Apr 2024 11:30:13 +0200 Subject: [PATCH] Update readme --- README.md | 58 +++++++++++++++++-- .../SystemNotification.swift | 58 +++++++++++++++++++ 2 files changed, 111 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9357c93..03f7e48 100644 --- a/README.md +++ b/README.md @@ -39,21 +39,69 @@ https://github.com/danielsaidi/SystemNotification.git ## Getting started -After adding SystemNotification to your project, you can add a system notification to a view hierarchy just as you add a `sheet`, `alert` and `fullScreenModal`: +You can add a system notification to any view just as you add a `sheet`, `alert` and `fullScreenModal`, by using a `.systemNotification` view modifier with a state binding or a `SystemNotificationContext` instance. + +State-based notifications take a boolean state binding and a view builder: ```swift import SystemNotification struct MyView: View { + @State + var isActive = false + var body: some View { - Text("Hello, world") - .systemNotification(...) + VStack { + Button("Show notification") { + isActive = true + } + } + .systemNotification(isActive: $isActive) { + Text("You can use any custom content view") + .padding() + } } } ``` -You can use both state- and context and message-based notifications and style your notifications to great extent. +Context-based notifications just take a `SystemNotificationContext` instance and can then show many different notifications with a single modifier: + +```swift +import SystemNotification + +struct MyView: View { + + @StateObject + var notification = SystemNotificationContext() + + var body: some View { + VStack { + Button("Show text") { + notification.present { + Text("Context-based notifications are more flexible.") + .padding() + .multilineTextAlignment(.center) + } + } + Button("Show message") { + notification.present { + SystemNotificationMessage( + icon: Text("👍"), + title: "Great job!", + text: "You presented a native-looking message!" + ) + } + } + } + .systemNotification(notification) + } +} +``` + +The `SystemNotificationMessage` view lets you easily mimic a native notification view, with an icon, title and text. + +You can use the `.systemNotificationConfiguration` and `.systemNotificationStyle` view modifiers to apply custom configurations and styles, and the `.systemNotificationMessageStyle` to style the message. For more information, please see the [getting started guide][Getting-Started]. @@ -67,7 +115,7 @@ The [online documentation][Documentation] has more information, articles, code e ## Demo Application -The demo app lets you explore the library with iOS, macOS, and visionOS. To try it out, just open and run the `Demo` project. +The demo app lets you explore the library. To try it out, just open and run the `Demo` project. diff --git a/Sources/SystemNotification/SystemNotification.swift b/Sources/SystemNotification/SystemNotification.swift index 3e58441..18acc10 100644 --- a/Sources/SystemNotification/SystemNotification.swift +++ b/Sources/SystemNotification/SystemNotification.swift @@ -62,6 +62,7 @@ public struct SystemNotification: View { content(isActive) .background(style.backgroundColor) .background(style.backgroundMaterial) + .compositingGroup() .cornerRadius(style.cornerRadius ?? 1_000) .shadow( color: style.shadowColor, @@ -215,3 +216,60 @@ private extension SystemNotification { return Preview() } + +#Preview("README #1") { + + struct MyView: View { + + @State + var isActive = false + + var body: some View { + VStack { + Button("Show notification") { + isActive = true + } + } + .systemNotification(isActive: $isActive) { + Text("You can use any custom content view") + .padding() + } + } + } + + return MyView() +} + + +#Preview("README #2") { + + struct MyView: View { + + @StateObject + var notification = SystemNotificationContext() + + var body: some View { + VStack { + Button("Show text") { + notification.present { + Text("Context-based notifications are more flexible.") + .padding() + .multilineTextAlignment(.center) + } + } + Button("Show message") { + notification.present { + SystemNotificationMessage( + icon: Text("👍"), + title: "Great job!", + text: "You presented a native-looking message!" + ) + } + } + } + .systemNotification(notification) + } + } + + return MyView() +}