当前位置: 首页 > news >正文

AI取名大师 | uni-app + Wot UI 跟随设备自动切换明暗主题

关于 AI 取名大师

借助豆包通义千问DeepSeek 等 AI 大模型,为您的宝宝、宠物、店铺、网名、笔名、项目、产品、服务、文章等取一个专业、有意义的名字😄。


开源地址:👉GitCode(国内友好)👈、👉GitHub👈
技术组合:Bun.js、Elysia.js、uni-app
体验地址:AI取名大师(H5版)

特别注明:本系列文章仅为实战经验分享,并记录开发过程中碰到的问题😄,如有不足之处欢迎随时留言提出。


📣 问题简述

运行程序时,偶尔会碰到明亮、暗黑主题错乱的问题(如下图),要么是背景 light 而组件 dark,或者是背景 dark 而组件 light,非常影响视觉效果😂。

🤔 原因分析

程序使用 pinia 状态库记录是否启用暗黑主题,参考的是 snail-uni 模板 的做法。

export const useUIStore = defineStore('ui', {state:()=>({dark: false}),actions: {setDark (v){if(this.dark == v)  returnthis.dark = v}},unistorage: true
})

整体流程如下:

  1. 应用 onLaunch:通过 uni.onThemeChange 监听主题变更以更新状态库的 dark
  2. 页面根据dark的值设置明暗主题
  3. dark 值变动后页面也跟着变换主题

这看起来是很正常的一个逻辑,但是在以下情况就出问题了:

  1. 状态库dark的值是true
  2. 系统的外观为浅色
  3. 此时打开页面就会出现:背景浅色而组件深色😔
  4. 反之就是背景深色而组件浅色

究其原因就是页面加载时没有判断dark的值与当前系统外观是否一致。

🛠️ 修复

找到原因后,我们对症下药:页面加载后直接更新外观值,而不仅限于uni.onThemeChange

// App.vue
<script setup>import { updateToken } from '@U'import { useUIStore, useDataStore } from '@/store'const uiStore = useUIStore()const dataStore = useDataStore()const updateTheme = ({ theme }) => {uiStore.setDark(theme == 'dark')}onLaunch(() => {const info = uni.getSystemInfoSync()let theme = info.osTheme || info.hostThemeupdateTheme({ theme })uni.onThemeChange(updateTheme)})
</script>

在页面中使用:

<template><view :class="{ 'wot-theme-dark': uiStore.dark }" :style="style"></view>
</template><script setup>import { useUIStore } from '@/store'const uiStore = useUIStore()
</script>

❓ 扩展思考

经过上面的调整,能够实现随系统自动切换外观配色,那有没有可能由用户自己选择吗?

目前还没有想到好的解决办法,因为出现应用与系统外观不一致的话,就会复现上面的问题😔。我观察了下,主流的 uni-app 模板也都是跟随系统。

如果各路大神有好的思路请留言😄。

http://www.dtcms.com/a/609146.html

相关文章:

  • 镜像站更新
  • 《uni-app跨平台开发完全指南》- 07 - 数据绑定与事件处理
  • 福州网站建设方案咨询免费观看电视剧软件
  • 虚拟机网站建设与管理wordpress前台修改密码
  • 福州绿光网站建设工作室合肥那个公司做网站优化好
  • Java基础——方法
  • 设计模式实战篇(二):业务逻辑“随时切换招式”——策略模式(Strategy Pattern)解析
  • 从“能说会道”到“自主思考”:一文读懂AI的过去、现在与未来
  • Python语言编译器 | Python语言编译器的使用与原理解析
  • 【JAVA 进阶】Spring Boot 注解体系与工程实践
  • Effective Python 第51条:优先考虑通过类修饰器来提供可组合的扩充功能,不要使用元类
  • Rust时序数据库实现:从压缩算法到并发优化的实战之旅
  • SpringCloud-Consul服务注册与发现
  • 网站建设原因分析wordpress 页面分页
  • SSH级知识管理:通过CPolar暴露Obsidian vault构建你的知识API服务,实现跨设备无缝同步
  • 《Linux系统编程之进程基础》【进程入门】
  • Hello-agents TASK03 第四章节 智能体经典范式构建
  • C++ 二叉搜索树(BST)完全指南:从概念原理、核心操作到底层实现
  • 电子电气架构 --- 哨兵模式初入门
  • 桌面开发,在线%考试管理%系统,基于eclipse,java,swing,mysql数据库。
  • 超融合架构的核心组件与协同机制深度解析
  • 桌面开发,在线%图书管理%系统,基于eclipse,jdk,java,swing,sqlserver数据库
  • 快速学会做网站网站建设公司怎么推广
  • 无需 iTunes 备份与恢复 iPhone 的 2 种方法
  • 【Linux】Ubuntu图形界面崩溃(无法进入)的解决方法汇总
  • Lidar调试记录Ⅳ之Ubuntu22.04+ROS2+Livox_SDK2环境下编译Livox ROS Driver 2
  • 网站收录查询网摘抄一则新闻
  • 做电影网站违法么深圳网站建设10强
  • 荆州北京网站建设如何自己做网页链接
  • 网站建设开发教程视频网站如何建设目录