Flutter高级交互开关组件插件reactive_advanced_switch的使用

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

Flutter高级交互开关组件插件reactive_advanced_switch的使用

描述

reactive_advanced_switch 是一个围绕 flutter_advanced_switch 的包装,旨在与 reactive_forms 一起使用。它提供了更强大的功能和更简单的接口来创建响应式的开关组件。

由于官方文档还在建设中,建议查看 GitHub项目中的示例代码 获取更多帮助。

示例代码

下面是一个完整的Dart文件示例 (main.dart),展示了如何在Flutter应用中使用 reactive_advanced_switch 组件。

完整示例demo

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

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

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

  // 创建表单
  FormGroup buildForm() => fb.group({
        'switch': FormControl<bool>(value: false),
      });

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: Scaffold(
        appBar: AppBar(title: Text('Reactive Advanced Switch Example')),
        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: [
                    // 使用ReactiveAdvancedSwitch
                    ReactiveAdvancedSwitch<bool>(
                      formControlName: 'switch',
                      decoration: const InputDecoration(
                        isCollapsed: true,
                        contentPadding: EdgeInsets.zero,
                        border: InputBorder.none,
                      ),
                    ),
                    const SizedBox(height: 16),
                    // 切换按钮
                    TextButton(
                      onPressed: () {
                        form.control('switch').value =
                            !(form.control('switch').value as bool);
                      },
                      child: const Text('Toggle'),
                    ),
                    ElevatedButton(
                      child: const Text('Submit'),
                      onPressed: () {
                        if (form.valid) {
                          // 打印表单值
                          print(form.value);
                        } else {
                          form.markAllAsTouched();
                        }
                      },
                    ),
                  ],
                );
              },
            ),
          ),
        ),
      ),
    );
  }
}

解释

  • FormGroup:我们使用 fb.group() 来创建一个表单组,其中包含一个名为 switch 的布尔类型的 FormControl
  • ReactiveFormBuilder:用于构建一个响应式表单。它接收一个函数 buildForm 作为参数,该函数返回一个 FormGroup
  • ReactiveAdvancedSwitch:这是主要的开关组件,通过设置 formControlName 属性来绑定到表单控件。
  • TextButton 和 ElevatedButton:提供用户交互方式,可以切换开关状态或提交表单。

通过这个例子,你可以看到如何轻松地将 reactive_advanced_switch 集成到你的Flutter应用程序中,并利用其提供的强大功能来增强用户体验。


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

1 回复

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


当然,下面是一个关于如何在Flutter中使用reactive_advanced_switch插件的示例代码。这个插件提供了高级的开关组件,可以实现丰富的交互效果。

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

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

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

接下来是一个完整的示例代码,展示了如何使用reactive_advanced_switch插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Reactive Advanced Switch Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Reactive Advanced Switch Demo'),
        ),
        body: Center(
          child: ReactiveAdvancedSwitchDemo(),
        ),
      ),
    );
  }
}

class ReactiveAdvancedSwitchDemo extends StatefulWidget {
  @override
  _ReactiveAdvancedSwitchDemoState createState() => _ReactiveAdvancedSwitchDemoState();
}

class _ReactiveAdvancedSwitchDemoState extends State<ReactiveAdvancedSwitchDemo> {
  bool isSwitchedOn = false;

  void handleSwitchChange(bool newValue) {
    setState(() {
      isSwitchedOn = newValue;
    });
  }

  @override
  Widget build(BuildContext context) {
    return ReactiveAdvancedSwitch(
      size: 50,
      activeColor: Colors.green,
      inactiveColor: Colors.grey,
      activeBackgroundColor: Colors.lightGreen[100]!,
      inactiveBackgroundColor: Colors.grey[200]!,
      label: 'Switch Label',
      labelStyle: TextStyle(
        color: Colors.black,
        fontSize: 16,
      ),
      switchState: isSwitchedOn,
      onSwitchChange: handleSwitchChange,
      thumbAnimationDuration: Duration(milliseconds: 300),
      switchAnimationDuration: Duration(milliseconds: 300),
      showAnimation: true,
    );
  }
}

在这个示例中:

  1. ReactiveAdvancedSwitch 组件被用于创建一个开关。
  2. size 属性用于设置开关的大小。
  3. activeColorinactiveColor 分别用于设置开关激活和未激活时的颜色。
  4. activeBackgroundColorinactiveBackgroundColor 分别用于设置开关背景在激活和未激活时的颜色。
  5. label 属性用于设置开关的标签文本。
  6. labelStyle 属性用于设置标签文本的样式。
  7. switchState 属性表示开关的当前状态。
  8. onSwitchChange 是一个回调函数,当开关状态改变时会被调用,并更新状态。
  9. thumbAnimationDurationswitchAnimationDuration 分别用于设置拇指和开关动画的持续时间。
  10. showAnimation 属性用于控制是否显示动画。

这个示例展示了如何自定义reactive_advanced_switch的各种属性,以创建具有丰富交互效果的开关组件。你可以根据需求进一步调整和扩展这些属性。

回到顶部