Swappable inline YAML editor for F∆I Studio flows.
Find a file
flemming-it 7655e0dc32 fix: use fullText setter — content from previous file no longer leaks
Stefan reported that opening a flow (hello) sometimes showed
content from a different flow (extract-with-approval). Cause:
flutter_code_editor's CodeController distinguishes between
`text` (the visible buffer, post-fold) and `fullText` (the
underlying source). Setting `_code.text = newFile` only
updates the visible buffer; the underlying `_code` data
structure retains the previous file's source, so subsequent
folding/scrolling can surface its content.

Switch all three load sites + the save site to the canonical
setter:

  Before  _code.text = text       (visible buffer only)
  After   _code.fullText = text   (replaces underlying source)

Save also moves to writing `_code.fullText` so any text the
operator collapsed behind a fold survives the round-trip.

Verified against flutter_code_editor 0.3.5 source — the
fullText setter calls `_updateCodeIfChanged` then re-emits
`TextEditingValue(text: _code.visibleText)`, which is the
documented "fully reset the editor" path.

Bump version 0.1.1 → 0.1.2. Studio's pubspec already pins
`ref: main` so the next `flutter pub upgrade` picks it up.

Signed-off-by: flemming-it <sf@flemming.it>
2026-05-30 16:07:44 +02:00
lib fix: use fullText setter — content from previous file no longer leaks 2026-05-30 16:07:44 +02:00
.gitignore feat: initial scaffold — swappable flow editor 2026-05-30 14:33:03 +02:00
pubspec.yaml fix: use fullText setter — content from previous file no longer leaks 2026-05-30 16:07:44 +02:00
README.md feat: initial scaffold — swappable flow editor 2026-05-30 14:33:03 +02:00

fai_studio_flow_editor

Swappable inline YAML editor for F∆I Studio flows.

Public surface

import 'package:fai_studio_flow_editor/fai_studio_flow_editor.dart';

// Studio embeds the page as one of its destinations:
FlowEditorPage(
  initialFlowName: 'hello',                       // optional
  locale: FlowEditorLocale.de,                    // or .en
  onRun: (name) =>                                // optional callback
      HubService.instance.runSavedFlow(name: name),
)
  • initialFlowName — when set, the page loads that flow from ~/.fai/data/flows/<name>.yaml on first build. Used by Studio's Flows-page pencil → editor route push.
  • locale — picks EN or DE for the editor's internal string table. Studio passes its active locale through.
  • onRun — async callback that runs the named flow against the host hub and returns the typed outputs map. When null, the Run button is disabled (e.g. when the editor is embedded in a context without hub access).

Behaviour

  • File browser (left, 240 px) lists *.yaml in ~/.fai/data/flows/.
  • Code field (right) ships YAML syntax highlighting via flutter_code_editor + the highlight package's yaml grammar.
  • Save writes directly to disk via dart:io; the hub picks up the change on its next ListFlows / RunSavedFlow call.
  • Cmd+S / Ctrl+S — save. Cmd+Enter / Ctrl+Enter — run.

Swap it

Studio depends on this package via pubspec.yaml git reference:

dependencies:
  fai_studio_flow_editor:
    git:
      url: https://git.flemming.ai/fai/studio-flow-editor
      ref: main

To use a different editor:

  1. Fork this repo (or write your own from scratch).
  2. Keep the FlowEditorPage constructor signature (initialFlowName, locale, onRun) — that's the stable host contract.
  3. Point Studio's pubspec at your fork (or local-path during development):
    fai_studio_flow_editor:
      git:
        url: https://your-host/your/flow-editor
        ref: main
    
  4. Rebuild Studio. Done.

The contract is intentionally minimal: a single page widget with three parameters. The package brings its own tokens, its own empty/error widgets, its own l10n table, so the host doesn't have to share internals. The trade-off is visual drift if Studio's design tokens change — that's the deal you accept for a swappable module.

Develop

flutter pub get
flutter analyze
flutter test

The package's own widget tests live in test/. End-to-end tests against a live hub stay in the host repo (Studio).

License

Apache-2.0. Same as the rest of the F∆I platform.