Skip to content

Commit

Permalink
Update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
danielsaidi committed Apr 24, 2024
1 parent 06a2f32 commit a97ce3f
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 7 deletions.
60 changes: 54 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ The result can look like this, or completely different:
<img src="Resources/Demo.gif" width=350 />
</p>

These notifications can be styled and customized to great extent. You can also use completely custom views.
System notifications can be styled and customized to great extent. You can use the native-looking `SystemNotificationMessage` view as content, or any custom view.



Expand All @@ -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].

Expand All @@ -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.



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ SystemNotification is a SwiftUI SDK that lets you mimic the native iOS system no

![SystemNotification logo](Logo.png)

SystemNotification is a SwiftUI SDK that lets you mimic the native iOS system notification that are presented when you toggle silent mode, connect your AirPods, etc.
SystemNotification is a SwiftUI SDK that lets you mimic the native iOS system notification that are presented when you toggle silent mode, connect your AirPods, etc.

These notifications can be styled and customized to great extent. You can also use completely custom views.

Expand Down
58 changes: 58 additions & 0 deletions Sources/SystemNotification/SystemNotification.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public struct SystemNotification<Content: View>: View {
content(isActive)
.background(style.backgroundColor)
.background(style.backgroundMaterial)
.compositingGroup()
.cornerRadius(style.cornerRadius ?? 1_000)
.shadow(
color: style.shadowColor,
Expand Down Expand Up @@ -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()
}

0 comments on commit a97ce3f

Please sign in to comment.