Flutter for OpenHarmony 实战:toggle_switch 分段控件设计与复杂交互闭环

【Flutter】Flutter 使用 toggle_switch 实现切换按钮 这个组件可以帮助我们在 Flutter 项目中轻松实现切换按钮的功能。 阅读详情

Flutter for OpenHarmony 实战:toggle_switch 分段控件设计与复杂交互闭环

在这里插入图片描述

前言

开关(Toggle)是 UI 中最基础的控件。鸿蒙系统提供了原生的 Switch 组件,但如果你想要苹果风格的分段控件 (Segment Control) 或是带有自定义动画的开关?toggle_switch 插件正是为此而生。

本文将带你实战如何在 Flutter for OpenHarmony 项目中定制各种“微交互”开关,提升应用的高级感。


一、 Toggle Switch 的核心应用场景

1.1 模式切换

如网易云音乐首页的“推荐/直播”切换,或“黑暗/亮色”模式。这种高频且平级的选项切换,是分段控件的主战场。

1.2 选项筛选

电商类应用的商品筛选(价格区间、销量排序)。toggle_switch 的多项选择(3+ 个标签)比普通的 DropdownButton 更直观、操作更高效。

1.3 深度对比:Toggle vs Dropdown (选型指南)

在鸿蒙应用设计中,开发者常在“铺开显示”还是“收纳展开”之间犹豫。以下是基于交互成本的对比分析:

维度Toggle SwitchDropdownButton
可视性完全铺开,所有选项一眼可见收纳隐藏,仅显示当前选中项
操作步长1 次点击即可完成切换2 次点击 (展开列表 + 选择项)
重绘成本仅刷新组件内部状态,性能极佳需弹出浮层,涉及图层重叠计算
推荐场景2-4 个选项,属于核心业务路径5 个以上选项,非高频辅助配置

💡 实战结论:在鸿蒙的高频操作路径中,若选项少于 4 个,强推 Toggle Switch。它能减少 50% 的用户操作步长,让应用显现出一种“即点即得”的快感。

在这里插入图片描述


二、 集成指南

2.1 添加依赖

dependencies:
  toggle_switch: ^2.3.0

在这里插入图片描述


三、 实战:构建主题切换器

3.1 双态开关 (On/Off)

import 'package:toggle_switch/toggle_switch.dart';

ToggleSwitch(
  minWidth: 90.0,
  initialLabelIndex: 1,
  cornerRadius: 20.0,
  activeFgColor: Colors.white, // 高亮文字颜色
  inactiveBgColor: Colors.grey, // 未选中背景
  inactiveFgColor: Colors.white,
  totalSwitches: 2,
  labels: ['自动', '手动'],
  icons: [FontAwesomeIcons.robot, FontAwesomeIcons.hand],
  activeBgColors: [[Colors.blue], [Colors.pink]],
  onToggle: (index) {
    print('switched to: $index');
  },
);

3.2 多段开关 (Segmented Control)

ToggleSwitch(
  minWidth: 90.0,
  minHeight: 50.0,
  fontSize: 16.0,
  initialLabelIndex: 0,
  totalSwitches: 3,
  labels: ['小号', '中号', '大号'], // 衣服尺码选择
  onToggle: (index) {
    print('switched to: $index');
  },
);

四、 鸿蒙端的适配优化

4.1 响应式宽度

在平板或折叠屏上,硬编码 minWidth 可能会显得不协调。建议结合 MediaQuery 或 LayoutBuilder 动态设宽。

4.2 无障碍 (Accessibility)

鸿蒙系统的“屏幕朗读”功能对于视障用户非常重要。遗憾的是该插件对语义化的支持一般,建议在其外层包裹 Semantics 组件。

Semantics(
  label: '请选择性别',
  child: ToggleSwitch(...),
)

五、 完整示例代码

以下代码演示了如何在鸿蒙应用中实现一个支持性别选择的多态开关:

