46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { useEffect } from 'react';
|
||
import { Stack } from 'expo-router';
|
||
import { useTranslation } from 'react-i18next';
|
||
|
||
import { ensureDailyWidgetRecoUpToDate, syncWidgetConfig, syncWidgetUserProfileFromStorage } from '@/src/modules/dailyWidgetReco';
|
||
|
||
export default function AppLayout() {
|
||
const { t } = useTranslation();
|
||
|
||
useEffect(() => {
|
||
// 小组件数据同步(仅 iOS 生效;内部会判断原生模块是否可用)
|
||
// 目的:避免“仅 Onboarding 写入一次”导致老用户小组件一直显示兜底文案
|
||
void (async () => {
|
||
await syncWidgetConfig();
|
||
await syncWidgetUserProfileFromStorage();
|
||
await ensureDailyWidgetRecoUpToDate({ reason: 'app_start' });
|
||
})();
|
||
}, []);
|
||
|
||
return (
|
||
<Stack
|
||
screenOptions={{
|
||
headerTitleAlign: 'center',
|
||
}}
|
||
>
|
||
<Stack.Screen
|
||
name="home"
|
||
options={{
|
||
// Home 页不使用系统 Header,避免 iOS 原生导航栏自带的“毛玻璃/液玻璃”材质
|
||
headerShown: false,
|
||
// 卡片页标题按设计留空(右上角为 icon 按钮)
|
||
title: '',
|
||
headerShadowVisible: false,
|
||
}}
|
||
/>
|
||
<Stack.Screen
|
||
name="settings"
|
||
options={{
|
||
title: t('settings.title'),
|
||
}}
|
||
/>
|
||
</Stack>
|
||
);
|
||
}
|
||
|