Flutter多选表单字段插件flutter_multi_select_form_field的使用

Flutter多选表单字段插件flutter_multi_select_form_field的使用

A Widget for Multi Select Form Field with able customize most of the UI.

特性

通过MultiSelectFormField,你可以使用现有的Flutter Form小部件实现多选表单字段。

使用MultiSelectFormField,你可以自定义选项和芯片。

开始使用

首先,在你的Dart文件中引入该包:

import 'package:multi_select/multi_select.dart';

使用示例

以下是一个完整的示例代码,展示了如何在Flutter应用中使用flutter_multi_select_form_field插件来创建一个多选表单字段。

class SampleMultiSelect extends StatefulWidget {
  const SampleMultiSelect({Key? key}) : super(key: key);

  [@override](/user/override)
  State<SampleMultiSelect> createState() => _SampleMultiSelectState();
}

class _SampleMultiSelectState extends State<SampleMultiSelect> {
  // 定义选项列表
  final options = const [
    Option<Color>(label: "Red", value: "Red", extra: Colors.red),
    Option<Color>(label: "Blue", value: "Blue", extra: Colors.blue),
    Option<Color>(label: "green", value: "Green", extra: Colors.green),
    Option<Color>(label: "Orange", value: "Orange", extra: Colors.orange),
  ];

  // 控制器用于管理选择状态
  late MultiSelectController controller;

  // 表单的全局键
  final formKey = GlobalKey<FormState>();

  [@override](/user/override)
  void initState() {
    // 初始化控制器
    controller = MultiSelectController();
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    // 释放控制器资源
    controller.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Multi Select"),
        actions: [],
      ),
      floatingActionButton: FloatingActionButton(
        child: Text("+"),
        onPressed: () {
          if (formKey.currentState?.validate() ?? false) {
            print("Validated");
          }
        },
      ),
      body: Form(
        key: formKey,
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Column(
            children: [
              // 显示已选择的选项
              ChipsBuilder(
                controller: controller,
                builder: (options) {
                  return Wrap(
                    children: options
                        .map((e) => Chip(
                              label: Text(e.label),
                              backgroundColor: e.extra,
                            ))
                        .toList(),
                  );
                },
              ),
              SizedBox(
                height: 80,
              ),
              // 多选表单字段
              MultiSelectFormField(
                controller: controller,
                options: options,
                validator: (val) {
                  if (val?.isEmpty ?? true) {
                    return "Options is required";
                  }
                  return null;
                },
                chipBuilder: (option, index) {
                  return Chip(
                    label: Text(option.label),
                    backgroundColor: option.extra,
                  );
                },
                onShowOptions: () {
                  // 当用户点击多选表单字段时,显示选项列表
                  showModalBottomSheet(
                    context: context,
                    builder: (_) {
                      return _showOptions();
                    },
                  );
                },
              ),
            ],
          ),
        ),
      ),
    );
  }

  // 显示选项列表的底部弹出框
  Widget _showOptions() {
    return OptionsBuilder(
      controller: controller,
      builder: (option, index, isChoosed) {
        return CheckboxListTile(
          value: isChoosed,
          title: Text(option.label),
          onChanged: (value) {
            // 更新选择状态
            controller.onChange(option);
          },
        );
      },
    );
  }
}

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

1 回复

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


flutter_multi_select_form_field 是一个用于在 Flutter 应用中创建多选表单字段的插件。它允许用户从多个选项中选择一个或多个值,并将这些值以列表的形式返回。以下是如何使用 flutter_multi_select_form_field 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_multi_select_form_field: ^0.1.0  # 请查看最新版本

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

2. 导入包

在你的 Dart 文件中导入 flutter_multi_select_form_field

import 'package:flutter_multi_select_form_field/flutter_multi_select_form_field.dart';

3. 使用 MultiSelectFormField

你可以在表单中使用 MultiSelectFormField 来创建一个多选字段。以下是一个简单的示例:

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

class MultiSelectFormFieldExample extends StatefulWidget {
  [@override](/user/override)
  _MultiSelectFormFieldExampleState createState() => _MultiSelectFormFieldExampleState();
}

class _MultiSelectFormFieldExampleState extends State<MultiSelectFormFieldExample> {
  final _formKey = GlobalKey<FormState>();
  List<String> _selectedValues = [];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MultiSelectFormField Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              MultiSelectFormField(
                title: Text('Select your interests'),
                dataSource: [
                  {'display': 'Reading', 'value': 'Reading'},
                  {'display': 'Sports', 'value': 'Sports'},
                  {'display': 'Music', 'value': 'Music'},
                  {'display': 'Traveling', 'value': 'Traveling'},
                ],
                textField: 'display',
                valueField: 'value',
                okButtonLabel: 'OK',
                cancelButtonLabel: 'CANCEL',
                hintWidget: Text('Please choose one or more'),
                initialValue: _selectedValues,
                onSaved: (value) {
                  setState(() {
                    _selectedValues = value;
                  });
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    _formKey.currentState!.save();
                    print('Selected Values: $_selectedValues');
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: MultiSelectFormFieldExample(),
));
回到顶部