Skip to content

[SDK 0.0.39] Postgres/Supabase READ patterns fail validation (writes work) — Firestore equivalent works #1

Description

@DrikaMakerdev

Bug report: Postgres/Supabase READ patterns fail validation (writes work)

FlutterFlow AI SDK: first observed on 0.0.36 (build 995e259b); retested on 0.0.39
(2026-07-15): identical failure signature, still broken
· Dart: 3.12.2 ·
Project: in-sy-sti-vgys6v
Run ID (canonical repro): 2026-07-14T17-04-29-364-ugiya8 (full trace, bundle and replay
workspace in this folder)

Summary

Any DSL pattern that reads Supabase/Postgres rows into page state — and any widget bound
to that state — fails compileDslApp validation. Write actions (PostgresCreate,
PostgresUpdate, PostgresDelete) validate and push fine.
This makes it impossible to
author a list/detail screen backed by Supabase from the DSL; users must bind backend queries
manually in the editor.

Minimal repro (40 lines, archived as probe_postgres_state.dart in the bundle)

final t = app.table('probe_items', fields: { ...id + title... });

app.page('ProbePage',
  state: {'items': listOf(t), 'firstTitle': string},
  onLoad: [
    PostgresQuery(t, outputAs: 'itemRows', query: ...),
    SetState('items', ActionOutput('itemRows')),          // ← fails
    PostgresRead(t, outputAs: 'firstRow', query: ...),
    SetState('firstTitle', ActionOutput('firstRow')['title']),  // ← fails
  ],
  body: ... ListView(source: State('items'), itemBuilder: (item) => Text(item['title'])) ...  // ← fails
);

Actual errors (diagnostics from the trace)

  • VALIDATION_LOCAL_STATE_UPDATE: Field "items" has an update value that is not properly set
    in Update App State action
  • VALIDATION_GENERATOR_VARIABLE: Dynamic children variable not properly configured for ListView
  • VALIDATION_PROPERTY_OVERRIDE: Invalid postgres row field operation
  • VALIDATION_WIDGET_CLASS_CONFIGURATION: Page has invalid state variable "items": table not found
  • VALIDATION_SUPABASE_DATABASE_ACTION: Table not set for Supabase action

Evidence this is an SDK gap, not user error

  1. The pattern mirrors the SDK's own shipped reference references/postgres_compile_only_dsl.dart
    (state listOf(table) + PostgresQuery/SetState(ActionOutput) + ListView(source: State))
    — that reference is compile-only and appears to never have been validated against the server.
  2. The identical pattern works for Firestore (references/social_feed_data_dsl.dart:
    FirestoreQuerySetState(ActionOutput)ListView(source: State(...))), so the gap
    is Postgres-specific lowering of: (a) query outputs into page-state updates, (b) postgres
    row field access (ActionOutput(...)['col']), and (c) generator variables for list widgets.
  3. The same errors reproduce with real project tables (typed SDK ff.Tables.* handles) —
    the run at 2026-07-14T17:01:30Z in this project's history shows the exact same
    signature on a real page (CompaniesPage/CompanyDetailPage).
  4. Everything else in the same scripts validates: pages, forms, PostgresCreate/Update/Delete
    actions with filters, Navigate, Snackbar.

Expected

PostgresQuery/PostgresRead outputs should be assignable to page state typed as
listOf(<table>) / scalar via ActionOutput(...)[field], and ListView(source: State(...))
over postgres rows should lower to a properly configured generator variable — matching the
Firestore behavior and the shipped Postgres reference.

Impact

Web/admin CRUD screens (list + detail prefill) cannot be authored end-to-end from the DSL for
Supabase-backed projects — a core FlutterFlow + Supabase workflow. Current workaround: author
layout + write actions via DSL, then hand-bind every backend query in the editor.

postgres-read-gap.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions