Я только начал изучать котлин и Jetpack Compose поэтому не судите строго.
У меня есть код в котором я использую в ConstraintLayout всего две кнопки как в примере
https://docs.metamask.io/wallet/concepts/sdk/
Подключение и очистка сессии.
package com.arturio.cryptobox
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
import com.arturio.cryptobox.ui.theme.CryptoBoxTheme
import io.metamask.androidsdk.Ethereum
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
CryptoBoxTheme {
GreetingPreview()
}
}
}
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
ConstraintLayout(modifier = Modifier.fillMaxSize()) {
val (connect, clear) = createRefs()
Button(onClick = {},
modifier = Modifier
.padding(start = 16.dp, end = 16.dp)
.fillMaxWidth()
.constrainAs(connect) {
bottom.linkTo(parent.bottom, 164.dp)
start.linkTo(parent.start)
end.linkTo(parent.end)
}
) {
Text(text = "Connect")
}
Button(onClick = {},
modifier = Modifier
.padding(start = 16.dp, end = 16.dp)
.fillMaxWidth()
.constrainAs(clear) {
bottom.linkTo(connect.top)
start.linkTo(connect.start)
end.linkTo(connect.end)
}
) {
Text(text = "Clear")
}
}
}
В самой библиотеке на
гите указано.
3.1. Используйте объект поставщика напрямую
SDK поддерживает как обратные вызовы, так и сопрограммы. При использовании обратных вызовов используйте Ethereumобъект, а при использовании сопрограмм используйте EthereumFlowобъект. Используйте объект Ethereumили EthereumFlow поставщика напрямую, чтобы подключить ваше децентрализованное приложение к MetaMask, добавив следующий код в файл проекта:
@AndroidEntryPoint
class SomeModel(context: Context) {
val dappMetadata = DappMetadata("Droid Dapp", "https://droiddapp.com")
val infuraAPIKey = "1234567890" // We use Infura API for read-only RPCs for a seamless user experience
// A) Using callbacks
val ethereum = Ethereum(context, dappMetadata, SDKOptions(infuraAPIKey))
// This is the same as calling eth_requestAccounts
ethereum.connect() { result ->
when (result) {
is Result.Error -> {
Logger.log("Ethereum connection error: ${result.error.message}")
}
is Result.Success.Item -> {
Logger.log("Ethereum connection result: ${result.value}")
}
}
}
// B) Using coroutines
val coroutineScope = rememberCoroutineScope()
// This is the same as calling eth_requestAccounts
coroutineScope.launch {
when (val result = ethereum.connect()) {
is Result.Error -> {
Logger.log("Ethereum connection error: ${result.error.message}")
}
is Result.Success.Item -> {
Logger.log("Ethereum connection result: ${result.value}")
}
}
}
}
Но я понятия не имею куда именно его добавлять.