Skip to content

Roadmap: path to the go-to Flutter chat package (audit follow-ups) #41

Description

@hooshyar

Tracking issue from a full package audit. Thesis: this package already has the features (streaming, markdown, LaTeX, RTL, agents/actions, voice, rich widgets) — the differentiator for "go-to" status is trust: every documented knob works, no leaks, deps honest, docs match code. The dominant theme across the issue history is documented parameters that silently do nothing (#40, #30, #18, #20, #9, #38, #24, #28, #3, #6).

Status (updated 2026-09-03): Everything checked below has shipped, most of it through v2.17.0 (live on pub.dev). Current state: analyze --fatal-infos clean, 434 tests green (426 package + 8 example, the latter now running in CI for the first time), pub publish --dry-run clean, confirmed 160/160 pub points. See the comment below for a detailed progress update since the last one.

✅ Phase 0 — Trust & correctness

  • Dead FileUploadOptions.fileDisplayBuilder (fileDisplayBuilder #40) — now threaded to MessageAttachment.
  • AiContextController.watchNotifier listener leak → removed on dispose; returns a disposer.
  • ContextAwareChatController disposes the sub-controllers it creates.
  • TextPainter disposal on bubble-measure & ghost-overlay hot paths.
  • SmartChatInput removes listeners on dispose.
  • Packaging: .pubignore trims internal logs/dirs/images; pubspec screenshots: (verified 494 KB archive, heavy/internal files excluded).
  • SDK floor corrected to Flutter >=3.27 / Dart >=3.6 (root cause of 报错,SDK^3.5.3;flutter_gen_ai_chat_ui: ^1.3.0 #7/Error: The method 'withValues' isn't defined for the class 'Color'. #12).
  • Deprecation shims name a v3.0.0 removal target.
  • Clean analyze on current stable (cacheExtent deprecation, unreachable switch default).

✅ Phase 0.5 — "Every parameter is wired" sweep

Phase 1 — Quality gates

  • CI version-consistency guard (pubspec ↔ README).
  • Accessibility: localizable InputOptions.sendButtonTooltip on the icon-only send button (+test).
  • Release automation: OIDC tag-triggered pub publish workflow.
  • Golden tests (bubble / welcome / streaming / code-block / RTL).
  • Broader a11y: tap-target sizing (send button <48dp) + full labeledTapTargetGuideline compliance.
  • CI SDK matrix — resolved the dev/consumer floor discrepancy (see below) and, as a bonus, the matrix's floor leg found the documented Flutter floor was ALSO wrong for two unrelated dependency reasons; corrected to >=3.35.0.

Phase 2 — Developer experience & docs

Phase 3 — Feature leadership

Phase 4 — Ecosystem

  • Provider adapters (OpenAI / Anthropic / Gemini / Ollama) as examples or sibling packages — wire a stream into ChatMessagesController in ~10 lines, keeping heavy deps out of core.

Audit + implementation generated with Claude Code.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions