Flutter表单输入字段插件ffr_form_input_field的使用

ffr_form_input_field 是一个基于 Flutter 开发的表单输入字段插件。该插件的源代码完全由 Dart 编写,并且所有必要的文件都位于 /lib 文件夹中。

安装

pubspec.yaml 文件的 dependencies: 部分添加以下行:

ffr_form_input_field: <latest_version>

然后在项目中导入该插件:

import 'package:ffr_form_input_field/ffr_form_input_field.dart';

基本用法

以下是一个完整的示例,展示了如何使用 ffr_form_input_field 插件来创建一个表单输入字段。

示例代码

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

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

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
  final _formKey = GlobalKey<FormState>();
  final _testKey = GlobalKey<FormFieldState<String>>();
  final FocusNode _testNode = FocusNode();
  bool isError = false;
  String text = '';

  // 提交表单的方法
  void _saveForm() {
    if (_formKey.currentState.validate()) {
      if (isError == false) {
        setState(() {
          text = _testKey.currentState.value;
        });
        _testKey.currentState.reset();
      } else {
        _scaffoldKey.currentState.showSnackBar(
          SnackBar(content: Text('A value must be entered')),
        );
      }
    }
  }

  [@override](/user/override)
  void dispose() {
    _testNode.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 表单组件
            Form(
              key: _formKey,
              child: Column(
                children: [
                  // 输入字段
                  Padding(
                    padding: const EdgeInsets.only(bottom: 30),
                    child: FFRFromInputField(
                      // 自动聚焦
                      autofocus: true,
                      focusNode: _testNode,
                      // 字段提交时隐藏键盘
                      onFieldSubmitted: (term) {
                        _testNode.unfocus();
                      },
                      // 提示文本
                      hintText: 'I am a Text input field',
                      // 背景色
                      backgroundColor: Colors.lightGreen,
                      // 图标
                      icon: Icon(Icons.check_box),
                      // 字段的 Key
                      fieldKey: _testKey,
                      // 是否显示错误状态
                      isError: isError,
                      // 输入类型
                      textInputType: TextInputType.text,
                      // 验证逻辑
                      validate: (String newValue) {
                        if (newValue.isEmpty) {
                          setState(() {
                            isError = true;
                          });
                        } else {
                          setState(() {
                            isError = false;
                          });
                        }
                      },
                      // 文本样式
                      textStyle: TextStyle(color: Colors.black, fontSize: 20),
                      // 错误颜色
                      errorColor: Colors.red,
                    ),
                  ),
                  // 提交按钮
                  ElevatedButton(
                    onPressed: _saveForm,
                    child: Text('Press me'),
                  ),
                ],
              ),
            ),
            SizedBox(height: 30),
            // 显示输入结果
            text == '' ? Container() : Text(text),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter表单输入字段插件ffr_form_input_field的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


ffr_form_input_field 是一个用于 Flutter 的表单输入字段插件,旨在简化表单的创建和管理。它提供了一些预定义的输入字段类型,如文本输入、数字输入、日期选择器等,并且可以轻松地与表单验证集成。

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

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  ffr_form_input_field: ^版本号

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

2. 导入包

在你的 Dart 文件中导入 ffr_form_input_field 包。

import 'package:ffr_form_input_field/ffr_form_input_field.dart';

3. 使用 FFRFormInputField

你可以在你的表单中使用 FFRFormInputField 来创建不同类型的输入字段。以下是一些常见的用法示例:

文本输入字段

FFRFormInputField(
  controller: TextEditingController(),
  labelText: 'Username',
  hintText: 'Enter your username',
  validator: (value) {
    if (value == null || value.isEmpty) {
      return 'Please enter your username';
    }
    return null;
  },
);

数字输入字段

FFRFormInputField(
  controller: TextEditingController(),
  labelText: 'Age',
  hintText: 'Enter your age',
  keyboardType: TextInputType.number,
  validator: (value) {
    if (value == null || value.isEmpty) {
      return 'Please enter your age';
    }
    if (int.tryParse(value) == null) {
      return 'Please enter a valid number';
    }
    return null;
  },
);

日期选择字段

FFRFormInputField(
  controller: TextEditingController(),
  labelText: 'Date of Birth',
  hintText: 'Select your date of birth',
  type: FFRFormInputType.date,
  onTap: () async {
    DateTime? pickedDate = await showDatePicker(
      context: context,
      initialDate: DateTime.now(),
      firstDate: DateTime(1900),
      lastDate: DateTime.now(),
    );
    if (pickedDate != null) {
      // Handle the picked date
    }
  },
  validator: (value) {
    if (value == null || value.isEmpty) {
      return 'Please select your date of birth';
    }
    return null;
  },
);

4. 表单验证

你可以将这些输入字段放在一个 Form 中,并使用 Formvalidate 方法来验证表单。

final _formKey = GlobalKey<FormState>();

Form(
  key: _formKey,
  child: Column(
    children: [
      FFRFormInputField(
        controller: TextEditingController(),
        labelText: 'Username',
        hintText: 'Enter your username',
        validator: (value) {
          if (value == null || value.isEmpty) {
            return 'Please enter your username';
          }
          return null;
        },
      ),
      FFRFormInputField(
        controller: TextEditingController(),
        labelText: 'Age',
        hintText: 'Enter your age',
        keyboardType: TextInputType.number,
        validator: (value) {
          if (value == null || value.isEmpty) {
            return 'Please enter your age';
          }
          if (int.tryParse(value) == null) {
            return 'Please enter a valid number';
          }
          return null;
        },
      ),
      ElevatedButton(
        onPressed: () {
          if (_formKey.currentState!.validate()) {
            // Form is valid, proceed with submission
          }
        },
        child: Text('Submit'),
      ),
    ],
  ),
);

5. 自定义样式

FFRFormInputField 还提供了一些属性来自定义输入字段的样式,例如 decorationstyle 等。

FFRFormInputField(
  controller: TextEditingController(),
  labelText: 'Email',
  hintText: 'Enter your email',
  validator: (value) {
    if (value == null || value.isEmpty) {
      return 'Please enter your email';
    }
    if (!value.contains('@')) {
      return 'Please enter a valid email';
    }
    return null;
  },
  decoration: InputDecoration(
    border: OutlineInputBorder(),
    filled: true,
    fillColor: Colors.grey[200],
  ),
);
回到顶部