dynamic_ui_engine 1.0.1 copy "dynamic_ui_engine: ^1.0.1" to clipboard
dynamic_ui_engine: ^1.0.1 copied to clipboard

A JSON-driven dynamic UI engine for Flutter that enables server-driven UI, navigation, and API workflows at runtime.

Dynamic UI Engine for Flutter #

A JSON-driven dynamic UI engine for Flutter that enables server-driven UI, navigation, and API workflows at runtime.

Features #

  • Render Flutter widgets from JSON
  • Server-driven UI
  • Navigation & routing support
  • Sequential & parallel API calls
  • State-management agnostic core
  • Optional adapters (GetX, Bloc, Riverpod)

Installation #

dependencies:
  dynamic_ui_engine: ^1.0.0

Basic Usage #

import 'package:dynamic_ui_engine/dynamic_ui_engine.dart';

// Build UI from JSON. Provide your own ActionHandler for navigation and API.
final widget = DynamicWidgetBuilder.build(
  jsonConfig,
  actionHandler: MyActionHandler(),
  bindingContext: {'user': {'name': 'Alice'}},
);

JSON Example #

Simple column with text and button:

{
  "type": "column",
  "children": [
    { "type": "text", "data": { "value": "Hello" } },
    { "type": "button", "data": { "label": "Next" } }
  ]
}

With schema version and ui wrapper:

{
  "schemaVersion": "1.0",
  "ui": {
    "type": "column",
    "children": [
      { "type": "text", "data": { "value": "Welcome {{user.name}}" } },
      {
        "type": "button",
        "data": {
          "label": "Submit",
          "onClick": {
            "type": "action_group",
            "execution": "sequential",
            "actions": [
              { "type": "api_call", "method": "POST", "url": "/login", "bindTo": "user" },
              { "type": "navigate", "route": "/home" }
            ]
          }
        }
      }
    ]
  }
}

State Management #

The core package is state-management agnostic. Implement [ActionHandler] for navigation and API calls. Optional adapter packages:

  • dynamic_ui_getx
  • dynamic_ui_bloc
  • dynamic_ui_riverpod

Error Handling #

  • Unknown widget types: Rendered as a placeholder ("Unknown widget: type") so existing JSON does not break when new types are added.
  • JSON validation: The parser fails fast with a clear [JsonParserException] when required fields (e.g. type) are missing or invalid.
  • API failures: The engine only invokes [ActionHandler.handle]. Retry, stop, or ignore behaviour is the responsibility of your handler.

Security #

  • No dynamic code execution: JSON config never executes code; only declared action types (navigate, api_call, action_group) are run.
  • API allow-listing: Your [ActionHandler] should allow-list base URLs and validate payload size before performing API calls.
  • Payload size: Consider validating JSON size before parsing to avoid excessive memory use.

Versioning #

  • Payloads may include schemaVersion (e.g. "1.0"). Unsupported versions throw at parse time.
  • Backward compatibility is guaranteed within the same major version of the package.

Roadmap #

  • Forms (TextField, Dropdown)
  • Conditional UI
  • Animations

License #

MIT

0
likes
150
points
31
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

A JSON-driven dynamic UI engine for Flutter that enables server-driven UI, navigation, and API workflows at runtime.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on dynamic_ui_engine