- 🤪Developing....正在开发中❗️❗️❗️
FastUI 是一个通过轻量快捷的 UI构建框架。可以通过 JSON 数据构建 UI 界面,并进行一些的交互逻辑等。
- 组件:可以将 JSON 文件解析成一个Widget。可以 build 成一个 Widget。
- 装饰器:一些作用于组件,让组件添加效果的组件。它们有且只有一个 child。
- 类型转换器:用于将一些特殊类型转换为原始类型。
- 函数解析器: 用来解析 JSON 数据的函数名称,进行函数绑定操作。
- 组件解析器: 用来解析 JSON 数据中的Widget 组件,进行渲染。
- 装饰器解析器:用来解析 JSON 数据中的 装饰器(decorates),进行组件的一些效果处理。
一、渲染一个容器,里面使用文本渲染文字"张三".
更多的组件使用,参考详细文档。
class TestWidget extends StatelessWidget {
const TestWidget({super.key});
@override
Widget build(BuildContext context) {
// 数据 JSON:可以来源于网络或者本地资源
const dataJson = r"""{
"name": "张三",
}""";
// 组件 JSON:可以来源于网络或者本地资源
const widgetJson = r"""{
"type": "container",
"color": "#00ff00",
"child": {
"type": "text",
"text": "Hello,${"name"}"
}
}""";
return FastDynamicView(
data: jsonDecode(dataJson),
config: jsonDecode(widgetJson),
);
}
}二、动态数据: 以下效果实现了,通过点击文本"张三"将文本替换成了"李四"。
其中: ":name" 变量前新增了":",将转换为动态变量。所有使用到的子组件将监听它的变化而改变。 "onTap"事件调用了内置的
set函数 ,它将设置的值赋予了:name。
class TestWidget extends StatelessWidget {
const TestWidget({super.key});
@override
Widget build(BuildContext context) {
// 数据 JSON:可以来源于网络或者本地资源
const dataJson = r"""{
":name": "张三",
}""";
// 组件 JSON:可以来源于网络或者本地资源
const widgetJson = r"""{
"type": "container",
"color": "#00ff00",
"child": {
"type": "text",
"text": "Hello,${":name"}",
"decorates":[{
"type": "padding",
"padding": 20,
},{
"type": "event",
"onTap": "@{set(${:name},李四)}"
}]
}
}""";
return FastDynamicView(
data: jsonDecode(dataJson),
config: jsonDecode(widgetJson),
);
}
}
以下例子通过自定义onRefresh 函数,实现了同时更新多个变量并刷新了相关使用组件。
class TestWidget extends StatelessWidget {
const TestWidget({super.key});
@override
Widget build(BuildContext context) {
// 数据 JSON:可以来源于网络或者本地资源
const dataJson = r"""{
":name": "张三",
":padding": 20,
}""";
// 组件 JSON:可以来源于网络或者本地资源
const widgetJson = r"""{
"type": "container",
"color": "#00ff00",
"child": {
"type": "text",
"text": "Hello,${":name"}",
"decorates":[{
"type": "padding",
"padding": "${:padding}",
},{
"type": "event",
"onTap": "@{onRefresh(${:name},${:padding})}"
}]
}
}""";
return FastDynamicView(
data: jsonDecode(dataJson),
config: jsonDecode(widgetJson),
methods: {
"onRefresh": (context,List args) {
final [ValueNotifier<String> name, ValueNotifier<num> padding] = args;
return () {
name.value = "${name.value}!!";
padding.value = min(padding.value + 10, 50);
name.notifyListeners();
padding.notifyListeners();
};
}
},
);
}
}
void main() {
/// 项目启动后,添加一个自定义Widget
/// 添加后就可以使用 { "type":"test","name":"自定义参数" } 来渲染一个该组件了。
FastUI.addWidgetParser({
"test": FastConfigParserBuilder(
scheme: {
"name": FastScheme<String>()
},
builder: (context, parser, config) {
return Container(
child: Text("这是一个自定义组件:${config['name']}"),
);
},
)
});
runApp(const MyApp());
}void main() {
/// 项目启动后,添加一个自定义Widget
/// 添加后就可以使用 { "type":"onlyPC" } 来控制某个租金是否只能在 PC 上显示了。
FastUI.addDecorateParser({
//通过该装饰器,设置某些组件只在 PC 上显示
'onlyPC': FastConfigParserBuilder<FastDecorate>(
scheme: {
"width": FastScheme<num>(),
},
builder: (context, parser, config) {
final width = config["width"] ?? 720;
final show = MediaQuery
.of(context)
.size
.width > width;
return FastDecorateWidget(
(context, parser, child) => show ? child : const SizedBox());
})
});
runApp(const MyApp());
}void main() {
// 项目启动后
//添加了全局的函数,可以在任何组件内调用,无需再次设置 methods
FastUI.addMethodsParser({
"globalMethod": (context,args) {
print("调用了一个全局函数");
},
});
//添加了全局的参数,可以在任何组件内调用,无需再次设置 data
FastUI.addDataParser({
"appName": "FastUI",
});
runApp(const MyApp());
}- Container
- Text
- Row
- Column
- Stack
- Warp
- List
- Image
- Icon
- Button
- GridView
- PageView
- Divider
- TabView
- Switch
- TextFiled
- Dropdown
- RadioGroup
- CheckBox
- Slider
- RatingBar
- PinColo
- CounterButton
- Selector
- 支持通过 JSON 解析成组件。
- 支持 JSON 中支持原始数据类型转换成特定类型,如:Color、Alignment、EdgeInsets等
- 支持自定义一些类型转换器
- 支持绑定组件的装饰器,如 Padding、Align、Expand等
- 支持自定义组件的装饰器
- 支持事件、函数列表 的绑定
- 支持自定义事件周期
- 支持绑定参数池,根据状态池刷新组件
- JSON 解析失败的各种异常处理,目前未处理 10.[ ] JSON 编写时的代码提示工具 11.[ ] ...
- 解析项目配置生产组件列表
- 拖拽组件生成配置文件
- 设置面板设置组件属性
- 页面管理器
- 组件管理器
- API管理器
- 事件管理器