Skip to content

Structured RemixDialog content needs a bounded scroll contract #89

Description

@leoafarias

Summary

The structured RemixDialog path has no bounded or scrollable body region. At 200% text scaling, ordinary settings content can overflow a constrained desktop dialog and make later content/actions unreachable.

Found while validating #80 at b16636b017f3c8832d8f27f316cc24c0ad92ce8a.

Evidence

RemixDialog documents that child composes with title, description, and actions in AlertDialog order, but the implementation places all regions in one Column(mainAxisSize: MainAxisSize.min) with no flexible/scrollable body:

dialog_widget.dart

A focused reproduction uses a 400×320 dialog, 200% text scale, a title, description, eight short environment rows, and one icon action. It produces a vertical RenderFlex overflow from the structured column. This does not rely on a single child whose explicit height is already larger than the parent.

Flutter AlertDialog under the same outer constraint avoids the overflow and also exposes an explicit scrollable contract.

Expected

Structured dialog content remains reachable in a small window or at large text sizes. Title and actions can stay visible while the body scrolls, or the public API clearly exposes another bounded composition.

Suggested direction

  • Add an optional scrollable structured path or a dedicated bounded body slot.
  • Keep title and actions outside the body scroll region where feasible.
  • Preserve the existing lone-child path as fully caller-owned layout.
  • Document how route centering/viewport insets and content scrolling divide responsibility.

Acceptance criteria

  • The 400×320, 200%-text reproduction has no render overflow.
  • Title, body, and actions remain keyboard- and semantics-reachable.
  • Large content can scroll without trapping focus or hiding the final action.
  • The custom lone-child path retains its current layout freedom.
  • Existing modal semantics, dismissal, focus restoration, and Fortal geometry tests remain green.

Scope

This is separate from route positioning. showRemixDialog may continue to use caller-owned navigation and placement; the issue is the structured content composition once bounded.

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