Stel je Supabase-backend in

Maak een Supabase-project aan. Voor een takenapp:

CREATE TABLE tasks (
  id bigserial PRIMARY KEY,
  title text NOT NULL,
  completed boolean DEFAULT false,
  user_id uuid REFERENCES auth.users(id),
  created_at timestamptz DEFAULT now()
);
ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;
CREATE POLICY "user owns tasks" ON tasks
  FOR ALL USING (auth.uid() = user_id);

Kopieer je Supabase project-URL en anon key, je hebt ze nodig in FlutterFlow.

Verbind FlutterFlow met Supabase

In FlutterFlow, ga naar Settings → Supabase. Plak je Supabase-URL en anon-sleutel. FlutterFlow authenticeert en toont je databaseschema.

Je ziet je tasks-tabel weergegeven met alle kolommen. FlutterFlow genereert automatisch getypeerde query-builders voor elke tabel, geen SQL nodig in de frontend.

Bouw authenticatie

Gebruik FlutterFlow's Supabase Auth-acties voor inloggen en registreren. Maak:
1. Een inlogpagina met e-mail/wachtwoordvelden en een "Inloggen"-knop
2. Een registratiepagina met e-mail, wachtwoord en wachtwoord bevestigen
3. Koppel de knop-OnTap-acties aan "Log In with Email" en "Create Account with Email" (beide Supabase auth-acties)

Stel "Initial Page"-logica in: als gebruiker geauthenticeerd is → Startpagina, anders → Inlogpagina.

FlutterFlow-authenticatie met Supabase: verder dan e-mail/wachtwoord

E-mail- en wachtwoordauthenticatie dekt de meeste use cases, maar FlutterFlow ondersteunt de volledige set Supabase auth-providers. Magic link-authenticatie (wachtwoordloze e-mail) is met één tik te configureren en verbetert de mobiele conversie aanzienlijk, gebruikers hoeven geen wachtwoorden te onthouden. OAuth-providers (Google, Apple, GitHub) worden ondersteund via Supabase en zijn essentieel voor elke consumentgerichte mobiele app: Apple Sign-In is verplicht volgens de App Store-richtlijnen als je een andere sociale auth-optie aanbiedt.

Telefoon/OTP-authenticatie via Supabase gebruikt Twilio onder de motorkap. Voeg in FlutterFlow de actie "Send OTP" toe aan je telefoonnummer-invoerscherm en "Verify OTP" aan je code-invoerscherm. Supabase beheert de Twilio-credentials in je dashboard, geen code nodig.

Eén cruciaal detail: om Supabase-auth correct te laten werken in een gepubliceerde FlutterFlow-app, moet je het URL-schema van je app whitelisten in Supabase onder Authentication → URL Configuration. Voor iOS-apps ziet dit er zo uit: com.yourcompany.yourapp://login-callback. Sla je deze stap over, dan mislukken OAuth-redirects stilzwijgend na indiening bij de App Store, een veelvoorkomende valkuil bij eerste FlutterFlow + Supabase-implementaties.

Bouw het takenlijstscherm

Maak een ListView-component. Stel de databron in op je Supabase tasks-tabel. Voeg een filter toe: user_id = currentAuthUser.uid (FlutterFlow vult dit automatisch in).

Voor elk lijstitem: toon de taaktitel, een checkbox voor de completed-status en een verwijderknop. Koppel de checkbox aan een Supabase UPDATE-actie (update completed = true/false). Koppel de verwijderknop aan een Supabase DELETE-actie.

Voeg realtime-subscriptions toe

In FlutterFlow's Supabase-instellingen, activeer Realtime voor de tasks-tabel. In je takenlijstcomponent, activeer "Realtime" op de databron.

Wanneer een taak nu wordt toegevoegd, bijgewerkt of verwijderd (vanaf elk apparaat), wordt je lijst automatisch vernieuwd, geen handmatige polling nodig.

Realtime data in FlutterFlow: architectuur en limieten

FlutterFlow's Supabase Realtime-integratie gebruikt PostgreSQL's logical replication. Wanneer je Realtime inschakelt voor een tabel in Supabase, worden wijzigingen via een websocket uitgezonden naar alle verbonden clients. FlutterFlow beheert de levenscyclus van de subscription automatisch: subscriben bij het mounten van de widget, unsubscriben bij het verwijderen ervan, wat de memory leaks en dubbele-subscription-problemen voorkomt die vaak voorkomen in handgeschreven Flutter-apps.

De praktische limiet: Supabase Realtime op de gratis tier staat 200 gelijktijdige verbindingen toe. Het Pro-plan verhoogt dit naar 500. Voor een mobiele app met 1.000 actieve gebruikers maar laag gelijktijdig gebruik (typisch voor B2B-tools) is dit voldoende. Voor consumentenapps met hoge gelijktijdigheid plan je met Supabase Pro en monitor je de connections-metriek in het Supabase-dashboard.

Realtime in FlutterFlow werkt ook voor presence-functies, waarmee je laat zien welke gebruikers momenteel online zijn. Implementeer dit via Supabase's presence channel API. Dit is iets ingewikkelder dan tabel-subscriptions en vereist momenteel custom action-code in FlutterFlow, maar het opent samenwerkingsfuncties zoals "Gebruiker X bekijkt dit record" zonder extra backend-infrastructuur.

