Flutter表单构建组件插件flutter_form_builder_components的使用

组件 #

一个全面的Flutter表单构建小部件库,旨在简化和加快Flutter应用程序中表单的开发。

特性 #

  • 易于使用的表单构建小部件
  • 可自定义的表单字段
  • 内置验证
  • 支持各种输入类型
  • 与现有的Flutter表单库集成

开始使用 #

要开始使用components包,请将其添加到您的pubspec.yaml文件中:

dependencies:
  components: ^0.0.1

完整示例Demo

以下是一个完整的示例,展示了如何使用flutter_form_builder_components来创建一个简单的登录表单。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Form Builder Components Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: LoginForm(),
        ),
      ),
    );
  }
}

class LoginForm extends StatefulWidget {
  @override
  _LoginFormState createState() => _LoginFormState();
}

class _LoginFormState extends State<LoginForm> {
  final GlobalKey<FormBuilderState> _fbKey = GlobalKey<FormBuilderState>();

  @override
  Widget build(BuildContext context) {
    return FormBuilder(
      key: _fbKey,
      child: Column(
        children: [
          FormBuilderTextField(
            name: 'email',
            decoration: InputDecoration(labelText: 'Email'),
            validator: FormBuilderValidators.compose([
              FormBuilderValidators.email(context),
              FormBuilderValidators.required(context),
            ]),
          ),
          SizedBox(height: 20),
          FormBuilderTextField(
            name: 'password',
            decoration: InputDecoration(labelText: 'Password'),
            obscureText: true,
            validator: FormBuilderValidators.compose([
              FormBuilderValidators.required(context),
            ]),
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () {
              if (_fbKey.currentState.saveAndValidate()) {
                print(_fbKey.currentState.value);
              } else {
                print('Validation failed');
              }
            },
            child: Text('Login'),
          )
        ],
      ),
    );
  }
}

代码解释

  1. 导入必要的包

    import 'package:flutter/material.dart';
    import 'package:flutter_form_builder/flutter_form_builder.dart';
    
  2. 定义主应用类

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Flutter Form Builder Components Demo'),
            ),
            body: Padding(
              padding: const EdgeInsets.all(16.0),
              child: LoginForm(),
            ),
          ),
        );
      }
    }
    
  3. 定义登录表单类

    class LoginForm extends StatefulWidget {
      @override
      _LoginFormState createState() => _LoginFormState();
    }
    
  4. 定义登录表单状态类

    class _LoginFormState extends State<LoginForm> {
      final GlobalKey<FormBuilderState> _fbKey = GlobalKey<FormBuilderState>();
    
      @override
      Widget build(BuildContext context) {
        return FormBuilder(
          key: _fbKey,
          child: Column(
            children: [
              // 邮箱输入框
              FormBuilderTextField(
                name: 'email',
                decoration: InputDecoration(labelText: 'Email'),
                validator: FormBuilderValidators.compose([
                  FormBuilderValidators.email(context),
                  FormBuilderValidators.required(context),
                ]),
              ),
              SizedBox(height: 20),
              // 密码输入框
              FormBuilderTextField(
                name: 'password',
                decoration: InputDecoration(labelText: 'Password'),
                obscureText: true,
                validator: FormBuilderValidators.compose([
                  FormBuilderValidators.required(context),
                ]),
              ),
              SizedBox(height: 20),
              // 登录按钮
              ElevatedButton(
                onPressed: () {
                  if (_fbKey.currentState.saveAndValidate()) {
                    print(_fbKey.currentState.value);
                  } else {
                    print('Validation failed');
                  }
                },
                child: Text('Login'),
              )
            ],
          ),
        );
      }
    }
    

通过以上步骤,您可以轻松地在Flutter应用中使用flutter_form_builder_components来创建和管理表单。


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

1 回复

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


flutter_form_builder_components 是一个 Flutter 插件,它提供了一系列预构建的表单组件,帮助开发者快速构建复杂的表单。这些组件通常与 flutter_form_builder 插件一起使用,flutter_form_builder 是一个强大的表单管理库,支持验证、动态表单等功能。

以下是如何使用 flutter_form_builder_components 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_form_builder: ^7.0.0  # 请确保使用最新版本
  flutter_form_builder_components: ^1.0.0  # 请确保使用最新版本

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

2. 导入包

在你的 Dart 文件中导入所需的包:

import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:flutter_form_builder_components/flutter_form_builder_components.dart';

3. 使用表单组件

你可以使用 flutter_form_builder_components 提供的各种表单组件来构建表单。以下是一个简单的例子,展示了如何使用 FormBuilderflutter_form_builder_components 中的一些组件:

import 'package:flutter/material.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:flutter_form_builder_components/flutter_form_builder_components.dart';

class MyForm extends StatelessWidget {
  final _formKey = GlobalKey<FormBuilderState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Form Builder Components Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: FormBuilder(
          key: _formKey,
          child: Column(
            children: <Widget>[
              FormBuilderTextField(
                name: 'name',
                decoration: InputDecoration(labelText: 'Name'),
                validator: FormBuilderValidators.compose([
                  FormBuilderValidators.required(context),
                ]),
              ),
              SizedBox(height: 20),
              FormBuilderDropdown(
                name: 'gender',
                decoration: InputDecoration(labelText: 'Gender'),
                items: ['Male', 'Female', 'Other']
                    .map((gender) => DropdownMenuItem(
                          value: gender,
                          child: Text(gender),
                        ))
                    .toList(),
              ),
              SizedBox(height: 20),
              FormBuilderCheckbox(
                name: 'agree',
                title: Text('I agree to the terms and conditions'),
                validator: FormBuilderValidators.compose([
                  FormBuilderValidators.requiredTrue(context),
                ]),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.saveAndValidate()) {
                    print(_formKey.currentState!.value);
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: MyForm(),
));

4. 表单验证

flutter_form_builder 提供了内置的验证器,你可以使用 FormBuilderValidators 来添加验证规则。例如:

FormBuilderTextField(
  name: 'email',
  decoration: InputDecoration(labelText: 'Email'),
  validator: FormBuilderValidators.compose([
    FormBuilderValidators.required(context),
    FormBuilderValidators.email(context),
  ]),
),

5. 获取表单数据

你可以通过 _formKey.currentState!.value 来获取表单的数据。例如:

ElevatedButton(
  onPressed: () {
    if (_formKey.currentState!.saveAndValidate()) {
      print(_formKey.currentState!.value);
    }
  },
  child: Text('Submit'),
),
回到顶部