Skip to content

Commit 8d76fe9

Browse files
committed
also support styleName and includedStyle in SwiftUI modifier
1 parent 754038f commit 8d76fe9

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

JDStatusBarNotification/Public/NotificationViewExtension.swift

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,35 @@ import SwiftUI
1010

1111
private struct SwiftUINotficationState {
1212
static var notificationId: UUID? = nil
13+
static let internalStyleName = "__swiftui-extension-style"
1314
}
1415

1516
extension View {
1617
public typealias NotificationPrepareStyleClosure = (StatusBarNotificationStyle) -> Void
1718

1819
nonisolated public func notification(isPresented: Binding<Bool>, style: NotificationPrepareStyleClosure? = nil, @ViewBuilder viewBuilder: () -> some View) -> some View {
1920
let np = NotificationPresenter.shared
21+
var styleName: String? = nil
22+
if let style {
23+
styleName = np.addStyle(named: SwiftUINotficationState.internalStyleName) { s in
24+
let _ = style(s)
25+
return s
26+
}
27+
}
28+
return notification(isPresented: isPresented, styleName: styleName, viewBuilder: viewBuilder)
29+
}
30+
31+
nonisolated public func notification(isPresented: Binding<Bool>, includedStyle: IncludedStatusBarNotificationStyle? = nil, @ViewBuilder viewBuilder: () -> some View) -> some View {
32+
let np = NotificationPresenter.shared
33+
var styleName: String? = nil
34+
if let includedStyle {
35+
styleName = np.addStyle(named: SwiftUINotficationState.internalStyleName, usingStyle: includedStyle) { return $0 }
36+
}
37+
return notification(isPresented: isPresented, styleName: styleName, viewBuilder: viewBuilder)
38+
}
39+
40+
nonisolated public func notification(isPresented: Binding<Bool>, styleName: String? = nil, @ViewBuilder viewBuilder: () -> some View) -> some View {
41+
let np = NotificationPresenter.shared
2042

2143
// dismiss if needed
2244
if !isPresented.wrappedValue && np.isVisible && np.activeNotificationId == SwiftUINotficationState.notificationId {
@@ -25,15 +47,7 @@ extension View {
2547

2648
// present if needed
2749
if isPresented.wrappedValue && SwiftUINotficationState.notificationId == nil {
28-
if let style {
29-
let name = np.addStyle(named: "__swiftui-extension-style") { s in
30-
let _ = style(s)
31-
return s
32-
}
33-
np.presentSwiftView(styleName: name, viewBuilder: viewBuilder)
34-
} else {
35-
np.presentSwiftView(viewBuilder: viewBuilder)
36-
}
50+
np.presentSwiftView(styleName: styleName, viewBuilder: viewBuilder)
3751

3852
// remember id of our presentation
3953
SwiftUINotficationState.notificationId = np.activeNotificationId

0 commit comments

Comments
 (0)