搜索插件、代码仓与 APP 分类

flutter_advanced_switch 封面
插件详情v3.2.2

flutter_advanced_switch

一个高级开关控件提供了丰富的 API 用于小部件自定义,为您的应用带来全新的外观和感觉。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
2.4万
喜欢数
166
Pub 分数
160

安装插件

flutter pub add flutter_advanced_switch

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Flutter Advanced Switch 是一个可自定义的开关小部件,提供丰富的 API 以实现广泛的样式和行为自定义。它使开发者能够创建视觉上独特的开关,具备平滑的动画效果、自定义轨道和滑块设计,以及在所有主要平台上的响应式交互。适用于需要独特切换控件的现代 UI,通过精致且互动性强的元素提升用户体验。该包支持 Android、iOS、Web、macOS、Windows 和 Linux,确保跨平台一致性。

适合场景

  • 自定义切换接口
  • 表单中的增强用户反馈
  • 现代应用UI设计
  • 交互式设置面板
  • 跨平台切换组件
  • 仪表板中的视觉区分

主要特点

  • 高度可定制的轨道和滑块
  • 平滑的动画过渡
  • 跨平台兼容性
  • 丰富的样式选项
  • 响应式触摸反馈
  • 可配置的状态和行为

适合对象

  • 寻求视觉灵活性的UI设计师
  • 开发现代应用程序的开发者
  • 需要一致切换用户体验的团队
  • 具有复杂表单交互的应用程序
  • 面向多个平台的项目

使用建议

  • 需要了解 Flutter widget 自定义
  • 可能会略微增加包大小
  • 样式复杂性可能影响开发速度
  • 有限的内置主题
  • 对于无需自定义的简单开关操作,不是理想选择

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

flutter_advanced_switch

A highly customizable switch widget for Flutter with support for custom colors, text, icons, images, and more.

APP_ICON

Switch Light Switch Dark
Flutter Advanced Switch Off State Flutter Advanced Switch On State

Features

  • ✅ Fully customizable colors, sizes, and shapes
  • ✅ Support for text labels and icons
  • ✅ Background images for active/inactive states
  • ✅ Custom thumb widget support
  • ✅ Smooth animations
  • ✅ Enabled/disabled states
  • ✅ Controller-based or callback-based state management
  • ✅ Customizable thumb padding
  • ✅ Null-safe

Getting Started

In the pubspec.yaml of your flutter project, add the following dependency:

dependencies:
  flutter_advanced_switch: ^3.2.0

Import in your project:

import 'package:flutter_advanced_switch/flutter_advanced_switch.dart';

Usage

Basic Switch
class MyWidget extends StatefulWidget {
  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final _controller = ValueNotifier<bool>(false);

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AdvancedSwitch(
      controller: _controller,
    );
  }
}
Using Callback Instead of Controller
AdvancedSwitch(
  initialValue: false,
  onChanged: (value) {
    print('Switch value: $value');
  },
)
Customized Switch
final _controller = ValueNotifier<bool>(false);

AdvancedSwitch(
  controller: _controller,
  activeColor: Colors.green,
  inactiveColor: Colors.red,
  activeChild: const Text('ON'),
  inactiveChild: const Text('OFF'),
  width: 70.0,
  height: 35.0,
  decoration: BoxDecoration(
    borderRadius: BorderRadius.circular(20),
  ),
)
With Custom Thumb
final _controller = ValueNotifier<bool>(false);

AdvancedSwitch(
  controller: _controller,
  thumb: ValueListenableBuilder<bool>(
    valueListenable: _controller,
    builder: (_, value, __) {
      return Icon(
        value ? Icons.check : Icons.close,
        size: 16,
      );
    },
  ),
)
With Background Images
final _controller = ValueNotifier<bool>(false);

AdvancedSwitch(
  controller: _controller,
  activeImage: const AssetImage('assets/images/day.png'),
  inactiveImage: const AssetImage('assets/images/night.png'),
  activeChild: const Text('DAY'),
  inactiveChild: const Text('NIGHT'),
  width: 80,
)
With Icons
final _controller = ValueNotifier<bool>(false);

AdvancedSwitch(
  controller: _controller,
  activeChild: const Icon(Icons.wb_sunny, size: 16),
  inactiveChild: const Icon(Icons.nightlight_round, size: 16),
  activeColor: Colors.orange,
  inactiveColor: Colors.indigo,
  width: 60,
)
Listening to State Changes
class _MyWidgetState extends State<MyWidget> {
  final _controller = ValueNotifier<bool>(false);

  @override
  void initState() {
    super.initState();
    _controller.addListener(() {
      setState(() {
        // React to state changes
        print('Switch is now: ${_controller.value}');
      });
    });
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        AdvancedSwitch(controller: _controller),
        Text('Switch is ${_controller.value ? "ON" : "OFF"}'),
      ],
    );
  }
}

Parameters

Parameter Description Type Default
controller Controls the state of the switch. If provided, the switch will use this controller to manage its state. ValueNotifier<bool>? null
activeColor The background color when the switch is in the active (on) state. Color Color(0xFF4CAF50)
inactiveColor The background color when the switch is in the inactive (off) state. Color Color(0xFF9E9E9E)
activeChild A widget to display on the left side when the switch is active. Widget? null
inactiveChild A widget to display on the right side when the switch is inactive. Widget? null
activeImage An optional background image to display when the switch is active. ImageProvider? null
inactiveImage An optional background image to display when the switch is inactive. ImageProvider? null
decoration The decoration to apply to the switch container. Typically used to set the border radius and shape. BoxDecoration BorderRadius.circular(15)
width The width of the switch. double 50.0
height The height of the switch. The thumb size is automatically calculated based on this value. double 30.0
enabled Whether the switch is enabled. If false, the switch will be displayed with reduced opacity and will not respond to user interactions. bool true
disabledOpacity The opacity to apply when the switch is disabled. double 0.5
thumb A custom widget to use as the thumb (the sliding part of the switch). If null, a default white rounded rectangle with a shadow will be used. Widget? null
thumbPadding The padding around the thumb. This creates space between the thumb and the switch edges. double 1.0
initialValue The initial state of the switch when controller is not provided. This value is only used when controller is null. bool false
onChanged Called when the user toggles the switch. The switch will call this callback with the new value. If null and no controller is provided, the switch will be disabled. ValueChanged<bool>? null

Demo

Flutter Advanced Switch Preview

所属分类

源码仓库

使用此插件的项目

暂无相关数据。