"Supabase Realtime Not Working? Fix It in Flutter"
"Supabase realtime not working in Flutter? Checklist: publication membership, RLS policies, REPLICA IDENTITY FULL, channel states, auth timing — with fixes."
You wired up the channel, you inserted a row, and… nothing. No error, no crash, just silence. Supabase realtime not working is the most common realtime complaint in Flutter apps, and the maddening part is that it's almost never your Dart code — it's one of five server-side or lifecycle misconfigurations, and the failure mode for all of them is identical: silence. This is a checklist, ordered by how often each cause is the culprit. Work it top to bottom; most developers find their bug in the first three steps. Every step includes the exact SQL or Dart fix. Last updated: October 3, 2026 What you'll learn The 5-step checklist that resolves ~95% of "realtime not working" cases How to verify your table is in the supabase_realtime publication How RLS silently swallows realtime events (and the policy fix) Why UPDATE/DELETE need REPLICA IDENTITY FULL Reading channel states: subscribed , timedOut , channelError , closed Local-dev and auth-timing gotchas (setAuth, leaked channels, wrong keys) Supabase Realtime Not Working? Start Here Before touching anything, add a status callback to your subscription. Half of "not working" is actually "never subscribed": // Add this to every channel while debugging — keep it in production too. channel.subscribe((status, [error]) { debugPrint('Realtime status: $status'); if (error != null) debugPrint('Realtime error: $error'); }); If the status never reaches subscribed , the problem is connection-level (Step 4). If it says subscribed but no events arrive, the problem is data-level (Steps 1–3). That single distinction cuts your debugging space in half. Also confirm the basics once: the right project URL and publishable key ( sb_publishable_... ) in Supabase.initialize , and that your Supabase project isn't…