Flutter表单构建插件simple_form_arm的使用

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

Flutter表单构建插件simple_form_arm的使用

安装

在您的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  simple_form_arm: ^0.0.1

一个全面的表单构建器,适用于所有需求。

此插件由 tanmoy27112000/SimpleFormBuilder 修改而来。

示例代码

以下是使用 simple_form_arm 插件的完整示例代码:

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

import 'package:simple_form_arm/form_builder.dart';
import 'package:simple_form_arm/src/shared/questionsModel.dart';
import 'package:simple_form_arm/src/shared/finalAnswers.dart';
import 'package:simple_form_arm/src/shared/constant.dart';

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

class MyApp extends StatelessWidget {
  List multipleSelected = [];
  List checkListItems = [
    {
      "id": 0,
      "value": false,
      "title": "星期日",
    },
    {
      "id": 1,
      "value": false,
      "title": "星期一",
    },
    {
      "id": 2,
      "value": false,
      "title": "星期二",
    },
    {
      "id": 3,
      "value": false,
      "title": "星期三",
    },
    {
      "id": 4,
      "value": false,
      "title": "星期四",
    },
    {
      "id": 5,
      "value": false,
      "title": "星期五",
    },
    {
      "id": 6,
      "value": false,
      "title": "星期六",
    },
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FormBuilder 示例',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Material App Bar'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              Column(
                children: List.generate(
                  checkListItems.length,
                  (index) => CheckboxListTile(
                    controlAffinity: ListTileControlAffinity.leading,
                    contentPadding: EdgeInsets.zero,
                    dense: true,
                    title: Text(
                      checkListItems[index]["title"],
                      style: const TextStyle(
                        fontSize: 16.0,
                        color: Colors.black,
                      ),
                    ),
                    value: checkListItems[index]["value"],
                    onChanged: (value) {
                      // setState(() {
                      //   checkListItems[index]["value"] = value;
                      //   if (multipleSelected.contains(checkListItems[index])) {
                      //     multipleSelected.remove(checkListItems[index]);
                      //   } else {
                      //     multipleSelected.add(checkListItems[index]);
                      //   }
                      // });
                    },
                  ),
                ),
              ),
              FormBuilder(
                initialData: sampleData,
                title: "表单标题",
                titleStyle: TextStyle(
                  fontWeight: FontWeight.bold,
                  fontSize: 30,
                ),
                description: "描述",
                widgetCrossAxisAlignment: CrossAxisAlignment.center,
                index: 0,
                showIndex: false,
                descriptionTextDecoration: TextStyle(color: Colors.red),
                submitButtonWidth: 1,
                submitButtonDecoration: BoxDecoration(
                  color: Colors.blue,
                ),
                showIcon: false,
                onSubmit: (QuestionsModel? val) {
                  if (val == null) {
                    // question();
                    print("无数据");
                  } else {
                    submit(jsonEncode(val.questions));
                  }
                },
              ),
            ],
          ),
        ),
      ),
    );
  }

  Map<String, dynamic> coordinate = {
    "省份": "Jawa Barat",
    "区县": "Bekasi",
    "街道": "Teluk",
    "详细地址": "teluk",
    "纬度": "78482738472",
    "经度": "u2i3u4i2"
  };

  submit(dynamic answer) {
    FinalCoordinate koordata = FinalCoordinate.fromJson((coordinate));
    var list = jsonDecode(answer) as List;
    List<FinalAnswers> answer2 =
        list.map((i) => FinalAnswers.fromJson(i)).toList();
    FinalAnswerModel questionsModel =
        FinalAnswerModel(answers: answer2, coordinate: koordata);
    print(questionsModel.toJson());
  }

  // question() {
  //   var json = jsonEncode(sampleData3);
  //   List<Question> question = Question.fromJson(sampleData3) as List;

  //   QuestionsModel questionsModel = QuestionsModel(questions: question);

  //   var dataq = questionsModel.toJson();

  //   // return dataq;

  //   dataSample4.addAll(dataq);

  //   // print(dataq);
  // }
}

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

1 回复

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


当然,下面是一个关于如何使用 simple_form_arm 插件来构建 Flutter 表单的示例代码。simple_form_arm 是一个用于简化表单构建的 Flutter 插件,它提供了易于使用的 API 来创建复杂的表单。

首先,确保你已经在 pubspec.yaml 文件中添加了 simple_form_arm 依赖:

dependencies:
  flutter:
    sdk: flutter
  simple_form_arm: ^最新版本号  # 请替换为实际的最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来是一个简单的 Flutter 应用示例,展示了如何使用 simple_form_arm 来创建一个表单:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Simple Form ARM Example'),
        ),
        body: SimpleFormArmExample(),
      ),
    );
  }
}

class SimpleFormArmExample extends StatefulWidget {
  @override
  _SimpleFormArmExampleState createState() => _SimpleFormArmExampleState();
}

class _SimpleFormArmExampleState extends State<SimpleFormArmExample> {
  final formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Form(
        key: formKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextFormFieldArm(
              labelText: '用户名',
              validators: [Validators.required('用户名不能为空')],
            ),
            SizedBox(height: 16.0),
            TextFormFieldArm(
              labelText: '邮箱',
              keyboardType: TextInputType.emailAddress,
              validators: [
                Validators.required('邮箱不能为空'),
                Validators.email('请输入有效的邮箱地址'),
              ],
            ),
            SizedBox(height: 16.0),
            PasswordFormFieldArm(
              labelText: '密码',
              validators: [Validators.required('密码不能为空')],
            ),
            SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: () {
                if (formKey.currentState!.validate()) {
                  // 表单验证通过,可以在这里处理提交逻辑
                  print('表单数据验证通过');
                }
              },
              child: Text('提交'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 导入必要的包

    • flutter/material.dart:Flutter 的基础 UI 库。
    • simple_form_arm/simple_form_arm.dartsimple_form_arm 插件的库。
  2. 主应用

    • MyApp 类是应用的主入口,它返回一个 MaterialApp,其中包含了一个 Scaffold,其主体是 SimpleFormArmExample 组件。
  3. 表单组件

    • SimpleFormArmExample 是一个 StatefulWidget,它维护了一个 FormGlobalKey,用于表单验证。
    • Form 子组件中包含了多个表单字段,如 TextFormFieldArmPasswordFormFieldArm,这些都是 simple_form_arm 插件提供的简化表单字段组件。
    • 每个字段都配置了标签文本和验证器。
  4. 提交按钮

    • ElevatedButton 是一个按钮,点击时会调用 formKey.currentState!.validate() 方法来验证表单字段。
    • 如果验证通过,你可以在 onPressed 回调中处理表单提交逻辑。

这个示例展示了如何使用 simple_form_arm 插件来简化 Flutter 表单的构建和验证过程。你可以根据需要进一步扩展和定制这个示例。

回到顶部