Skip to content

Repository files navigation

liquid-toasts

Premium, natively-rendered toasts — drawn on an overlay above your app in SwiftUI, with a springy slide-in entrance, per-position vertical stacking, and async loading toasts. No view controller, no BuildContext, no environment plumbing.

This repo ships the same toaster in two flavors:

  • LiquidToasts — a standalone SwiftUI package for native iOS apps (LiquidToast.show("Saved")).
  • liquid_toasts — a Flutter plugin (toast.success('Saved')) that renders through that same SwiftUI package on iOS, and through an equivalent Jetpack Compose implementation on Android.

Showcase

stacking.mp4

Stacking — staggered in and out
variable-color.mp4

Animated icons — SF Symbol effects
progress.mp4

Progress — determinate upload
action.mp4

Action button — inline Undo

Install

Both packages ship from the same repo and the same vX.Y.Z tag.

Native iOS — Xcode

File → Add Package Dependencies… → https://github.com/SimplifyJobs/liquid-toasts.git, Up to Next Major. Add the LiquidToasts library to your app target.

Native iOS — Package.swift

dependencies: [
  .package(url: "https://github.com/SimplifyJobs/liquid-toasts.git", from: "0.8.0")
],
targets: [
  .target(name: "App", dependencies: [
    .product(name: "LiquidToasts", package: "liquid-toasts")
  ])
]
import LiquidToasts

LiquidToast.success("Profile updated")

Requires iOS 17+ (real Liquid Glass activates on iOS 26+; frosted below).

Flutter

dependencies:
  liquid_toasts:
    git:
      url: https://github.com/SimplifyJobs/liquid-toasts.git
      ref: v0.8.0
      path: liquid_toasts

⚠️ Swift Package Manager is required.

The plugin's iOS side is SwiftPM-only — there is no podspec. Enable Flutter's SwiftPM mode once per machine:

flutter config --enable-swift-package-manager

Without it, an iOS build fails with a missing-podspec error. Android needs no extra setup.

import 'package:liquid_toasts/liquid_toasts.dart';

toast.success('Saved to favorites');

Releases

Both packages ship from one vX.Y.Z git tag — notes live on the Releases page, and SwiftPM and pub resolve straight from the tag.

Layout

Package.swift            # root manifest for the standalone SwiftUI package
liquid-toasts-swift/     # its sources (Sources/LiquidToasts) + native README
liquid_toasts/           # the Flutter plugin: lib/ test/ android/ example/
  └── ios/liquid_toasts/ # the plugin's Swift package: the bridge, plus a
                         # symlink to the core sources above
tool/  docs/  assets/

The root Package.swift is thin — a manifest pointing at liquid-toasts-swift/Sources/LiquidToasts — and lives at the repo root because SwiftPM can only resolve a git URL whose repository root holds a manifest. The plugin's package compiles that same folder through ios/liquid_toasts/Sources/LiquidToasts, a symlink, so the SwiftUI core exists exactly once with no vendored copy to drift.

Why a symlink and not a package dependency: Flutter resolves a plugin through a symlink in the consuming app (ios/Flutter/ephemeral/Packages/.packages/<plugin>), and SwiftPM resolves a manifest's relative paths against that symlink rather than the checkout it points into. A dependency reaching above the plugin's own folder therefore lands in the app's ephemeral directory and fails resolution. The source symlink has no such problem — the filesystem follows it from its real location.

Docs

License

See LICENSE.

About

A Flutter plugin to show toasts (iOS + Android)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages