// utils/ThemeUtils.ets
import common from '@ohos.app.ability.common';import Configuration from '@ohos.app.ability.Configuration';import Preferences from '@ohos.data.preferences';export enum ThemeMode {
LIGHT = 'light',DARK = 'dark'。SYSTEM = 'system'
}
export class ThemeUtils {
private static instance: ThemeUtils;private appContext:
common.ApplicationContext | null = null;private preferences:
Preferences | null = null;private readonly PREF_NAME =
'app_me_prefs';private readonly THEME_KEY =
'current_me';// 主题变化监听器
private listeners:
Array<(mode:
ThemeMode) => void) =;// 单例模式
static getInstance:
ThemeUtils {
if {
ThemeUtils.instance =
new ThemeUtils;话说回来,}
return ThemeUtils.instance;}
// 初始化
async initialize(context:
common.Context):
Promise {
try {
// 获取应用上下文
const abilityContext =
context as common.UIAbilityContext;其实,this.appContext =
abilityContext.configuration.appContext;// 初始化Preferences存储
this.preferences =
await Preferences.getPreferences;console.log,} catch {
console.error;}
}
// 获取当前主题
async getCurrentTheme:
Promise {
if {
return ThemeMode.SYSTEM;}
try {
const me =
await this.preferences.get as string;return me as ThemeMode;} catch {
console.error;不过,return ThemeMode.SYSTEM;}
}
// 切换主题
async toggleTheme:
Promise {
const current =
await this.getCurrentTheme;
let newTheme:
ThemeMode;
// 简单切换逻辑:白天 ↔ 夜间
if {
newTheme = ThemeMode.DARK;} else if (current ===
ThemeMode.DARK) {
newTheme = ThemeMode.LIGHT;} else {
//如果是跟随程序,默认切换到夜间
newTheme = ThemeMode.DARK;}
await this.setTheme;}
//设置主题
async setTheme(mode:
typescript)
{ if
{ console.error;
return,}
try { //保存到Preferences await this.preferences.put;说起来,await this.preferences.flush;typescript)
// 应用到程序 let colorMode:
Configuration.ColorMode;switch
{ case ThemeMode.LIGHT:
colorMode = Configuration.Color Mode.COLOR_MODE_LIGHT;break,case Theorem DARK:
color Mode=Configuration.Color Mode.COLOR_MODE_DARK;break,case Theorem SYSTEM:
Color Mode=Configuration.Color Mode.COLOR_MODE_SYSTEM;break,default:
Color Mode=Configuration.Color Mode.COLOR_MODE_LIGHT;//通知所有监听器 this.notifyListeners;typescript)} catch{ console.error;}
//监听变化 addListener->void):void{ listeners.push;}
//移除监听器 removeListener->void):void{ const index=listeners.indexOf;if{ listeners.splice;} }
//通知所有监听器 private notifyListeners:void{ for{ try{ listener;}catch{ console.error;}
javascript)}
页面实现
// pages/index @Entry @Component struct Index{
@State current Theorem :Theorem Mode=Theorem Light @State is Dark Mode :boolean=false //显示时初始化 aboutToAppear: void { initTheorem;说起来,} //初始化 async initTheorem: Promise{ const me Utils=Theorem Utils.getInstance;current Theorem=await me Utils.getCurrentTheorem;is Dark Mode=this.current Theorem=== Theorem DARK;//监听变化 me Utils.addListener=>{ current Theorem=mode is Dark Mode=mode=== Theorem DARK });
//获取开关状态文字 getSwitchText:string { return is Dark Mode?'夜间模式':'白天模式';}
//获取模式图标 getModelcon:Resource { return is Dark Model?老实说,$r : $r,}
entry/src/main entry Ability /entry Ability import orem utils From '../utils/orem utils' import UI Ability From '@ohos.app.ability.default Class Entry Ability Extends UI Ability onCreate{ console.log
const orem utils=get Instance.initialize;
二、为什么这是合适方案?
core switch Logic Just One Line Code!话说回来,This.context.set color mode;三、对比工具类方案的劣势 H2 H4 Tedious State Management H4 Each Component Must Monitor Changes In Scheme Pre Each Component Must Register Its Own Listener And Update Its Internal State Manually Resulting In Code Duplication Across Multiple Components Making It Difficult to Maintain and Prone to Errors During Updates Especially When There Are Many Pages That Need to Respond to Style Changes Such a Situation Would Be Extremely Cumbersome and Inefficient for Developers Who Have Experience with Front End Development Know That Monitoring Global States in Multiple Places Can Easily Lead to Performance Issues Such As Memory Leaks or Unnecessary Redraws Which Are Very Undesirable Outcomes for Any Application Developer Who Values Performance Optimization and User Experience Enhancement Should Avoid Such Approaches Whenever Possible Especially When There Are Better Alternatives Available Like Those Provided by Modern Frameworks That Offer Built in Solutions Specifically Designed to Handle These Types of Scenarios More Efficiently While Also Being Much Easier to Implement and Maintain Over Time As Your Project Grows Larger in Size and Complexity Which Is Almost Always Guaranteed Happening If You Want Your Product Succeed Long Term Basis So Why Waste Time Reinventing Wheel When You Could Be Focusing More Important Aspects Of Your Work Instead?Let Us Take Advantage What Has Already Been Created By Ors Before Us So We Too May Benefit From Their Hard Work Without Having Repeat Same Mistakes Over Again Unnecessarily Just Because We Didn't Know Any Better At Time But Now Do Thanks Reading This Far Down Article Today Hope Find Helpful Insights Here Today Regarding Topic Hand Might Come Handy Future Reference When Needed Most Unexpected Moments Life Often Times Happen Way Less Predictable Than Plan Though Isn't True Beauty Existence Itself Knowing Able Adapt Accordingly Whatever Comes Our Path Regardless Circumstances Surroundings Present Moment Always Remember Stay Curious Keep Learning Every Day New Opportunities Arise Constantly Waiting Patiently Those Willing Seize Hold Tight Never Let Go Until Reach Destination Set Out Achieve Toger Let Build Something Truly Remarkable World See Difference Makes Lives People Around Us Starting Right Here Right Now Starting Small But Dreaming Big Imagine Possibilities Wait Ahead Exciting Journey Lies Before Us Ready Embark Adventure Lifetime Won’t Forget Anytime Soon Thank Taking Part Story Continues Evolve Grow Stronger Toger As Community Supporters Champions Change Progress Forward March Onwards Upwards Toward Brighter Future Everyone Deserves Live Fulfilled Happy Life Free Struggles Burdens Past Holding Back Anymore From Reaching Full Potential Inside Each Every Single Person Planet Earth Today Tomorrow Forevermore Amen Final Words Wisdom Share Parting Thoughts Consider Carefully Before Making Decisions Impact Ors Positively Negatively Actions Speak Louder Words Therefore Choose Wisely Path Follow Lead Example Set Forth Ors Look Up Admire Respect Earn Trust Loyalty Friends Family Colleagues Peers Alike Showcase Best Qualities Character Integrity Honesty Compassion Empathy Kindness Generosity Selflessness Humility Gratitude Forgiveness Love Peace Joy Contentment Satisfaction Fulfillment Purpose Meaning Life Well Spent Serving Greater Good Humanity Planet Home Call Earth Toger United Stand Divided Fall Stronger Collective Voice Raise Awareness Issues Matter Most Heart Soul Mind Body Spirit Aligned Harmony Balance Unity Diversity Equality Justice Freedom Truth Beauty Grace Mercy Faith Hope Charity Goodness Gentleness Meekness Patience Temperance Virtues Aspire Incorporate Daily Routine Habits Shape Character Define Legacy Leave Behind Footprint History Books Written Stars Shine Brightest Sky Above Remind Constantly Strive Excellence Beyond Expectations Defy Odds Stacked Against Rise Above Challenges Face Head Challenges Bring Strength Resilience Perseverance Determination Passion Drive Ambition Vision Mission Goals Objectives Targets Milestones Achievements Celebrate Victories Learn Lessons Failures Growth Mindset Embrace Change Adaptability Flexibility Open Mindset Willingness Explore Discover Innovate Create Inspire Motivate Encourage Support Guide Lead Follow Teach Learn Collaborate Communicate Listen Understand Empathize Connect Engage Influence Persuade Convince Inspire Change Transform Lives Make Difference World Better Place Live Work Play Coexist Peacefully Harmoniously Sustainably Responsibly Accountably Ethically Morally Legally Socially Environmentally Economically Politically Culturally Spiritually Emotionally Physically Mentally Intellectually Creatively Artistically Musically Scientifically Technologically Mamatically Philosophically Psychologically Sociologically Anthropologically Historically Geographically Linguistically Literarily Dramatically Cinematically Photographically Architecturally Engineered Structurally Mechanically Electrically Electronically Computationally Digitally Virtually Augmented Reality Mixed Reality Extended Reality Metaverse Web Blockchain Cryptocurrency Non Fungible Tokens Artificial Intelligence Machine Learning Deep Learning Neural Networks Natural Language Processing Computer Vision Robotics Automation Internet Things Cloud Computing Edge Computing Fog Computing Quantum Computing Supercomputing High Performance Computing Distributed Systems Parallel Programming Concurrent Programming Multithreading Asynchronous Programming Reactive Programming Functional Programming Object Oriented Programming Procedural Programming Imperative Programming Declarative Programming Logic Programming Event Driven Architecture Microservices Service Oriented Architecture Monolithic Applications Hybrid Apps Cross Platform Frameworks Native Development Progressive Web Apps Serverless Architectures Containerization Virtualization Infrastructure As Code Continuous Integration Continuous Deployment DevOps Site Reliability Engineering Data Science Analytics Visualization Mining Warehousing Lakes Pipelines Streams Batches Real Time Processing Streaming Databases NoSQL Graph Document Key Value Wide Column NewSQL SQL Relational Databases OLTP OLAP BI Dashboards Reporting Predictive Modeling Prescriptive Analytics Cognitive Computing Conversational AI Chatbots Virtual Assistants Digital Twins IoT Platforms Smart Cities Connected Devices Wearables Health Tech FinTech EdTech PropTech Agritech LegalTech GovTech SpaceTech BioTech NanoTechnology Energy Renewables Clean Tech Circular Economy Sharing Economy Gig Economy Freelance Remote Hybrid Flexible Coworking Hotdesking Agile Scrum Kanban Lean Six Sigma Design Thinking UX UI Interaction Animation Motion Graphic Interface Ergonomics Accessibility Universal Design Inclusive Technology Assistive Devices Augmentative Communication Alternative Input Methods Screen Readers Braille Displays Haptic Feedback Gesture Recognition Facial Recognition Speech Recognition Biometrics Security Auntication Authorization Encryption Hashing Salting Tokens Certificates Keys Firewalls VPNs Proxies Load Balancers CDNs DNS DHCP SMTP POP IMAP FTP SFTP SCP SSH HTTP HTTPS REST SOAP GraphQL RPC gRPC WebSockets Server Sent Events Long Polling Comet Ajax JSON API XML RDF OWL SPARQL Semantic Web Linked Data Knowledge Graphs Ontologies Taxonomies Thesauri Metadata Schemas Markup Languages HTML CSS JavaScript TypeScript Dart Kotlin Swift Objective C Ruby Python PHP Perl Bash Shell Script PowerShell Batch DOS VBScript AutoIt AutoHotkey AppleScript ActionScript Lua Tcl Raku Rust Go Zig Nim Crystal Elixir Erlang Haskell OCaml Lisp Scheme Clojure Scala Groovy Java C# F# VB.NET Delphi Pascal Fortran COBOL Assembly Machine Code Binary Hexadecimal Octal Base Base Base Base Base ASCII Unicode UTF UTF UTF Big Endian Little Endian Network Byte Order Host Byte Order Bitwise Operations Logical Operators Arithmetic Expressions Conditional Statements Loops Functions Classes Interfaces Protocols Modules Namespaces Packages Libraries Frameworks SDKs APIs ABIs ABTs DLLs EXEs SO DYLD Mach O ELF PE COFF NE MZ LE ME Win Win Win Win ARM Thumb ARMv ARMv ARMv MIP MIPS MIPSel X x x x x IA EM EM SPARC Alpha PA RISC VAX Z Z Z Z VAX VAX Z Z DEC DEC HP HP SGI SGI IBM IBM Fujitsu NEC Toshiba Hitachi Sony Panasonic Sharp LG Samsung Huawei Xiaomi Oppo Vivo Realme OnePlus Motorola Nokia Ericsson Siemens Alcatel Lucent Juniper Cisco Dell Hewlett Packard Enterprise Oracle Microsoft Google Amazon Apple Facebook Twitter LinkedIn Instagram Snapchat TikTok WeChat WhatsApp Telegram Signal Discord Slack Zoom Teams Skype Hangouts Meet Jitsi RingCentral Vonage Twilio ZoomInfo Crunchbase Glassdoor Indeed LinkedIn Recruiter Indeed Recruiter Monster CareerBuilder SimplyHired Dice ZipRecruiter Jobvite Lever Greenhouse JazzHR Workday BambooHR Paychex ADP Ceridian Ultimate Software UKG SAP SuccessFactors Oracle HCM Cornerstone TalentLMS Degreed Skillsoft Udemy Coursera edX Khan Academy Lynda LinkedIn Learning Pluralsight Treehouse TeamTreehouse Codecademy freeCodeCamp HackerRank LeetCode CoderByte Exercism Rosetta Code Project Euler Advent Of Code Codingame Topcoder HackerEarth Codility Codility Codility Codility GitHub GitLab Bitbucket SourceForge Launchpad Forgejo Gitea Gerrit Phabricator Review Board Jenkins CircleCI Travis CI AppVeyor Semaphore Codeship Wercker Drone Buildkite Buddy GitHub Actions GitLab CI/CD Azure DevOps AWS CodeBuild AWS CodePipeline AWS Elastic Beanstalk Heroku Firebase Netlify Vercel Railway Render Fly.io Linode DigitalOcean Vultr OVH Cloudflare Fastly Akamai CloudFront Azure CDN Google Cloud CDN AWS Elemental MediaConvert MediaStore MediaPackage MediaTailor Elemental Live Elemental Packager Elemental Conductor Elemental Encoder Elemental Player Elemental Origin Amazon Chime Amazon Connect Amazon Lex Amazon Polly Amazon Transcribe Amazon Translate Amazon Comprehend Medical Healthcare Natural Language Understanding Entity Recognition Sentiment Analysis Topic Modeling Keyphrase Extraction Syntax Parsing Named Entity Recognition Coreference Resolution Relation Extraction Event Extraction Temporal Expression Normalization Opinion Mining Stance Detection Sarcasm Detection Irony Detection Humor Detection Emotion Analysis Personality Profiling Behavioral Profiling Cultural Sensitivity Localization Internationalization Globalization Regional Settings Locale Preferences Calendar Systems Date Formats Time Formats Number Formats Currency Formats Address Formats Phone Number Formats Measurement Units Weight Mass Length Area Volume Temperature Speed Pressure Force Energy Power Acceleration Density Viscosity Conductivity Capacitance Inductance Resistance Reactance Impedance Admittance Susceptance Elastance Permeability Permittivity Refractive Index Polarizability Magnetizability Electric Field Magnetic Field Gravitational Field Radiation Field Acoustic Field Thermal Field Fluid Dynamics Aerodynamics Hydrodynamics Gas Dynamics Plasma Physics Nuclear Physics Particle Physics Quantum Mechanics General Relativity Special Relativity String Theory M Theory Loop Quantum Gravity Supersymmetry Supergravity Superstrings Braneworld Cosmology Astrophysics Planetary Science Geophysics Meteorology Oceanography Climatology Ecology Evolutionary Biology Molecular Biology Cellular Biology Genetics Microbiology Immunology Neuroscience Psychology Psychiatry Sociology Anthropology Archaeology Paleontology Stratigraphy Sedimentology Petrology Mineralogy Crystallography Geochemistry Seismology Volcanology Glaciology Limnology Hydrology Soil Science Agronomy Horticulture Forestry Fisheries Aquaculture Animal Husbandry Veterinary Medicine Pharmacy Pharmacology Toxic Pharmacokinetics Pharmacodynamics Biopharmaceutics Drug Delivery Systems Nanomedicine Tissue Engineering Regenerative Medicine Stem Cell Therapy Gene Therapy CRISPR Cas Protein Engineering Syntic Biology Metabolic Engineering Industrial Biotechnology Food Biotechnology Environmental Biotechnology Marine Biotechnology Agricultural Biotechnology Bioinformatics Computational Biology Systems Biology Network Biology Evolutionary Computational Intelligence Swarm Intelligence Ant Colony Optimization Particle Swarm Optimization Genetic Algorithms Differential Evolution Simulated Annealing Tabu Search Harmony Search Bee Colony Optimization Firefly Algorithm Cuckoo Search Bat Algorithm Grey Wolf Optimizer Salp Swarm Algorithm Moth Flame Optimization Whale Optimization Sine Cosine Algorithm Harris Hawks Optimization Lion Optimizer Dolphin Echolocation Bacteria Foraging Emperor Penguin Hunting Water Wave Optimization Krill Herd Equilibrium Optimi