11package love.forte.simbot.codegen
22
33import androidx.compose.animation.AnimatedContent
4+ import androidx.compose.animation.AnimatedVisibility
45import androidx.compose.foundation.layout.*
56import androidx.compose.material3.*
67import androidx.compose.runtime.*
78import androidx.compose.ui.Alignment
89import androidx.compose.ui.Modifier
9- import androidx.compose.ui.graphics.Color
1010import androidx.compose.ui.text.font.FontFamily
1111import androidx.compose.ui.unit.dp
1212import kotlinx.browser.localStorage
1313import love.forte.simbot.codegen.gen.view.GradleSettingsView
1414import org.jetbrains.compose.resources.ExperimentalResourceApi
1515import org.jetbrains.compose.resources.preloadFont
16- import simbot_codegen.composeapp.generated.resources.LXGWNeoXiHeiScreen
17- import simbot_codegen.composeapp.generated.resources.Res
1816import org.w3c.dom.get
1917import org.w3c.dom.set
20- import web.console.console
18+ import simbot_codegen.composeapp.generated.resources.JetBrainsMono_Medium
19+ import simbot_codegen.composeapp.generated.resources.LXGWNeoXiHeiScreen
20+ import simbot_codegen.composeapp.generated.resources.Res
21+
22+ // External JavaScript function declarations
23+ external fun notifyFontLoadingStart ()
24+ external fun notifyFontLoadingComplete ()
2125
2226private const val THEME_PREFERENCE_KEY = " simbot_codegen_theme_preference"
2327
@@ -54,12 +58,25 @@ fun App() {
5458 val lxgwNeo by preloadFont(resource = Res .font.LXGWNeoXiHeiScreen )
5559 val fm = lxgwNeo?.let { FontFamily (it) }
5660
61+ // 通知字体加载状态
62+ LaunchedEffect (Unit ) {
63+ // 应用启动时通知开始加载字体
64+ notifyFontLoadingStart()
65+ }
66+
67+ LaunchedEffect (fm) {
68+ if (fm != null ) {
69+ // 字体加载完成时通知
70+ notifyFontLoadingComplete()
71+ }
72+ }
73+
5774 // 创建主题状态管理,从本地存储加载保存的主题偏好
5875 var colorMode by remember { mutableStateOf(loadThemePreference()) }
5976 val appContext = remember(colorMode) {
6077 AppContext (
6178 colorMode = colorMode,
62- toggleColorMode = {
79+ toggleColorMode = {
6380 val newColorMode = colorMode.toggle()
6481 colorMode = newColorMode
6582 saveThemePreference(newColorMode)
@@ -70,45 +87,30 @@ fun App() {
7087 // 使用带动画过渡的颜色方案
7188 val colorScheme = rememberAnimatedColorScheme(colorMode)
7289
73- AnimatedContent (fm) { fm ->
74- if (fm == null ) {
75- Box (modifier = Modifier .fillMaxSize()) {
76- Column (
77- modifier = Modifier .align(Alignment .Center ),
78- verticalArrangement = Arrangement .Center ,
79- horizontalAlignment = Alignment .CenterHorizontally ,
80- ) {
81- CircularProgressIndicator (modifier = Modifier .align(Alignment .CenterHorizontally ))
82- Spacer (Modifier .padding(8 .dp))
83- Text (" Font loading..." )
84- }
85- }
86- } else {
87- CompositionLocalProvider (LocalAppContext provides appContext) {
88- MaterialTheme (
89- colorScheme = colorScheme,
90- typography = MaterialTheme .typography.copy(
91- displayLarge = MaterialTheme .typography.displayLarge.copy(fontFamily = fm),
92- displayMedium = MaterialTheme .typography.displayMedium.copy(fontFamily = fm),
93- displaySmall = MaterialTheme .typography.displaySmall.copy(fontFamily = fm),
94- headlineLarge = MaterialTheme .typography.headlineLarge.copy(fontFamily = fm),
95- headlineMedium = MaterialTheme .typography.headlineMedium.copy(fontFamily = fm),
96- headlineSmall = MaterialTheme .typography.headlineSmall.copy(fontFamily = fm),
97- titleLarge = MaterialTheme .typography.titleLarge.copy(fontFamily = fm),
98- titleMedium = MaterialTheme .typography.titleMedium.copy(fontFamily = fm),
99- titleSmall = MaterialTheme .typography.titleSmall.copy(fontFamily = fm),
100- bodyLarge = MaterialTheme .typography.bodyLarge.copy(fontFamily = fm),
101- bodyMedium = MaterialTheme .typography.bodyMedium.copy(fontFamily = fm),
102- bodySmall = MaterialTheme .typography.bodySmall.copy(fontFamily = fm),
103- labelLarge = MaterialTheme .typography.labelLarge.copy(fontFamily = fm),
104- labelMedium = MaterialTheme .typography.labelMedium.copy(fontFamily = fm),
105- labelSmall = MaterialTheme .typography.labelSmall.copy(fontFamily = fm),
106- )
107- ) {
108- GradleSettingsView ()
109- }
90+ AnimatedVisibility (fm != null ) {
91+ CompositionLocalProvider (LocalAppContext provides appContext) {
92+ MaterialTheme (
93+ colorScheme = colorScheme,
94+ typography = MaterialTheme .typography.copy(
95+ displayLarge = MaterialTheme .typography.displayLarge.copy(fontFamily = fm),
96+ displayMedium = MaterialTheme .typography.displayMedium.copy(fontFamily = fm),
97+ displaySmall = MaterialTheme .typography.displaySmall.copy(fontFamily = fm),
98+ headlineLarge = MaterialTheme .typography.headlineLarge.copy(fontFamily = fm),
99+ headlineMedium = MaterialTheme .typography.headlineMedium.copy(fontFamily = fm),
100+ headlineSmall = MaterialTheme .typography.headlineSmall.copy(fontFamily = fm),
101+ titleLarge = MaterialTheme .typography.titleLarge.copy(fontFamily = fm),
102+ titleMedium = MaterialTheme .typography.titleMedium.copy(fontFamily = fm),
103+ titleSmall = MaterialTheme .typography.titleSmall.copy(fontFamily = fm),
104+ bodyLarge = MaterialTheme .typography.bodyLarge.copy(fontFamily = fm),
105+ bodyMedium = MaterialTheme .typography.bodyMedium.copy(fontFamily = fm),
106+ bodySmall = MaterialTheme .typography.bodySmall.copy(fontFamily = fm),
107+ labelLarge = MaterialTheme .typography.labelLarge.copy(fontFamily = fm),
108+ labelMedium = MaterialTheme .typography.labelMedium.copy(fontFamily = fm),
109+ labelSmall = MaterialTheme .typography.labelSmall.copy(fontFamily = fm),
110+ )
111+ ) {
112+ GradleSettingsView ()
110113 }
111114 }
112115 }
113-
114116}
0 commit comments