@@ -6,35 +6,60 @@ import androidx.compose.foundation.layout.Column
66import androidx.compose.foundation.layout.fillMaxSize
77import androidx.compose.foundation.layout.padding
88import androidx.compose.foundation.layout.size
9+ import androidx.compose.foundation.rememberScrollState
910import androidx.compose.foundation.shape.RoundedCornerShape
11+ import androidx.compose.foundation.verticalScroll
1012import androidx.compose.material.icons.Icons
1113import androidx.compose.material.icons.filled.Menu
14+ import androidx.compose.material3.AlertDialog
1215import androidx.compose.material3.Button
1316import androidx.compose.material3.ExperimentalMaterial3Api
1417import androidx.compose.material3.Icon
1518import androidx.compose.material3.IconButton
1619import androidx.compose.material3.Scaffold
1720import androidx.compose.material3.Text
21+ import androidx.compose.material3.TextButton
1822import androidx.compose.material3.TopAppBar
1923import androidx.compose.material3.TopAppBarDefaults
2024import androidx.compose.runtime.Composable
25+ import androidx.compose.runtime.LaunchedEffect
26+ import androidx.compose.runtime.getValue
27+ import androidx.compose.runtime.mutableStateOf
2128import androidx.compose.runtime.remember
29+ import androidx.compose.runtime.setValue
2230import androidx.compose.ui.Alignment
2331import androidx.compose.ui.Modifier
2432import androidx.compose.ui.draw.clip
2533import androidx.compose.ui.graphics.Color
2634import androidx.compose.ui.layout.ContentScale
2735import androidx.compose.ui.platform.LocalContext
2836import androidx.compose.ui.res.painterResource
37+ import androidx.compose.ui.res.stringResource
2938import androidx.compose.ui.unit.dp
39+ import coil3.compose.rememberAsyncImagePainter
3040import com.wifi.toolbox.MyApplication
3141import com.wifi.toolbox.R
32- import coil3. compose.rememberAsyncImagePainter
42+ import dev.jeziellago. compose.markdowntext.MarkdownText
3343
3444@OptIn(ExperimentalMaterial3Api ::class )
3545@Composable
3646fun AboutScreen (onMenuClick : () -> Unit ) {
37- val app = LocalContext .current.applicationContext as MyApplication
47+ val context = LocalContext .current
48+ val app = context.applicationContext as MyApplication
49+
50+ var showDialog by remember { mutableStateOf(false ) }
51+ var changelogText by remember { mutableStateOf(" " ) }
52+
53+ LaunchedEffect (showDialog) {
54+ if (showDialog && changelogText.isEmpty()) {
55+ changelogText = try {
56+ context.assets.open(" CHANGELOG.md" ).bufferedReader().use { it.readText() }
57+ } catch (e: Exception ) {
58+ " "
59+ }
60+ }
61+ }
62+
3863 Box (
3964 modifier = Modifier .fillMaxSize(),
4065 ) {
@@ -44,6 +69,7 @@ fun AboutScreen(onMenuClick: () -> Unit) {
4469 modifier = Modifier .fillMaxSize(),
4570 contentScale = ContentScale .FillBounds
4671 )
72+
4773 Scaffold (
4874 topBar = {
4975 TopAppBar (
@@ -69,33 +95,52 @@ fun AboutScreen(onMenuClick: () -> Unit) {
6995 .fillMaxSize(),
7096 contentAlignment = Alignment .Center ,
7197 ) {
72- Column {
73- Text (" 前面的区域,以后再来探索吧" )
74- Button (
75- onClick = { app.alert(" 标题" , " 点什么点" ) }
76- ) {
77- Text (" test" )
78- }
79- val context = LocalContext .current
80- // 获取 AdaptiveIconDrawable 并包装
98+ Column (horizontalAlignment = Alignment .CenterHorizontally ) {
8199 val drawable = remember(R .mipmap.ic_launcher) {
82100 context.packageManager.getDrawable(
83101 context.packageName,
84102 R .mipmap.ic_launcher,
85103 context.applicationInfo
86104 )
87105 }
88-
89106 Image (
90- // 使用 rememberDrawablePainter 包装 Drawable
91- painter = rememberAsyncImagePainter(model = R .mipmap.ic_launcher),
107+ painter = rememberAsyncImagePainter(model = drawable),
92108 contentDescription = " App Icon" ,
93109 modifier = Modifier
94110 .size(108 .dp)
95111 .clip(RoundedCornerShape (16 .dp))
96112 )
113+ Text (stringResource(R .string.app_name))
114+ Button (
115+ onClick = { showDialog = true }
116+ ) {
117+ Text (" 更新日志" )
118+ }
97119 }
98120 }
99121 }
122+
123+ if (showDialog) {
124+ AlertDialog (
125+ onDismissRequest = { showDialog = false },
126+ confirmButton = {
127+ TextButton (onClick = { showDialog = false }) {
128+ Text (" 确定" )
129+ }
130+ },
131+ title = { Text (" 更新日志" ) },
132+ text = {
133+ Box (
134+ modifier = Modifier
135+ .verticalScroll(rememberScrollState())
136+ ) {
137+ MarkdownText (
138+ modifier = Modifier .padding(8 .dp),
139+ markdown = changelogText,
140+ )
141+ }
142+ }
143+ )
144+ }
100145 }
101- }
146+ }
0 commit comments