Implement a new Flet extension/control that wraps a third-party Flutter package end-to-end, including dependency selection, version pinning, compatibility checks, Python/Flutter integration, docs, examples, tests, and CI updates. Use when adding any flet_* package backed by an external pub.dev package.
Implement a Flet extension around an external Flutter package using existing flet_* packages as implementation templates.
flet_<extension>).LayoutControl for visual controls that participate in page/layout positioning.Control for simple visual controls that do not require page positioning or define their own positioning rules/props (for example Draggable, Divider, MenuBar, NavigationRail).sdk/python/packages/flet-audio, sdk/python/packages/flet-flashlight, sdk/python/packages/flet-secure-storage.LayoutControl, base Control, or Service base class according to classification.parseEnum() for enums.widget.control.getBool()/getDouble()/... accessors.parseSomething() helpers.utils/<control>.dart; shared helpers in utils/<topic>.dart.parse-prefixed helper names when converting input to Flutter structures.Properties with default values on the Python side are not sent to Flutter when unchanged from the default. Every Dart property read must provide the same default as its Python counterpart:
control.getDouble("size", 100.0)! when Python has size: float = 100.0control.getBool("animate", true)! when Python has animate: bool = TrueparseDuration(value["dur"], const Duration(milliseconds: 500))! when Python has dur: DurationValue = field(default_factory=lambda: Duration(milliseconds=500))control.get<List>("items")?.map(...).toList() ?? const [] when Python has items: list[str] = field(default_factory=list)Without matching defaults, Dart receives null and either crashes or silently uses the wrong value. This applies to all property types: bools, numbers, strings, enums, durations, collections, and nested @ft.value types.
sdk/python/pyproject.toml.sdk/python/packages/flet/pyproject.toml.sdk/python/examples/apps/flet_build_test/pyproject.toml..github/workflows/ci.yml in both places:
build_flet_extensions -> PACKAGES list.py_publish -> for pkg in ... publish loop..gitignore to Flutter extension project if missing.website/docs/controls/<name> for controls and website/docs/services/<name> for services.website/sidebars.yml navigation.codeeditor.md, not code_editor.md).sdk/python/examples in the appropriate category for control vs service.packages/flet/integration_tests in the appropriate category for control vs service.