corysullivan / SimpleToast

SimpleToast is a simple, lightweight and easy to use library to show toasts / pop-ups inside your iOS application in SwiftUI.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SimpleToast for SwiftUI

Build Status

SimpleToast is a simple, lightweight and easy to use library to show toasts / popup notifications inside your iOS or MacOS application in SwiftUI.

You decide the content, the library takes care about the rest.

⚠️ Note: The current version is still in an early development stage. There can and will be breaking changes in version updates.

Table of contents

Features:

  • Custom toast content support: You can show whatever you want inside the toast.
  • Custom positioning: Place the toast where you want it to be.
  • Timeout functionality: You decide if and when the toast should disappear.
  • Callback functionality: Run code when the toast disappeared.
  • Multiple, customizable animations

Demo

Modifier Demo
.slide
.fade
.scale

Installation

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/sanzaru/SimpleToast.git", from: "0.0.1")
]

Manual installation

ℹ️ Manual installation is not advised anymore. Please use the package version instead.

Usage:

Attach via boolean

Simply attach the toast to a view and show it via binding to Bool with a 5 sec. delay:

import SwiftUI
import SimpleToast

struct ToastTestView: View {
    @State var showToast: Bool = false

    private let toastOptions = SimpleToastOptions(
        hideAfter: 5
    )

    VStack(spacing: 20) {
        Button("Show toast") {
            withAnimation {
                showToast.toggle()
            }
        }
    }
    .simpleToast(isShowing: $showToast, options: toastOptions) {
        HStack {
            Image(systemName: "exclamationmark.triangle")
            Text("This is some simple toast message.")
        }
        .padding()
        .background(Color.red.opacity(0.8))
        .foregroundColor(Color.white)
        .cornerRadius(10)
    }
}

Note: The toast respects the frame of the view it is attached to. Make sure the view has enough room to render the toast. Preferably the toast should be attached to the most outer view or the navigation view, if available.

Attach via optional object

You can trigger the toast via an instance to an optional, which conforms to the protocol Identifiable. If the value is non-nil the toast will be shown. The following example is based on the previous one and also shows the toast for 5 seconds, but this time based on a value on an item.

import SwiftUI
import SimpleToast

struct ToastTestView: View {
    @State var showToast: DummyItem? = nil

    private struct DummyItem: Identifiable {
        var foo: String = "Bar"
    }

    private let toastOptions = SimpleToastOptions(
        hideAfter: 5
    )

    VStack(spacing: 20) {
        Button("Show toast") {
            withAnimation {
                // Toggle the item
                showToast = showToast == nil ? DummyItem() : nil
            }
        }
    }
    .simpleToast(item: $showToast, options: toastOptions) {
        HStack {
            Image(systemName: "exclamationmark.triangle")
            Text("This is some simple toast message.")
        }
        .padding()
        .background(Color.red.opacity(0.8))
        .foregroundColor(Color.white)
        .cornerRadius(10)
    }
}

 
ℹ️ This functionality is similar to the one of the SwiftUI sheet(item:onDismiss:content:)
 

Run code after dismiss

To run custom code after the toast disappeared you just simply have to pass a function to the onDismiss parameter:

import SwiftUI
import SimpleToast

struct ToastTestView: View {
    @State var showToast: Bool = false

    private let toastOptions = SimpleToastOptions(
        hideAfter: 5
    )

    VStack(spacing: 20) {
        Button("Show toast") {
            withAnimation {
                showToast.toggle()
            }
        }
    }
    .simpleToast(isShowing: $showToast, options: toastOptions, onDismiss: onToastComplete) {
        HStack {
            Image(systemName: "exclamationmark.triangle")
            Text("This is some simple toast message.")
        }
        .padding()
        .background(Color.red.opacity(0.8))
        .foregroundColor(Color.white)
        .cornerRadius(10)
    }

    // This will be called on toast completion
    func onToastComplete() -> Void {
        print("The toast did disappear")
    }
}

Options

The toast can be configured via an optional SimpleToastOptions object. You can simply pass an empty object to configure the toast with default values.

 
📌 All parameters inside the options are optional. If not set, the default value will be taken.
 

Option Description Default
alignment Defines the alignment of the toast. See https://developer.apple.com/documentation/swiftui/alignment for more information. .top
hideAfter Defines when the toast disappears. If nil is given the toast won't disappear. nil
showBackdrop Defines if the toast is rendered over a backdrop. true
backdropColor Defines the backdrop color Color.white.opacity(0.9)
animation Defines the animation type. See https://developer.apple.com/documentation/swiftui/animation for more information. .linear
modifierType Defines the type of toast animation. Possible values(.slide, .fade) .fade

The struct has the following signature:

public struct SimpleToastOptions {
    var alignment: Alignment = .top
    var hideAfter: TimeInterval? = nil
    var showBackdrop: Bool? = true
    var backdropColor: Color = Color.white.opacity(0.9)
    var animation: Animation = .linear
    var modifierType: SimpleToastModifierType = .fade
}

Changelog

See CHANGELOG.md for a overview of changes

About

SimpleToast is a simple, lightweight and easy to use library to show toasts / pop-ups inside your iOS application in SwiftUI.

License:Apache License 2.0


Languages

Language:Swift 100.0%