Show HN: Send real-time updates to your mobile apps with Stac Framework

19 hours ago 1

Stac (formerly Mirai) is a powerful Server-Driven UI (SDUI) framework for Flutter, enabling you to build beautiful, cross-platform applications dynamically using JSON in real time.

Whether you’re building apps for mobile, web, or desktop, Stac simplifies UI delivery and enhances flexibility without requiring redeployment for every design change.

Developed with 💙 by Stac.

First, we need to add Stac to our pubspec.yaml file.

Now that we have successfully installed Stac, we can import Stac in main.dart.

Next, within main function initialize Stac.

You can also specify your custom Parsers in Stac.initialize and Dio instance.

Finally, replace your MaterialApp with StacApp. And call your json with Stac.fromJson(json, context).

Here is an example of a basic form screen build with Stac.

{ "type": "scaffold", "appBar": { "type": "appBar", "title": { "type": "text", "data": "Text Field", "style": { "color": "#ffffff", "fontSize": 21 } }, "backgroundColor": "#4D00E9" }, "backgroundColor": "#ffffff", "body": { "type": "singleChildScrollView", "child": { "type": "container", "padding": { "left": 12, "right": 12, "top": 12, "bottom": 12 }, "child": { "type": "column", "mainAxisAlignment": "center", "crossAxisAlignment": "center", "children": [ { "type": "sizedBox", "height": 24 }, { "type": "textField", "maxLines": 1, "keyboardType": "text", "textInputAction": "done", "textAlign": "start", "textCapitalization": "none", "textDirection": "ltr", "textAlignVertical": "top", "obscureText": false, "cursorColor": "#FC3F1B", "style": { "color": "#000000" }, "decoration": { "hintText": "What do people call you?", "filled": true, "icon": { "type": "icon", "iconType": "cupertino", "icon": "person_solid", "size": 24 }, "hintStyle": { "color": "#797979" }, "labelText": "Name*", "fillColor": "#F2F2F2" }, "readOnly": false, "enabled": true }, { "type": "sizedBox", "height": 24 }, { "type": "textField", "maxLines": 1, "keyboardType": "text", "textInputAction": "done", "textAlign": "start", "textCapitalization": "none", "textDirection": "ltr", "textAlignVertical": "top", "obscureText": false, "cursorColor": "#FC3F1B", "style": { "color": "#000000" }, "decoration": { "hintText": "Where can we reach you?", "filled": true, "icon": { "type": "icon", "iconType": "cupertino", "icon": "phone_solid", "size": 24 }, "hintStyle": { "color": "#797979" }, "labelText": "Phone number*", "fillColor": "#F2F2F2" }, "readOnly": false, "enabled": true }, { "type": "sizedBox", "height": 24 }, { "type": "textField", "maxLines": 1, "keyboardType": "text", "textInputAction": "done", "textAlign": "start", "textCapitalization": "none", "textDirection": "ltr", "textAlignVertical": "top", "obscureText": false, "cursorColor": "#FC3F1B", "style": { "color": "#000000" }, "decoration": { "hintText": "Your email address", "filled": true, "icon": { "type": "icon", "iconType": "material", "icon": "email", "size": 24 }, "hintStyle": { "color": "#797979" }, "labelText": "Email", "fillColor": "#F2F2F2" }, "readOnly": false, "enabled": true }, { "type": "sizedBox", "height": 24 }, { "type": "sizedBox", "height": 100, "child": { "type": "textField", "expands": true, "cursorColor": "#FC3F1B", "style": { "color": "#000000" }, "decoration": { "filled": true, "hintStyle": { "color": "#797979" }, "labelText": "Life story", "fillColor": "#F2F2F2" }, "readOnly": false, "enabled": true } }, { "type": "sizedBox", "height": 24 }, { "type": "textField", "maxLines": 1, "keyboardType": "text", "textInputAction": "done", "textAlign": "start", "textCapitalization": "none", "textDirection": "ltr", "textAlignVertical": "top", "obscureText": true, "cursorColor": "#FC3F1B", "style": { "color": "#000000" }, "decoration": { "filled": true, "suffixIcon": { "type": "icon", "iconType": "cupertino", "icon": "eye", "size": 24 }, "hintStyle": { "color": "#797979" }, "labelText": "Password*", "fillColor": "#F2F2F2" }, "readOnly": false, "enabled": true }, { "type": "sizedBox", "height": 24 }, { "type": "textField", "maxLines": 1, "keyboardType": "text", "textInputAction": "done", "textAlign": "start", "textCapitalization": "none", "textDirection": "ltr", "textAlignVertical": "top", "obscureText": true, "cursorColor": "#FC3F1B", "style": { "color": "#000000" }, "decoration": { "filled": true, "suffixIcon": { "type": "icon", "iconType": "cupertino", "icon": "eye", "size": 24 }, "hintStyle": { "color": "#797979" }, "labelText": "Re-type password*", "fillColor": "#F2F2F2" }, "readOnly": false, "enabled": true }, { "type": "sizedBox", "height": 48 }, { "type": "elevatedButton", "child": { "type": "text", "data": "Submit" }, "style": { "backgroundColor": "#4D00E9", "padding": { "top": 8, "left": 12, "right": 12, "bottom": 8 } }, "onPressed": {} } ] } } } }

That's it with just few lines of code your SDUI app is up and running.

Read Entire Article