import 'package:flutter/material.dart';
import 'package:toggle_switch/toggle_switch.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

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

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('鸿蒙开关组件演示')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text('请选择你的偏好:', style: TextStyle(fontSize: 18)),
            const SizedBox(height: 20),
            ToggleSwitch(
              minWidth: 120.0,
              initialLabelIndex: 0,
              cornerRadius: 10.0,
              activeBgColors: [[Colors.blue], [Colors.pink], [Colors.orange]],
              activeFgColor: Colors.white,
              inactiveBgColor: Colors.grey[300],
              inactiveFgColor: Colors.black54,
              totalSwitches: 3,
              labels: ['男', '女', '保密'],
              icons: [FontAwesomeIcons.mars, FontAwesomeIcons.venus, FontAwesomeIcons.userSecret],
              onToggle: (index) {
                debugPrint('当前选择项索引: $index');
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这里插入图片描述

六、 总结

toggle_switch 是那种能极大提升“把玩感”的小组件。虽然功能单一,但在鸿蒙这样强交互的系统中,它的平滑过渡动画能让死板的设置项立刻灵动起来。


欢迎加入开源鸿蒙跨平台社区:开源鸿蒙跨平台开发者社区

Flutter之CupertinoSwitch和Switch开关组件的简单使用 本片博文没啥技术含量,就是简单的介绍一下CupertinoSwitch组件的使用方式。先来看看具体的运行效果: 单从运行效果来看我们可以知道: 1、CupertinoSwitch可以自主设置打开状态的颜色,比如上图中的绿色和蓝色 2、可以控制 开关是否能用 下面来看看具体的设置,CupertinoSwitch有三个属性: value:布尔类型的值,true表示打开开关,false表示关闭开关 a... 阅读详情

相关推荐

红外图像和可见光图像异源图像配准问题研究

本文旨在研究一种具有高准确率和鲁棒性的融合图像障碍物检测技术,通过把红外和可见光图像进行图像配准和融合,获取高质量的异源融合图像,根据融合图像的特点采用有效的障碍物检测算法,将图像中的障碍物准确检出。......

G_redsky的博客 1万+

Flutter Toggle Switch 项目常见问题解决方案

Flutter Toggle Switch 项目常见问题解决方案 一、项目基础介绍 toggle_switch 是一个开源的 Flutter 组件,它提供了一个可定制的切换开关(Toggle Switch)小部件。该组件允许开发者在他们的 Flutter 应用程序中添加具有多种配置选项的切换按钮,包括图标、颜色、文本、边框半径和动画等。它使用 Dart 语言编写,适用于所有使用 Flutter 框...

gitblog_00625的博客 390

四轮两驱小车(四):STM32驱动5路灰度传感器PID循迹

之前买了一批5路灰度传感器,想用这传感器进行循迹,无奈网上和官方的资料提供的还是比较少,这里还是做一下当初的学习记录。

weixin_51651698的博客 6万+

Flutter Toggle Switch:一个简单的切换开关组件

Flutter Toggle Switch:一个简单的切换开关组件 1. 项目基础介绍 Flutter Toggle Switch 是一个开源的 Flutter 组件,用于在应用程序中创建美观且功能丰富的切换开关。该项目使用 Dart 语言开发,旨在为开发者提供一个易于定制和使用的切换开关解决方案。 2. 项目核心功能 自定义样式:支持自定义开关的背景颜色、前景颜色、文本样式、图标、边框、圆角等...

gitblog_00898的博客 596

matlab 点云均值、中值、高斯滤波【2024最新版】

点云均值滤波、中值滤波、高斯滤波的matlab自带函数实现。博客长期更新,本文最近一次更新时间为:2024年11月9日。

点云侠的博客 5259

Android功耗系列专题理论之十三:MTK平台待机功耗问题分析方法

摘要:本文详细分析了MTK平台待机功耗问题的调试方法,重点介绍了SPM电源管理机制、26M时钟控制逻辑以及系统深睡眠状态的判断标准。文章提供了完整的Debug流程,包括日志抓取、唤醒源分析、SCP睡眠状态检查以及时钟/LDO状态排查等实用技巧,并给出硬件漏电点和软件配置异常的排查方案。针对不同模块(Modem/Conn/SSPM等)提供了具体的电源管理绕过命令,适用于功耗问题调试和低功耗模式验证场景。

561

开源宝藏:Toggle Switch - 功能丰富且高度定制的Flutter切换控件

开源宝藏:Toggle Switch - 功能丰富且高度定制的Flutter切换控件 在众多UI组件中,开关(Toggle)以其直观的操作和简洁的视觉效果成为移动应用中的明星元素。今天,我们带来了一个开源界的瑰宝——Toggle Switch,一个基于Flutter框架的简单而强大的切换控件,它不仅满足了基础的交互需求,更通过其无限的自定义潜力,让你的应用界面设计更加灵活多变。 项目介绍 Togg...

gitblog_00866的博客 632

手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆自动紧急制动(AEB)仿真

本文完成了基于 Simulink 的智能车辆自动紧急制动(AEB),实现了:✅ 构建前车急刹与静止障碍物典型场景✅ 设计基于 TTC 的三级 AEB 决策逻辑✅ 验证在高风险场景下有效避免碰撞✅ 掌握从风险评估到制动执行的完整安全链✅ 为ADAS 主动安全功能开发奠定基础。

MHD0815的博客 237

Flutter 开关和切换高级指南

开关按钮是一个 Flutter 小部件,只有两种状态,真/假或开/关。通常,开关是一个带有拇指滑块的按钮,用户可以将其从左拖动到右,反之亦然以在状态之间切换。它不会自行维护其状态。您必须致电 onChanged属性以保持按钮打开或关闭。同样,切换小部件只有两种状态:真/假或开/关。但是切换小部件会创建多个按行排列的按钮,允许用户在它们之间切换。我们将此按钮分为两部分。第一个是我命名为的无状态小部件 CustomAnimatedSwitch. 在这个无状态小部件中,我们将创建自定义开关。

分享身边生活经验blog 2899

7、初级视觉皮层(V1)的研究综述

本文综述了初级视觉皮层(V1)的基本功能特性、计算理解、细胞相互作用及理论模型。V1不仅执行方向和空间频率的选择性滤波,还通过相位选择性和上下文调制参与高级视觉处理。研究从信息编码角度解释了V1感受野的形成,并介绍了基于自然图像统计的建模方法。横向与反馈连接揭示了V1在全局视觉整合中的作用,尤其是上下文对细胞响应的快速调节。李的动态模型提出V1可生成视觉显著性图,支持前注意分割和注意力引导。未来研究聚焦于V1在注意力、意识和硬件实现中的潜在应用,推动视觉神经科学与人工智能的交叉发展。

7z8x2c4v6b9的博客 146

YOLOv8改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv8的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1223

flutter开发之组件大全

flutter是谷歌的移动ui框架,可以快速在ios和android上构建高质量的用户界面。本课程会全面细致的讲解flutter各个组件的用法。

cesium单向流动线效果

在学材质的路上一去不复返了属实是,难也难在这。还请各位大佬多多指教~

就zhei? 690

Flutter Switch 开关控制

参数详解 属性 说明 value 当前开关状态 布尔值 onChanged 监听(开关状态改变时调用) activeColor 打开 状态 轨道 和 按钮颜色 activeTrackColor 打开 状态轨道颜色 inactiveThumbColor 关闭 状态按钮颜色 inactiveTrackColor 关闭 状态轨道颜色 ...

马志武的博客 9147

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

flutter自定义开关控件 flutter_switch_plus

控件样式: 使用方式: 在pubspec.yaml中添加: flutter_switch_plus: ^0.0.1 flutter_switch_plus是对官方Switch控件的功能加强,其实官方提供在Switch已经很优秀了,样式跟iOS的开关样式也比较像,唯一的缺点是没法改大小(控件宽高在代码中写死了可还行),因此结合官方的控件做了一个加强版的。 使用方式: PlusSwitch( value: true, activeTrackColor:

倚栏静望的博客 3018

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

flutter内容界面的更新,switch用法,StatefulWidget的理解

最近在了解flutter,新写的代码中用到了switch控件,正常的逻辑,点击控件后switch的值应该发生变化,代码如下: class _SystemConfigState extends State<SystemConfigPage> { bool _receiveNotification = false; @override Widget build(BuildCo...

hopshine的专栏 2324

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

flutter switch 切换 仅做记录

import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( ti...

czy279470138的博客 437

2021年Flutter中的开关组件Switch

Flutter中用Switch来表示开关组件。 主要属性如下: 1. value 选中时的值; 2. onChanged 改变时触发的事件; 3. activeColor 选中时的颜色; 代码示例: import 'package:flutter/material.dart'; class SwitchPage extends StatefulWidget { SwitchPage({Key key}) : super(key: key); @override

码蝗的博客 670

Flutter 2.8 更新详解

北半球的冬意已至,黄叶与气温均随风而落。年终的最后一个 Flutter 稳定版本 已悄然来到你的面前。让我们向 Flutter 2.8 打声招呼~本次更新包含了 207 位贡献者和 178...

Flutter 社区 1408

10 个 Flutter 优秀组件

今天我们再次讨论关于 UI 和 Widgets 的优秀软件包。所以… … 让我们开始愉快的阅读吧! 原文 https://tomicriedel.medium.com/10-flutter-tips-season-2-part-5-10-e8152b58935a 正文 Yaru Flutter 支持许多平台,其中包括 Linux。现在,如果你开发了一个漂亮的 Ubuntu 风格的应用程序,它可能会变得复杂。这就是亚鲁存在的原因。这使您能够使用各种各样的组件,从按钮和检查到进度条,而无需编写复杂的代码。.

会煮咖啡的猫咪 942

【Flutter踩坑排雷】第26课:Hero 标签冲突坑|多Hero标签重名,页面转场动画错乱修复

本文剖析 Flutter 中 Hero 标签冲突的四大典型场景:默认 FloatingActionButton 的隐性重名、动态列表中 tag: index 的重复、flightShuttleBuilder 中 GlobalKey 碰撞,以及嵌套 Navigator 的 tag 可见性问题。从源码层面揭示 tag 作为匹配键的唯一性要求,强调索引与位置非稳定身份,数据 ID 才是可靠标识。提出五步排查法与分层修复策略,并建立“禁止索引标签”“命名空间约定”等预防契约,确保转场动画稳定可靠。核心结论:tag

jackchuanqi的博客 415

【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”

本文剖析ScrollController作为“附加句柄”而非“滚动位置本身”的核心机制,揭示其在build中创建、未检查hasClients、addPostFrameCallback失效及dispose遗漏等四大典型故障的根因。通过五步排查法与五层修复方案,系统性解决滚动失效、监听器泄漏等问题,并提出可审查的预防原则,将“玄学问题”转化为确定性实践。

jackchuanqi的博客 376

Flutter学习day10--shared_preferences与离线优先

大多数 App 的第一版都长这样:页面数据全部来自网络,网一断,界面直接开天窗。用户不会去研究你的代码写得漂不漂亮,他们只记得"这个 App 断网就白屏"。这一篇我们解决两件事:怎么把数据存到手机本地(shared_preferences),以及怎么用"离线优先"模式让页面断网时依然有内容可看。这两点是 Flutter 客户端数据层的地基,也是网络请求(W4 前几篇)之后顺理成章的下一步。

qq_63223749的博客 294

【flutter封装图片/视频选择控件二】

【代码】【flutter封装图片/视频选择控件二】

androidhyf的博客 29

Flutter学习day11--Sliver滚动体系与折叠头部

几乎每个 App 的第一屏都是列表:首页信息流、频道页、商品瀑布流、带折叠头部的个人主页。Flutter 把这一整套滚动能力归拢成一个体系——。能不能把滚动写对、写顺,直接决定页面的流畅度和代码的可维护性。这篇要解决三个递进的问题:普通ListView有哪几种构造方式、为什么Column里嵌ListView会报错、以及什么时候该升级到+ Sliver 家族去实现"折叠头部 + 网格 + 列表"这种复合页面。

qq_63223749的博客 312

【flutter简单的MethodChannel通道封装2】

【代码】【flutter简单的MethodChannel通道封装2】

androidhyf的博客 22
上一篇: Flutter for OpenHarmony 实战:sensors_plus 传感器融合与 3D 体感交互
下一篇: Flutter for OpenHarmony 实战:flutter_animate 声明式动画让 UI 灵动如原生
松林AI说
博客等级 码龄1年 1万+粉丝 2354原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值