Pushmeldingen instellen

Pushmeldingen in FlutterFlow-apps vereisen Firebase Cloud Messaging (FCM) voor zowel iOS als Android. Zelfs voor iOS, waar Apple Push Notification Service (APNS) de onderliggende transportlaag is, routeert FlutterFlow via FCM voor consistentie tussen platforms.

Installatiestappen: maak een Firebase-project aan, download de bestanden google-services.json (Android) en GoogleService-Info.plist (iOS), en upload beide in FlutterFlow onder Settings → Firebase. Schakel Cloud Messaging in via de Firebase Console. Voeg in je Supabase-database een device_tokens-tabel toe om FCM-tokens per gebruiker op te slaan, je schrijft het token naar Supabase bij het opstarten van de app met een FlutterFlow custom action.

Om een melding te versturen, roep je de FCM HTTP v1 API aan vanuit een Make- of n8n-workflow die wordt getriggerd door een Supabase-webhook. Bijvoorbeeld: een nieuw bericht in een chatapp triggert een Supabase-webhook → Make-scenario → FCM API-aanroep → melding afgeleverd op het apparaat van de ontvanger. Dit patroon dekt 95% van de meldingsvereisten zonder server-side code. Voor pushmeldingen met een hoog volume (10.000+ per dag) stap je over naar een specialistische dienst zoals OneSignal, die native Supabase-integratie en een FlutterFlow-plugin heeft.

Overwegingen voor offline modus

Volledige offline modus in FlutterFlow (lokaal cachen van data en synchroniseren zodra de connectiviteit terugkeert) vereist custom code en is niet standaard beschikbaar. Wat FlutterFlow wel native ondersteunt, is graceful degradation: een "geen verbinding"-status tonen via de ConnectivityStatus-widget en acties blokkeren die netwerktoegang vereisen. Voor de meeste B2B mobiele tools (fieldservice-apps, inspectiechecklists, bezorgapps) is basale offline-bewustwording voldoende.

Voor echte offline-first-functionaliteit, waarbij gebruikers records kunnen aanmaken en bewerken zonder connectiviteit en wijzigingen automatisch synchroniseren, moet je een lokale persistence-laag integreren. De aanbevolen aanpak: gebruik Supabase's Edge Functions om een REST-endpoint bloot te leggen dat je app opvraagt bij herverbinding, gecombineerd met FlutterFlow's lokale state management om mutaties in de wachtrij te zetten. Dit vereist custom Dart-code (FlutterFlow's custom widget/action-functie), maar is haalbaar zonder een volwaardige Flutter-developer.

Een eenvoudiger alternatief: baken de offline-vereisten van je app zorgvuldig af tijdens het ontwerp. De meeste enterprise mobiele apps hebben maar een kleine set écht kritieke offline-functies (mijn toegewezen taken bekijken, een item als voltooid markeren) die geïmplementeerd kunnen worden met FlutterFlow's app state-variabelen en een sync-on-open-patroon, zonder een volledige offline-engine te bouwen.

Publiceer naar App Store en Google Play

Ga in FlutterFlow naar Run → Build → iOS en Android.

Voor iOS: je hebt een Apple Developer-account nodig ($99/jaar). FlutterFlow genereert het .ipa-bestand. Dien in via Xcode of Transporter.

Voor Android: FlutterFlow genereert een ondertekend .aab-bestand. Dien in via de Google Play Console.

De eerste indiening duurt 1-3 dagen voor beoordeling. Updates worden meestal binnen 24 uur beoordeeld.

App Store-indiening met FlutterFlow: wat je kunt verwachten

FlutterFlow's buildsysteem genereert een standaard Flutter-project en compileert dit via hun cloud build-infrastructuur. Bij een eerste App Store-indiening controleert Apple's reviewteam je app op naleving van hun Human Interface Guidelines, dataprivacyvereisten en App Store Review Guidelines. Veelvoorkomende afwijzingsredenen voor met FlutterFlow gebouwde apps: ontbrekende privacybeleid-URL (verplicht, zelfs voor gratis apps), onvolledige app-metadata (screenshots in de verkeerde afmetingen, Apple vereist specifieke formaten voor verschillende apparaatklassen), en onvoldoende beschrijving van hoe gebruikersdata wordt verwerkt in het privacy nutrition label.

Wees voor het privacy nutrition label specifiek over Supabase's dataverzameling. Als je e-mailadressen en gebruiksdata verzamelt, verklaar dit in de data use-sectie van App Store Connect. Supabase's auth-systeem verzamelt standaard apparaatmetadata, vermeld dit. App Store-review duurt doorgaans 24-48 uur voor updates. De eerste indiening voor een nieuwe app duurt 1-5 dagen en kan een reviewgesprek omvatten voor apps in gereguleerde categorieën (gezondheid, financiën, kinderen).

Google Play-review is over het algemeen sneller (4-24 uur) en minder streng op visuele ontwerpvereisten, maar handhaaft data safety-verklaringen even strikt. Gebruik de FlutterFlow TestFlight/interne testdistributie om je app te valideren vóór openbare indiening, dit bespaart cycli omdat je problemen kunt oplossen voordat de formele reviewklok begint te lopen.