Flutter JSON转表单插件json_to_form的使用

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

Flutter JSON转表单插件json_to_form的使用

简介

json_to_form 是一个用于将 JSON 转换为表单的 Flutter 插件。通过这个插件,您可以轻松地从 JSON 数据生成动态表单。

安装

pubspec.yaml 中添加依赖

dependencies:
  json_to_form: "^0.0.1"

安装包

在命令行中运行以下命令来安装包:

$ flutter packages get

导入库

import 'package:json_to_form/json_schema.dart'; 

使用示例

基本用法

创建表单字符串

String formString = json.encode({
    'title': 'form example',
    'description': '',
    'fields': [
        {
            'key': 'inputKey',
            'type': 'Input',
            'label': 'Hi Group',
            'placeholder': "Hi Group flutter",
            'required': true
        },
        {
            'key': 'emailKey',
            'type': 'Email',
            'label': 'Email',
            'placeholder': "Enter your email",
            'required': true
        }
    ]
});

创建表单 Map

Map formMap = {
    'title': 'form example',
    'description': '',
    'fields': [
        {
            'key': 'inputKey',
            'type': 'Input',
            'label': 'Hi Group',
            'placeholder': "Hi Group flutter",
            'required': true
        },
        {
            'key': 'emailKey',
            'type': 'Email',
            'label': 'Email',
            'placeholder': "Enter your email",
            'required': true
        }
    ]
};

构建表单组件

dynamic response;

new JsonSchema(
    form: formString,
    onChanged: (dynamic response) {
        this.response = response;
    },
    actionSave: (data) {
        print(data);
    },
    buttonSave: new Container(
        height: 40.0,
        color: Colors.blueAccent,
        child: Center(
            child: Text("Login", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
        ),
    ),
)

验证和装饰

Map decorations = {
    'inputKey': InputDecoration(
      labelText: "Enter your email",
      prefixIcon: Icon(Icons.account_box),
      border: OutlineInputBorder(),
    ),
};

Map validations = {
    'inputKey': (field, value) {
        if (value.isEmpty) {
            return 'Please enter some text';
        }
        return null;
    }
};

new JsonSchema(
    decorations: decorations,
    validations: validations,
    form: formString,
    onChanged: (dynamic response) {
        this.response = response;
    },
    actionSave: (data) {
        print(data);
    },
    buttonSave: new Container(
        height: 40.0,
        color: Colors.blueAccent,
        child: Center(
            child: Text("Login", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
        ),
    ),
)

示例 Demo

以下是一个完整的示例 Demo,展示了如何使用 json_to_form 插件创建一个包含输入框、密码框、电子邮件框和多行文本框的表单。

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:json_to_form/json_schema.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.red,
      ),
      home: MyHomePage(title: 'JSON to Form Example'),
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  dynamic response;

  @override
  Widget build(BuildContext context) {
    String formString = json.encode({
      'title': 'Form Example',
      'description': '',
      'fields': [
        {
          'key': 'inputKey',
          'type': 'Input',
          'label': 'Name',
          'placeholder': "Enter your name",
          'required': true
        },
        {
          'key': 'passwordKey',
          'type': 'Password',
          'label': 'Password',
          'placeholder': "Enter your password",
          'required': true
        },
        {
          'key': 'emailKey',
          'type': 'Email',
          'label': 'Email',
          'placeholder': "Enter your email",
          'required': true
        },
        {
          'key': 'textareaKey',
          'type': 'TextArea',
          'label': 'Message',
          'placeholder': "Enter your message",
          'required': true
        }
      ]
    });

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            JsonSchema(
              form: formString,
              onChanged: (dynamic response) {
                this.response = response;
              },
              actionSave: (data) {
                print(data);
              },
              buttonSave: Container(
                height: 40.0,
                color: Colors.blueAccent,
                child: Center(
                  child: Text(
                    "Submit",
                    style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

结论

通过使用 json_to_form 插件,您可以方便地从 JSON 数据生成动态表单,并且可以自定义验证和装饰。希望这个示例能够帮助您快速上手并应用到您的项目中。如果您有任何问题或建议,请随时与社区分享!🔥 Star and Share 🔥 the repo to support the project. Thanks!


更多关于Flutter JSON转表单插件json_to_form的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter JSON转表单插件json_to_form的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用json_to_form插件将JSON数据转换为表单的示例代码。这个插件可以帮助你快速地将JSON数据映射到Flutter的表单控件上。

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

dependencies:
  flutter:
    sdk: flutter
  json_to_form: ^x.y.z  # 替换为最新版本号

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

接下来是一个完整的示例,展示如何使用json_to_form插件:

import 'package:flutter/material.dart';
import 'package:json_to_form/json_to_form.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter JSON to Form Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 示例JSON数据
  final jsonData = {
    "type": "object",
    "title": "User Info",
    "properties": {
      "name": {
        "type": "string",
        "title": "Name",
      },
      "age": {
        "type": "integer",
        "title": "Age",
      },
      "email": {
        "type": "string",
        "format": "email",
        "title": "Email",
      },
      "gender": {
        "type": "string",
        "enum": ["male", "female"],
        "title": "Gender",
        "enumNames": ["Male", "Female"],
      },
    },
    "required": ["name", "email"],
  };

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('JSON to Form Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: JsonToForm(
          jsonSchema: jsonData,
          onSubmit: (Map<String, dynamic> data) {
            // 处理表单提交
            print('Form Data: $data');
          },
        ),
      ),
    );
  }
}

在这个示例中:

  1. 依赖添加:在pubspec.yaml中添加了json_to_form依赖。
  2. JSON Schema:定义了一个示例JSON Schema,它描述了表单的结构和属性。
  3. JsonToForm Widget:使用JsonToForm widget将JSON Schema转换为Flutter表单。
  4. 表单提交:当表单提交时,onSubmit回调函数会被调用,并输出表单数据。

确保你替换了json_to_form: ^x.y.z为实际的最新版本号。

这个示例展示了如何使用json_to_form插件将JSON数据转换为Flutter表单,并处理表单提交。你可以根据需要自定义JSON Schema来适应你的表单需求。

回到顶部