news 2026/7/27 5:05:49

flutter使用getx实现主题色切换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
flutter使用getx实现主题色切换

第一步实现 我们先封装好 themeController进行控制

import 'package:flutter/material.dart'; import 'package:get/get.dart'; class ThemeController extends GetxController { // 主题模式:system / light / dark final _themeMode = ThemeMode.system.obs; ThemeMode get themeMode => _themeMode.value; // 主题色种子 final _seedColor = const Color(0xFF2196F3).obs; Color get seedColor => _seedColor.value; void setThemeMode(ThemeMode mode) { _themeMode.value = mode; Get.changeThemeMode(mode); } void setSeedColor(Color color) { _seedColor.value = color; // 切换主题色后,根据当前模式刷新对应主题 if (_themeMode.value == ThemeMode.dark) { Get.changeTheme(_buildDarkTheme()); } else { Get.changeTheme(_buildLightTheme()); } } ThemeData _buildLightTheme() { return ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: _seedColor.value, brightness: Brightness.light, ), useMaterial3: true, ); } ThemeData _buildDarkTheme() { return ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: _seedColor.value, brightness: Brightness.dark, ), useMaterial3: true, ); } ThemeData get lightTheme => _buildLightTheme(); ThemeData get darkTheme => _buildDarkTheme(); }


暗色和亮色 这是getx自带的

ElevatedButton( onPressed: () => themeController.setThemeMode(ThemeMode.dark), child: const Text("切换成暗黑"), ), const SizedBox(width: 20), ElevatedButton( onPressed: () => themeController.setThemeMode(ThemeMode.light), child: const Text("切换成亮色"), ),

实现多种颜色的主题色更改

Wrap( spacing: 12, runSpacing: 12, children: _colors.map((color) { return Obx(() { final selected = themeController.seedColor == color; return GestureDetector( onTap: () => themeController.setSeedColor(color), child: Container( width: 44, height: 44, decoration: BoxDecoration( color: color, shape: BoxShape.circle, border: Border.all( color: selected ? Colors.black : Colors.transparent, width: 3, ), ), child: selected ? const Icon(Icons.check, color: Colors.white, size: 24) : null, ), ); }); }).toList(), ), const SizedBox(height: 30), Obx( () => Text( "当前主题色:${_colorName(themeController.seedColor)}", style: Theme.of(context).textTheme.titleMedium, ), ), // 可选主题色 static const List<Color> _colors = [ Color(0xFF2196F3), // 蓝色 Color(0xFFF44336), // 红色 Color(0xFF4CAF50), // 绿色 Color(0xFFFF9800), // 橙色 Color(0xFF9C27B0), // 紫色 Color(0xFF795548), // 棕色 ]; String _colorName(Color color) { switch (color.value) { case 0xFF2196F3: return "蓝色"; case 0xFFF44336: return "红色"; case 0xFF4CAF50: return "绿色"; case 0xFFFF9800: return "橙色"; case 0xFF9C27B0: return "紫色"; case 0xFF795548: return "棕色"; } return "未知"; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 5:05:02

基于YOLOv10的口罩检测系统开发与实践

1. 项目概述与背景在公共卫生安全领域&#xff0c;实时监测人员口罩佩戴情况已成为疫情防控的重要环节。传统人工巡查方式效率低下且成本高昂&#xff0c;而基于深度学习的目标检测技术为解决这一问题提供了高效的技术路径。本项目采用YOLOv10这一前沿目标检测算法&#xff0c;…

作者头像 李华
网站建设 2026/7/27 5:04:47

Android Activity嵌入技术:大屏设备多窗口开发指南

1. Activity嵌入技术全景解析在大屏设备普及的今天&#xff0c;传统单Activity全屏显示模式已无法满足复杂交互需求。Activity嵌入技术&#xff08;Activity Embedding&#xff09;通过将多个Activity同时展示在同一窗口&#xff0c;实现了类似桌面应用的多窗口体验。这项技术最…

作者头像 李华
网站建设 2026/7/27 5:02:55

2026年Linux运维与SRE实战学习路线:从零基础到工程化思维

1. 这篇文章真正要解决的问题你是否也刷到过那些标题诱人的“零基础速成”视频&#xff0c;点进去却发现要么是十年前的老古董&#xff0c;要么是东拼西凑的“缝合怪”&#xff1f;尤其是在Linux运维和SRE这个领域&#xff0c;技术栈日新月异&#xff0c;云原生、容器化、自动化…

作者头像 李华
网站建设 2026/7/27 5:02:25

iPhone17热销背后的芯片性能与用户体验分析

1. 现象观察&#xff1a;iPhone17销量爆发的背后2000万台这个数字在手机行业意味着什么&#xff1f;相当于某些国产品牌全系列产品一年的总销量。iPhone17上市首季就达到这个量级&#xff0c;确实引发了行业震动。但数据背后有几个关键点值得注意&#xff1a;首先&#xff0c;这…

作者头像 李华
网站建设 2026/7/27 5:02:05

C++引用深度解析:从别名到移动语义的编程艺术

1. 项目概述&#xff1a;为什么C引用值得你花时间彻底搞懂&#xff1f;如果你正在学习C&#xff0c;或者已经从C语言转向C&#xff0c;那么“引用”这个概念&#xff0c;绝对是你绕不开、也必须跨过去的一道坎。很多朋友初学时会把它和指针搞混&#xff0c;觉得它“不就是指针的…

作者头像 李华
网站建设 2026/7/27 5:00:32

AI如何提升毕业论文写作效率与质量

1. 毕业论文写作的痛点与破局思路每年毕业季&#xff0c;数百万学子都会陷入论文写作的焦虑循环&#xff1a;选题方向模糊、文献检索低效、写作进度拖延、格式反复调整...传统论文写作流程中&#xff0c;这些痛点消耗着学生90%以上的精力。我在指导过37名本科生论文后发现&…

作者头像 李华