惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
V
V2EX
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hugging Face - Blog
Hugging Face - Blog
Stack Overflow Blog
Stack Overflow Blog
I
InfoQ
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
Recent Announcements
Recent Announcements
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
美团技术团队
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
How I built real-time Flutter notifications without Firebase
Hamid Wakili · 2026-05-16 · via DEV Community

I maintain another_flushbar on pub.dev — one of the more popular Flutter notification packages. After seeing how many developers were pulling in the full Firebase SDK just to show an in-app banner, I decided to build something simpler.

The result is FlushKit: a remote in-app notification SDK for Flutter, powered by Server-Sent Events.

The problem with Firebase for in-app notifications

Firebase Cloud Messaging is excellent for push notifications when your app is closed. But if your app is open and you just want to show an announcement, an alert, or an onboarding tip — you're still carrying google-services.json, Firebase Auth dependencies, and a background service to do it.

That felt like too much for the in-app case.

Why SSE instead of WebSockets

SSE (Server-Sent Events) is a persistent HTTP connection where the server pushes events to the client. One direction only — which is exactly what notifications need. No handshake overhead, no socket management, automatic reconnection built into the browser/HTTP spec.

For Flutter, I built a persistent SSE client that reconnects on drop and replays missed notifications via a ?since= query parameter. If a user had the app closed, they get the notification on next open.

What the integration looks like

// Initialize once in your app
FlushbarRemote.init(apiKey: 'fk_live_••••••••', context: context);

Enter fullscreen mode Exit fullscreen mode


`

That's it. From that point, any notification you create in the FlushKit dashboard streams to every connected instance of your app in real time.

The SDK handles reconnection, offline replay, action buttons, icons, and persistent mode — all built on another_flushbar under the hood.

The backend

Go/Gin with a SSE broadcast layer per app. Each connected Flutter instance holds an open HTTP connection. When you publish a notification, it fans out to all active connections immediately.

The same SSE channel will carry Remote Config events next — one persistent connection, multiple message types.

Where it is today

FlushKit is live at flushkit.dev with a free tier. Early stage — I'm the solo founder. Feedback on the use case, the API design, or the pricing is genuinely welcome.

If you're already using another_flushbar, FlushKit is the hosted layer on top of it.


FlushKit is built on another_flushbar,
which I also maintain. Free tier available at flushkit.dev.