首页/新闻资讯/正文详情

flutter使用getx实现主题色切换

发布时间:2026/9/22 16:06:03 来源:云帆数科 栏目:资讯中心
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 ListColor _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 未知; }

相关推荐

C语言函数重载实现:基于_Generic的零开销方案
C语言函数重载实现:基于_Generic的零开销方案

1. 项目概述:为什么要在C语言里“折腾”函数重载?干了这么多年嵌入式,用C语言写了无数行代码,最怀念C的什么特性?函数重载绝对能排进前三。在C里,你可以写print(int)、print(float)、print(const char*)&am… · 2026/9/12 4:49:39

TMS320C54x DSP时钟配置实战:PLL原理、CLKMD寄存器详解与避坑指南
TMS320C54x DSP时钟配置实战:PLL原理、CLKMD寄存器详解与避坑指南

1. 项目概述与核心价值在嵌入式DSP系统开发中,时钟配置往往是项目启动的第一步,也是最容易踩坑的一步。我接触TMS320C54x系列DSP已经超过十年,从早期的C541到后来的VC549都用过,可以说,一个稳定、高效的时钟系统是整个… · 2026/9/21 6:17:16

生命涌现的小龙虾技能之【Outdoor Sports Event Risk Analysis Tool | 户外体育赛事风险分析工具】简介
生命涌现的小龙虾技能之【Outdoor Sports Event Risk Analysis Tool | 户外体育赛事风险分析工具】简介

🏃 Outdoor Sports Event Risk Analysis Tool | 户外体育赛事风险分析工具 智能分析中枢 图片/视频智能分析 结构化报告 历史报告云端查询 🧭 技能概览 | Overview 模块内容🏷️ 技能名称户外体育赛事风险分析工具🎯 核心目标… · 2026/9/20 2:23:21

杭州美景盖世无双:转行运维开发3个实战项目避坑全记录
杭州美景盖世无双:转行运维开发3个实战项目避坑全记录

杭州美景盖世无双:转行运维开发3个实战项目避坑全记录 看了一堆教程还是不会写项目?这是大多数转行者在杭州求职时最扎心的现实。你背熟了Linux命令,Python脚本也能跑通几个小例子,但一面对真实的 实战项目… · 2026/9/22 16:05:54

3个坑点拆解2026最新不怕神一样的对手就怕猪一样的队友实战
3个坑点拆解2026最新不怕神一样的对手就怕猪一样的队友实战

3个坑点拆解2026最新不怕神一样的对手就怕猪一样的队友实战 刚毕业那会儿,我最大的错觉就是:只要把 Python 的 for 循环和 if… · 2026/9/22 16:05:40

一文搞懂意大利沙发品牌前十名:源码级拆解选型逻辑
一文搞懂意大利沙发品牌前十名:源码级拆解选型逻辑

一文搞懂意大利沙发品牌前十名:源码级拆解选型逻辑 报错一堆看不懂 StackTrace,心里慌不慌? 很多初学者刚接触“意大利沙发品牌前十名”这个看似玄学的概念,脑子里全是乱码。 其实,选沙发就像读源码,底层逻辑是一样的。… · 2026/9/22 16:05:14

抄股票基础知识l完整示例
抄股票基础知识l完整示例

股票API升级踩坑?这份保姆级教程帮你搞懂底层逻辑 版本升级后 API 全变了,接口文档看着眼晕,旧代码直接报错?别慌,这篇保姆级教程带你从底层原理拆解股票数据获取的核心机制,彻底解决“改代码就崩溃”的顽疾。很多开发者在对接行情数据时,总被… · 2026/9/22 16:05:06

招聘简历表格踩坑实录:源码解析避坑指南
招聘简历表格踩坑实录:源码解析避坑指南

招聘简历表格踩坑实录:源码解析避坑指南 官方文档那一套,谁看谁头疼。几百页的PDF,搜半天找不到关键配置项,直接劝退。 别再对着文档死磕了,直接上 源码解析 。… · 2026/9/22 16:05:06

6515b避坑指南:3步搞定配置不再卡半天
6515b避坑指南:3步搞定配置不再卡半天

6515b避坑指南:3步搞定配置不再卡半天 配置环境就卡半天,代码还没写一行,心态先崩了。别急着骂系统,大概率是版本依赖没对齐。这份6515b避坑指南,直接给你一套可复现的实战路径,从目录结构到核心代码,全程无废话。 项目目标与场景定位… · 2026/9/22 16:04:32

5个电影海报图片处理坑,新手避坑指南
5个电影海报图片处理坑,新手避坑指南

5个电影海报图片处理坑,新手避坑指南 刚写完代码,一运行屏幕直接炸了。满屏红色的 StackTrace 滚得比弹幕还快,什么 NullPointerException 、 ImageIO.read() returned null 、… · 2026/9/22 0:00:07

注册微信公众账号:一文搞懂从0到1全流程
注册微信公众账号:一文搞懂从0到1全流程

注册微信公众账号:一文搞懂从0到1全流程 复制来的代码跑不通,报错信息满屏飞,到底卡在哪?别急,咱们先停下手里的调试。很多开发者觉得注册微信公众账号只是填个表单、传个身份证那么简单,真上手才发现坑深不见底。今天这篇 一文搞懂… · 2026/9/22 0:00:07

手写实现图片压缩网站核心:搞定WebP转换与质量调优
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站… · 2026/9/22 0:00:19

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码