Flutter交互选择组件插件reactive_awesome_select的使用

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

Flutter交互选择组件插件reactive_awesome_select的使用

reactive_awesome_select 是一个用于Flutter的交互选择组件插件,它是 flutter_awesome_select 的包装器,专门设计用来与 reactive_forms 配合使用。虽然文档还在编写中,但你可以参考GitHub上的示例代码来学习如何使用这个插件。

示例Demo

以下是一个完整的示例demo,展示了如何在Flutter应用中使用 reactive_awesome_select 插件:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  reactive_forms: ^8.0.0
  reactive_awesome_select: ^1.0.0

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

2. 创建选择项

创建一个文件 choices.dart,定义一些选择项:

// choices.dart
const days = [
  'Monday',
  'Tuesday',
  'Wednesday',
  'Thursday',
  'Friday',
  'Saturday',
  'Sunday',
];

const fruits = [
  'Apple',
  'Banana',
  'Orange',
  'Mango',
  'Grapes',
];

3. 编写主程序

接下来,在 main.dart 文件中编写主程序:

import 'package:flutter/material.dart';
import 'package:reactive_awesome_select/reactive_awesome_select.dart';
import 'package:reactive_forms/reactive_forms.dart';

import 'choices.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  FormGroup buildForm() => fb.group({
        'input': FormControl<String>(
          value: null,
          validators: [Validators.required],
        ),
        'inputMultiple': FormControl<List<String>>(value: null),
      });

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: Scaffold(
        body: SafeArea(
          child: SingleChildScrollView(
            physics: const BouncingScrollPhysics(),
            padding: const EdgeInsets.symmetric(
              horizontal: 20.0,
              vertical: 20.0,
            ),
            child: ReactiveFormBuilder(
              form: buildForm,
              builder: (context, form, child) {
                return Column(
                  children: [
                    ReactiveSmartSelectSingle<String, String>(
                      formControlName: 'input',
                      title: 'Day selector',
                      choiceItems: days,
                    ),
                    const Text('data'),
                    ReactiveSmartSelectMultiple<String, String>(
                      formControlName: 'inputMultiple',
                      title: 'Fruit',
                      choiceItems: fruits,
                    ),
                    const SizedBox(height: 16),
                    ElevatedButton(
                      child: const Text('Sign Up'),
                      onPressed: () {
                        if (form.valid) {
                          // ignore: avoid_print
                          print(form.value);
                        } else {
                          form.markAllAsTouched();
                        }
                      },
                    ),
                  ],
                );
              },
            ),
          ),
        ),
      ),
    );
  }
}

4. 运行程序

确保所有依赖已经安装,并且代码没有错误后,运行你的Flutter应用。你将看到一个包含单选和多选选择器的表单页面。

5. 提交表单

点击“Sign Up”按钮时,如果表单有效,将会打印出表单的值;否则,所有未填写的字段会被标记为已触碰,提示用户进行填写。

通过上述步骤,你可以轻松地在Flutter应用中集成并使用 reactive_awesome_select 插件来实现交互式选择功能。


更多关于Flutter交互选择组件插件reactive_awesome_select的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter交互选择组件插件reactive_awesome_select的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用reactive_awesome_select插件的一个简单示例。reactive_awesome_select是一个用于创建交互选择组件的插件,通常用于表单选择、过滤列表等场景。这个插件与GetXProvider等状态管理库结合得很好,但下面我将展示一个基本的示例,使用Flutter的基础状态管理。

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

dependencies:
  flutter:
    sdk: flutter
  reactive_awesome_select: ^x.y.z  # 请替换为最新版本号

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

接下来,我们来看一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Reactive Awesome Select Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  final List<String> options = List.generate(20, (index) => 'Option $index');
  List<String> selectedOptions = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Reactive Awesome Select Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: ReactiveAwesomeSelect<String>(
          multiple: true, // 允许多选
          options: options,
          selectedValues: selectedOptions.toSet(),
          searchEnabled: true, // 启用搜索
          onSelectedChanged: (newValue) {
            setState(() {
              selectedOptions = newValue.toList();
            });
          },
          chipBuilder: (context, state, value) {
            return Chip(
              label: Text(value),
              backgroundColor: Colors.blue.shade100,
              onDelete: () {
                state.remove(value);
              },
            );
          },
          tileBuilder: (context, state, option) {
            return ListTile(
              title: Text(option),
            );
          },
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个使用ReactiveAwesomeSelect的选择组件。以下是一些关键点的解释:

  1. options:这是一个包含所有可选项的列表。
  2. selectedOptions:这是一个存储当前已选项的列表。注意,ReactiveAwesomeSelect期望selectedValues是一个Set,因此我们在传递之前将其转换为Set
  3. multiple:设置为true以允许多选。
  4. searchEnabled:设置为true以启用搜索功能。
  5. onSelectedChanged:当选择发生变化时调用的回调函数。在这里,我们更新selectedOptions列表。
  6. chipBuilder:用于自定义选中项(chip)的显示。这里我们简单地创建了一个带有删除功能的chip。
  7. tileBuilder:用于自定义选项列表项的显示。这里我们使用了ListTile

这个示例展示了reactive_awesome_select的基本用法,你可以根据需要进一步自定义和扩展。

回到顶部