Flutter增减表单字段插件increment_decrement_form_field的使用

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

Flutter增减表单字段插件increment_decrement_form_field的使用

增减一个值使用间距水平IconButton并包裹在FormField中

Sample of widget

增减一个整数示例(示例代码)

/*
    增减一个整数
*/
IncrementDecrementFormField<int>(
    // 初始值
    initialValue: 0,

    // 返回你希望用来保存值的组件,这里是Text
    // 如果没有值设置为0,否则显示值作为字符串
    displayBuilder: (value, field) {
        return Text(
            value == null ? "0" : value.toString(),
        );
    },

    // 当左按钮被按下时运行(减量)
    // 当前值作为参数传递
    // 返回当减量被按下时更新显示值的值
    // 在这种情况下如果为空则为0,否则当前值减1
    onDecrement: (currentValue) {
        return currentValue! - 1;
    },

    // 当右按钮被按下时运行(增量)
    // 当前值作为参数传递
    // 返回当增量被按下时更新显示值的值
    // 在这种情况下如果为空则为0,否则当前值加1
    onIncrement: (currentValue) {
        return currentValue! + 1;
    },
),

带错误检查的字母增减示例(示例代码)

/*
    带错误检查的字母增减
*/
IncrementDecrementFormField<String>(
    // 自动验证设置,因此每当输入更改时都会验证
    autovalidateMode: AutovalidateMode.always,

    // 设置初始值
    initialValue: "a",

    // 显示当前字符
    displayBuilder: (value, field) {
        return Text(
            value!,
        );
    },

    // 减量当前字符码减1
    onDecrement: (currentValue) {
        return String.fromCharCode(
            currentValue!.codeUnitAt(0) - 1,
        );
    },

    // 增量当前字符码加1
    onIncrement: (currentValue) {
        return String.fromCharCode(
            currentValue!.codeUnitAt(0) + 1,
        );
    },

    // 如果不在a到z的小写字母范围内报错
    validator: (value) {
        if (value == null ||
            value.length != 1 ||
            value.codeUnitAt(0) < "a".codeUnitAt(0) ||
            value.codeUnitAt(0) > "z".codeUnitAt(0)) {
            return "Value out of bounds";
        }
        return null;
    },
),

增量2减量1带表单和验证,值在0到10之间(包括)示例(示例代码)

/*
    增量2减量1带表单和验证
    值在0到10之间(包括)
*/
StatefulBuilder(
    builder: (context, setState) {
        return Form(
            key: formKey,
            child: Column(
                children: [
                    IncrementDecrementFormField<int>(
                        // 自动验证并设置初始值
                        autovalidateMode: AutovalidateMode.always,
                        initialValue: 0,

                        // 显示当前值
                        displayBuilder: (value, field) {
                            return Text(
                            value!.toString(),
                            );
                        },

                        // 减量1
                        onDecrement: (currentValue) {
                            return currentValue! - 1;
                        },

                        // 增量2
                        onIncrement: (currentValue) {
                            return currentValue! + 2;
                        },

                        // 验证是否在0到10之间(包括)
                        validator: (value) {
                            if (value == null || value > 10 || value < 0) {
                                return "Value out of bounds";
                            }
                            return null;
                        },

                        // 添加onSaved函数,当表单调用onSaved时设置持有者值
                        onSaved: (value) {
                            holder = value!;
                        },
                    ),

                    // 提交按钮和提交值的显示
                    // 如果成功验证通过调用save设置持有者
                    ElevatedButton(
                        onPressed: () {
                            if (formKey.currentState!.validate()) {
                                setState(() {
                                    formKey.currentState!.save();
                                });
                            }
                        },
                        child: const Text(
                            "Submit",
                        ),
                    ),

                    // 显示提交值
                    Text(
                        "Submitted Value: $holder",
                    ),
                ],
            ),
        );
    },
),

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

1 回复

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


当然,下面是一个关于如何使用 increment_decrement_form_field 插件在 Flutter 中实现增减表单字段的示例代码。这个插件允许你通过点击按钮来动态增加或减少表单字段的数量。

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

dependencies:
  flutter:
    sdk: flutter
  increment_decrement_form_field: ^最新版本号

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

以下是一个完整的 Flutter 应用示例,展示如何使用 increment_decrement_form_field

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  final List<TextEditingController> _controllers = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Increment Decrement Form Field Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            IncrementDecrementFormField<String>(
              initialValue: '',
              initialCount: 1,
              minCount: 1,
              maxCount: 10,
              decoration: InputDecoration(
                labelText: 'Dynamic Fields',
              ),
              onChanged: (index, value) {
                // This callback is triggered when the text in a field changes
                print('Field $index changed to $value');
              },
              onFieldAdded: (index) {
                // This callback is triggered when a new field is added
                _controllers.add(TextEditingController());
                print('Field $index added');
              },
              onFieldRemoved: (index) {
                // This callback is triggered when a field is removed
                _controllers[index]?.dispose();
                _controllers.removeAt(index);
                print('Field $index removed');
              },
              builder: (context, index, value, {onChanged, onEditingComplete}) {
                return TextField(
                  controller: _controllers[index],
                  decoration: InputDecoration(
                    labelText: 'Field $index',
                  ),
                  onChanged: onChanged,
                  onEditingComplete: onEditingComplete,
                );
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // Here you can handle form submission, for example
                for (int i = 0; i < _controllers.length; i++) {
                  print('Field $i value: ${_controllers[i].text}');
                }
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 依赖导入:首先,确保你导入了 increment_decrement_form_field 包。

  2. UI结构

    • 使用 ScaffoldAppBar 来设置应用的基本结构。
    • 使用 Column 来布局内容。
  3. IncrementDecrementFormField

    • initialValue:初始字段值。
    • initialCount:初始字段数量。
    • minCountmaxCount:字段数量的最小值和最大值。
    • decoration:字段装饰。
    • onChanged:字段值改变时的回调。
    • onFieldAddedonFieldRemoved:字段增加和移除时的回调。
    • builder:自定义字段的构建方式。
  4. TextEditingController

    • 为每个字段创建一个 TextEditingController,并在字段增加时添加新的控制器,在字段移除时销毁并移除控制器。
  5. 提交按钮

    • 一个简单的 ElevatedButton,点击时打印所有字段的值。

这个示例展示了如何使用 increment_decrement_form_field 插件来创建动态增减的表单字段,并且为每个字段提供了文本控制器以管理文本输入。

回到顶部