Я пытаюсь использовать safe-args с kotlin -мультиплатформенными типами, однако я продолжаю получать ту же проблему во время выполнения при попытке передать сериализуемые данные:
Причина: java .lang.IllegalArgumentException: org. kotlin .mpp.mobile.models.MyModel не может быть сериализуемым или разборчивым.
В моем nav_host. xml I иметь следующее:
<fragment
android:id="@+id/aFragment"
android:name="com.corp.myapp.main.aFragment"
android:label="aFragment" >
<action
android:id="@+id/action_aFragment_to_bFragment"
app:destination="@id/bFragment"
app:popUpTo="@id/bFragment"
app:popUpToInclusive="true">
<argument
android:name="myname"
app:argType="org.kotlin.mpp.mobile.models.MyModel"
app:nullable="true" />
</action>
</fragment>
Два подхода, которые я сейчас использую, где я получаю точно такое же исключение.
Первый - использование kotlinx-сериализация плагин, где у меня есть следующий тип:
package org.kotlin.mpp.mobile.models
import kotlinx.serialization.Serializable
@Serializable
data class MyModel(val first: String = "", val last: String = "")
Второй, который я попробовал как первый, не работал, это сделать реализацию платформы c (JVM) с расширением java .io.Serializable со следующими данными:
commondataModels.kt:
package org.kotlin.mpp.mobile.models
expect class MyModel(first: String, last: String)
actualdataModels.kt:
package org.kotlin.mpp.mobile.models
import java.io.Serializable
actual data class MyModel actual constructor(val first: String, val last: String): Serializable
Я выполняю навигационный вызов в своей Деятельности с созданным классом направления:
import org.kotlin.mpp.mobile.models.*
val user = MyModel("Bruce","Lee")
host.findNavController().navigate(AFragmentDirections.actionAFragmentToBFragment(user))
Заранее благодарен за любой совет!
ПРИМЕЧАНИЕ: я могу заставить все работать, передав пакет с API навигации , однако я хотел бы, чтобы он работал с safe-args .