From adc8a1cfda11386cb755719265a06971bc7e3754 Mon Sep 17 00:00:00 2001 From: clz Date: Tue, 28 Jul 2026 15:39:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(market-ranking):=20=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=B1=95=E5=BC=80=E7=8A=B6=E6=80=81=E6=8C=81=E4=B9=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MarketRankingNodeComponent.ets | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/entry/src/main/ets/market-ranking/MarketRankingNodeComponent.ets b/entry/src/main/ets/market-ranking/MarketRankingNodeComponent.ets index 329ce92..0903acb 100644 --- a/entry/src/main/ets/market-ranking/MarketRankingNodeComponent.ets +++ b/entry/src/main/ets/market-ranking/MarketRankingNodeComponent.ets @@ -1,4 +1,6 @@ import router from '@ohos.router'; +import { common } from '@kit.AbilityKit'; +import { preferences } from '@kit.ArkData'; import { CardData, PeriodRange, @@ -28,9 +30,8 @@ import { const NORMAL_SIZE = 3; const MAX_SIZE = 5; -const UNFOLDED_STORAGE_KEY = 'firstPageMarketRankingUnfolded'; - -PersistentStorage.persistProp(UNFOLDED_STORAGE_KEY, false); +const SP_FILE_NAME_FIRST_PAGE_MARKET_RANKING = 'sp_file_name_first_page_market_ranking'; +const SP_KEY_FIRST_PAGE_MARKET_RANKING_EXPAND = 'sp_key_first_page_market_ranking_expand'; @Component export struct MarketRankingNodeComponent { @@ -42,7 +43,7 @@ export struct MarketRankingNodeComponent { // Tab 选中/展开状态是纯 UI 交互状态,留在 View 里 @State primaryIdx: number = 0; @State secondaryIdx: number = 0; - @StorageLink(UNFOLDED_STORAGE_KEY) unfolded: boolean = false; + @State unfolded: boolean = false; @State tabViewportWidth: number = 0; @State tabContentWidth: number = 0; @State tabScrollOffset: number = 0; @@ -56,6 +57,7 @@ export struct MarketRankingNodeComponent { }; aboutToAppear(): void { + this.initUnfoldedState(); this.updateCardConfig(); emitter.on(EVENT_TCP_RECONNECT, this.tcpReconnectListener); if (!this.firstPageVisible) { @@ -527,6 +529,46 @@ export struct MarketRankingNodeComponent { // 以下是UI相关 private toggleUnfolded(): void { this.unfolded = !this.unfolded; + try { + const store: preferences.Preferences | undefined = this.getPreferenceStore(); + if (store === undefined) { + return; + } + store.putSync(SP_KEY_FIRST_PAGE_MARKET_RANKING_EXPAND, this.unfolded); + store.flush().catch((error: Error) => { + console.error(`[MarketRanking] persist unfolded state failed: ${error.message}`); + }); + } catch (error) { + console.error(`[MarketRanking] persist unfolded state failed: ${JSON.stringify(error)}`); + } + } + + private initUnfoldedState(): void { + try { + const store: preferences.Preferences | undefined = this.getPreferenceStore(); + if (store === undefined) { + this.unfolded = false; + return; + } + this.unfolded = + store.getSync(SP_KEY_FIRST_PAGE_MARKET_RANKING_EXPAND, false) as boolean; + } catch (error) { + console.error(`[MarketRanking] read unfolded state failed: ${JSON.stringify(error)}`); + this.unfolded = false; + } + } + + private getPreferenceStore(): preferences.Preferences | undefined { + try { + const context: common.UIAbilityContext = + this.getUIContext().getHostContext() as common.UIAbilityContext; + return preferences.getPreferencesSync(context, { + name: SP_FILE_NAME_FIRST_PAGE_MARKET_RANKING, + }); + } catch (error) { + console.error(`[MarketRanking] get preference store failed: ${JSON.stringify(error)}`); + return undefined; + } } private showTabGradient(): boolean {