Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import SwiftUI
- struct ToastViewModifier: ViewModifier {
- @Binding var message: String?
- var style: Toast.Style
- var alignment: Alignment
- @State private var workItem: DispatchWorkItem?
- func body(content: Content) -> some View {
- content
- .overlay(alignment: alignment) {
- ZStack {
- toastView
- }
- .animation(.bouncy, value: message)
- }
- .onChange(of: message) { _, _ in
- showToast()
- }
- }
- @ViewBuilder private var toastView: some View {
- if let message {
- Toast(message: message, style: style)
- }
- }
- private func showToast() {
- workItem?.cancel()
- let item = DispatchWorkItem {
- withAnimation {
- self.message = nil
- }
- workItem?.cancel()
- workItem = nil
- }
- workItem = item
- DispatchQueue.main.asyncAfter(deadline: .now() + 2.0, execute: item)
- }
- }
- extension View {
- func toast(message: Binding<String?>,
- style: Toast.Style = .default,
- alignment: Alignment = .center) -> some View {
- modifier(
- ToastViewModifier(message: message, style: style, alignment: alignment)
- )
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement