Usage
Web3Modal
is a singleton that interacts with the WalletConnectModal SDK.
Implementation
Initialize
val connectionType = ConnectionType.AUTOMATIC or ConnectionType.MANUAL
val projectId = "" // Get Project ID at https://cloud.walletconnect.com/
val relayUrl = "relay.walletconnect.com"
val serverUrl = "wss://$relayUrl?projectId=${projectId}"
val appMetaData = Core.Model.AppMetaData(
name = "Kotlin.Web3Modal",
description = "Kotlin Web3Modal Implementation",
url = "kotlin.walletconnect.com",
icons = listOf("https://raw.githubusercontent.com/WalletConnect/walletconnect-assets/master/Icon/Gradient/Icon.png"),
redirect = "kotlin-web3modal://request"
)
CoreClient.initialize(relayServerUrl = serverUrl, connectionType = connectionType, application = this, metaData = appMetaData)
Web3Modal.initialize(
init = Modal.Params.Init(CoreClient),
onSuccess = {
// Callback will be called if initialization is successful
},
onError = { error ->
// Error will be thrown if there's an issue during initialization
}
)
Session properties
You can define session properties by calling the setSessionProperties
method on the Web3Modal
object.
Chains
This example of define ethereum chain. You can define the chains you want to use. The chain must be EVM compatible.
Example of definition chains: https://github.com/WalletConnect/WalletConnectKotlinV2/blob/master/product/web3modal/src/main/kotlin/com/walletconnect/web3/modal/presets/Web3ModalChainsPresets.kt
Web3Modal.setChains(Web3ModalChainsPresets.ethChains.values.toList())
IMPORTANT: Chains
must be set before opening the modal.
Usage
- Compose Accompanist
- Compose Component
- Kotlin DSL
- Nav graph
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.ModalBottomSheetState
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.google.accompanist.navigation.material.BottomSheetNavigator
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.google.accompanist.navigation.material.ModalBottomSheetLayout
import com.google.accompanist.navigation.material.bottomSheet
import com.walletconnect.web3.modal.ui.web3ModalGraph
setContent {
val modalSheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden, skipHalfExpanded = true)
val bottomSheetNavigator = BottomSheetNavigator(modalSheetState)
val navController = rememberNavController(bottomSheetNavigator)
ModalBottomSheetLayout(bottomSheetNavigator = bottomSheetNavigator) {
NavHost(
navController = navController,
startDestination = "home"
) {
composable("home") {
HomeScreen()
}
web3ModalGraph(navController)
}
}
}
IMPORTANT: Web3Modal uses accompanist navigation material inside. ModalBottomSheetLayout
should be imported from Accompanist Navigation Material
import com.walletconnect.web3.modal.ui.openWeb3Modal
navController().openWeb3Modal(
shouldOpenChooseNetwork = true | false
onError = { }
)
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.ModalBottomSheetState
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.compose.material.ModalBottomSheetLayout
setContent {
val modalSheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden, skipHalfExpanded = true)
val coroutineScope = rememberCoroutineScope()
val navController = rememberNavController()
ModalBottomSheetLayout(
sheetContent = {
Web3ModalComponent(
shouldOpenChooseNetwork = true | false,
closeModal = { coroutineScope.launch { modalSheetState.hide() }
)
}
) {
// content
}
}
import androidx.navigation.createGraph
import androidx.navigation.fragment.fragment
import com.walletconnect.web3.modal.ui.web3ModalGraph
navController.graph = navController.createGraph("Home") {
fragment<HomeFragment>("Home")
web3Modal()
}
import androidx.navigation.fragment.findNavController
import com.walletconnect.web3.modal.ui.openWeb3Modal
findNavController().openWeb3Modal(
shouldOpenChooseNetwork = true | false
onError = { }
)
<navigation >
<fragment
android:id="@+id/HomeFragment"
android:name="com.walletconnect.sample.HomeFragment">
</fragment>
<include app:graph ="@navigation/web3modal_graph"/>
</navigation>
import androidx.navigation.fragment.findNavController
import com.walletconnect.web3.modal.ui.openWeb3Modal
findNavController().openWeb3Modal(
shouldOpenChooseNetwork = true | false
onError = { }
)
Was this helpful?