fix(market-ranking): 同步展开状态持久化
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
import router from '@ohos.router';
|
import router from '@ohos.router';
|
||||||
|
import { common } from '@kit.AbilityKit';
|
||||||
|
import { preferences } from '@kit.ArkData';
|
||||||
import {
|
import {
|
||||||
CardData,
|
CardData,
|
||||||
PeriodRange,
|
PeriodRange,
|
||||||
@@ -28,9 +30,8 @@ import {
|
|||||||
|
|
||||||
const NORMAL_SIZE = 3;
|
const NORMAL_SIZE = 3;
|
||||||
const MAX_SIZE = 5;
|
const MAX_SIZE = 5;
|
||||||
const UNFOLDED_STORAGE_KEY = 'firstPageMarketRankingUnfolded';
|
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';
|
||||||
PersistentStorage.persistProp<boolean>(UNFOLDED_STORAGE_KEY, false);
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
export struct MarketRankingNodeComponent {
|
export struct MarketRankingNodeComponent {
|
||||||
@@ -42,7 +43,7 @@ export struct MarketRankingNodeComponent {
|
|||||||
// Tab 选中/展开状态是纯 UI 交互状态,留在 View 里
|
// Tab 选中/展开状态是纯 UI 交互状态,留在 View 里
|
||||||
@State primaryIdx: number = 0;
|
@State primaryIdx: number = 0;
|
||||||
@State secondaryIdx: number = 0;
|
@State secondaryIdx: number = 0;
|
||||||
@StorageLink(UNFOLDED_STORAGE_KEY) unfolded: boolean = false;
|
@State unfolded: boolean = false;
|
||||||
@State tabViewportWidth: number = 0;
|
@State tabViewportWidth: number = 0;
|
||||||
@State tabContentWidth: number = 0;
|
@State tabContentWidth: number = 0;
|
||||||
@State tabScrollOffset: number = 0;
|
@State tabScrollOffset: number = 0;
|
||||||
@@ -56,6 +57,7 @@ export struct MarketRankingNodeComponent {
|
|||||||
};
|
};
|
||||||
|
|
||||||
aboutToAppear(): void {
|
aboutToAppear(): void {
|
||||||
|
this.initUnfoldedState();
|
||||||
this.updateCardConfig();
|
this.updateCardConfig();
|
||||||
emitter.on(EVENT_TCP_RECONNECT, this.tcpReconnectListener);
|
emitter.on(EVENT_TCP_RECONNECT, this.tcpReconnectListener);
|
||||||
if (!this.firstPageVisible) {
|
if (!this.firstPageVisible) {
|
||||||
@@ -527,6 +529,46 @@ export struct MarketRankingNodeComponent {
|
|||||||
// 以下是UI相关
|
// 以下是UI相关
|
||||||
private toggleUnfolded(): void {
|
private toggleUnfolded(): void {
|
||||||
this.unfolded = !this.unfolded;
|
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 {
|
private showTabGradient(): boolean {
|
||||||
|
|||||||
Reference in New Issue
Block a user