Flutter JSON动态UI生成插件json_dynamic_widget_generator的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter JSON动态UI生成插件json_dynamic_widget_generator的使用

特性

  • 生成构建器
  • 处理子元素参数(child/children)
  • 支持传递key参数
  • 定义自定义构建器名称
  • 序列化Material主题类

开始使用

pubspec.yaml文件中添加以下依赖项:

dependencies:
  json_dynamic_widget_annotation: ^0.0.1

dev_dependencies:
  json_dynamic_widget_generator: ^0.0.1
  
  build_runner: ^2.0.0

运行以下命令以安装依赖:

flutter pub get

使用方法

  1. 在需要生成动态UI的Widget上添加@JsonDynamicWidgetAnnotation()注解,并生成对应的.g.dart.json_component.dart文件。

以下是示例代码:

import 'package:flutter_widget_from_html/flutter_widget_from_html.dart' as _html;
// 导入注解库
import 'package:json_dynamic_widget_annotation/json_dynamic_widget_annotation.dart';

part 'html_widget.g.dart';       // 自动生成的构建器文件
part 'html_widget.json_component.dart'; // 自动生成的JSON组件文件

// 使用注解标记该Widget可以被动态生成
@JsonDynamicWidgetAnnotation()
class HtmlWidget extends StatelessWidget {
  const HtmlWidget(this.html, {Key? key}) : super(key: key);

  final String html;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return _html.HtmlWidget(html); // 使用HtmlWidget显示HTML内容
  }
}

// 注册生成的构建器
HtmlWidgetBuilder.register(JsonWidgetRegistry.instance);
  1. 运行build_runner生成构建器文件:
flutter pub run build_runner build

示例代码

以下是一个完整的示例代码,展示了如何使用json_dynamic_widget_generator生成动态UI。

import 'package:example/test_widget.dart';
import 'package:flutter/material.dart';
import 'package:json_dynamic_widget/json_dynamic_widget.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  void initState() {
    super.initState();

    // 注册自定义构建器
    SomeTextWidgetBuilder.register();
    WRChildBuilder.register();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: const JsonWidget(
        json: {
          'type': 'w_r_child', // 动态UI类型
          'args': {'color': '#00ff00'}, // 参数
          'child': {
            'type': 'center', // 子元素类型
            'child': {
              'type': 'some_text_widget', // 自定义Widget类型
              'args': {
                'html': 'someHtml', // HTML内容
                'color': '#ff0000', // 颜色参数
              },
            },
          },
        },
      ),
    );
  }
}

class JsonWidget extends StatefulWidget {
  const JsonWidget({Key? key, required this.json}) : super(key: key);

  final Map<String, dynamic> json;

  [@override](/user/override)
  State<JsonWidget> createState() => _JsonWidgetState();
}

class _JsonWidgetState extends State<JsonWidget> {
  late final JsonWidgetData _data;

  [@override](/user/override)
  void initState() {
    super.initState();
    _data = JsonWidgetData.fromDynamic(widget.json)!;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return _data.build(context: context); // 构建动态UI
  }
}

更多关于Flutter JSON动态UI生成插件json_dynamic_widget_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter JSON动态UI生成插件json_dynamic_widget_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


json_dynamic_widget_generator 是一个用于在 Flutter 中根据 JSON 数据动态生成 UI 的插件。它允许你通过 JSON 配置文件来定义 UI 组件,并在运行时动态生成这些组件。这对于需要动态加载 UI 的场景非常有用,例如从服务器获取 UI 配置并渲染。

安装

首先,你需要在 pubspec.yaml 文件中添加 json_dynamic_widgetjson_dynamic_widget_generator 依赖:

dependencies:
  flutter:
    sdk: flutter
  json_dynamic_widget: ^latest_version

dev_dependencies:
  build_runner: ^latest_version
  json_dynamic_widget_generator: ^latest_version

然后运行 flutter pub get 来安装依赖。

使用步骤

  1. 定义 JSON 配置文件

    你可以创建一个 JSON 文件来定义 UI 组件。例如,ui_config.json

    {
      "type": "Column",
      "children": [
        {
          "type": "Text",
          "data": "Hello, World!"
        },
        {
          "type": "ElevatedButton",
          "onPressed": {
            "type": "navigate",
            "routeName": "/details"
          },
          "child": {
            "type": "Text",
            "data": "Go to Details"
          }
        }
      ]
    }
  2. 生成代码

    使用 json_dynamic_widget_generator 来生成代码。首先,创建一个 Dart 文件,例如 ui_config.dart,并添加以下内容:

    import 'package:json_dynamic_widget/json_dynamic_widget.dart';
    
    part 'ui_config.g.dart';
    
    [@JsonWidget](/user/JsonWidget)()
    final dynamic uiConfig = _$_uiConfig;

    然后运行以下命令来生成代码:

    flutter pub run build_runner build

    这将生成 ui_config.g.dart 文件,其中包含从 JSON 配置生成的代码。

  3. 在 Flutter 应用中使用生成的代码

    你可以在 Flutter 应用中使用生成的代码来动态生成 UI。例如:

    import 'package:flutter/material.dart';
    import 'ui_config.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: JsonWidgetData.fromDynamic(uiConfig).build(context),
          ),
        );
      }
    }
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!