fix: resolve all compilation errors (weight import, asStateFlow, getCookies->get, CoroutineScope import, JsonPrimitive form values, ExperimentalMaterial3Api)

This commit is contained in:
yumoqing 2026-05-18 09:16:37 +08:00
parent 7b881747d3
commit b80d607d51
3 changed files with 24 additions and 8 deletions

View File

@ -1,7 +1,19 @@
package com.bricks.mp.core package com.bricks.mp.core
import androidx.compose.foundation.* import androidx.compose.foundation.*
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.weight
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.horizontalScroll
@ -38,7 +50,9 @@ fun RenderWidget(
// 布局 // 布局
"HBox", "FHBox" -> RenderHBox(resolvedWidget, actionDispatcher) "HBox", "FHBox" -> RenderHBox(resolvedWidget, actionDispatcher)
"VBox", "FVBox" -> RenderVBox(resolvedWidget, actionDispatcher) "VBox", "FVBox" -> RenderVBox(resolvedWidget, actionDispatcher)
"Filler", "HFiller" -> Spacer(modifier = Modifier.weight(1f)) "Filler", "HFiller" -> {
Spacer(modifier = Modifier.weight(1f))
}
"VFiller" -> Spacer(modifier = Modifier.height( "VFiller" -> Spacer(modifier = Modifier.height(
WidgetOptions.getString(resolvedWidget.options, "height", "16").toFloatOrNull()?.dp ?: 16.dp WidgetOptions.getString(resolvedWidget.options, "height", "16").toFloatOrNull()?.dp ?: 16.dp
)) ))
@ -316,7 +330,7 @@ private fun RenderFormWidget(widget: BricksWidget, actionDispatcher: ActionDispa
val updatedBind = bind.copy( val updatedBind = bind.copy(
options = bind.options + mapOf( options = bind.options + mapOf(
"formdata" to kotlinx.serialization.json.buildJsonObject { "formdata" to kotlinx.serialization.json.buildJsonObject {
formValues.forEach { (k, v) -> put(k, v) } formValues.forEach { (k, v) -> put(k, kotlinx.serialization.json.JsonPrimitive(v)) }
} }
) )
) )

View File

@ -8,6 +8,7 @@ import io.ktor.client.plugins.cookies.*
import io.ktor.client.request.* import io.ktor.client.request.*
import io.ktor.client.statement.* import io.ktor.client.statement.*
import io.ktor.http.* import io.ktor.http.*
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import kotlinx.serialization.json.* import kotlinx.serialization.json.*
@ -40,10 +41,10 @@ class SageClient {
// 登录状态 // 登录状态
private val _isLoggedIn = kotlinx.coroutines.flow.MutableStateFlow(false) private val _isLoggedIn = kotlinx.coroutines.flow.MutableStateFlow(false)
val isLoggedIn = _isLoggedIn.asStateFlow() val isLoggedIn: kotlinx.coroutines.flow.StateFlow<Boolean> = _isLoggedIn
private val _loginError = kotlinx.coroutines.flow.MutableStateFlow<String?>(null) private val _loginError = kotlinx.coroutines.flow.MutableStateFlow<String?>(null)
val loginError = _loginError.asStateFlow() val loginError: kotlinx.coroutines.flow.StateFlow<String?> = _loginError
private val mutex = Mutex() private val mutex = Mutex()
@ -82,7 +83,7 @@ class SageClient {
if (widgetType == "Message" || widgetType == "UiMessage") { if (widgetType == "Message" || widgetType == "UiMessage") {
// 检查是否有 session cookie // 检查是否有 session cookie
val cookies = cookieStorage.getCookies(URLBuilder(baseUrl).build()) val cookies = cookieStorage.get(URLBuilder(baseUrl).build())
if (cookies.isNotEmpty()) { if (cookies.isNotEmpty()) {
println("[Sage] Login successful, got ${cookies.size} cookies") println("[Sage] Login successful, got ${cookies.size} cookies")
_isLoggedIn.value = true _isLoggedIn.value = true
@ -197,7 +198,7 @@ class SageClient {
suspend fun logout() = mutex.withLock { suspend fun logout() = mutex.withLock {
try { try {
// 清除 cookies // 清除 cookies
cookieStorage.getCookies(URLBuilder(baseUrl).build()) cookieStorage.get(URLBuilder(baseUrl).build())
_isLoggedIn.value = false _isLoggedIn.value = false
println("[Sage] Logged out") println("[Sage] Logged out")
} catch (e: Exception) { } catch (e: Exception) {

View File

@ -25,8 +25,8 @@ import com.bricks.mp.core.BricksWidget
import com.bricks.mp.core.RenderWidget import com.bricks.mp.core.RenderWidget
import com.bricks.mp.actions.ActionDispatcher import com.bricks.mp.actions.ActionDispatcher
import com.bricks.mp.sage.SageClient import com.bricks.mp.sage.SageClient
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
/** /**
@ -274,6 +274,7 @@ fun LoginScreen(
/** /**
* 主应用界面 * 主应用界面
*/ */
@OptIn(androidx.compose.material3.ExperimentalMaterial3Api::class)
@Composable @Composable
fun MainAppScreen( fun MainAppScreen(
rootWidget: BricksWidget, rootWidget: BricksWidget,