パルカワ2

最近はFlutterをやっています

KotlinのParcelizeとParceler

画面遷移に使えるかなーと思って触ってみたのでメモ
Parcelerはシングルトンじゃないとだめぽ

object MenuParceler : Parceler<MenuOuterClass.Menu> {
    override fun create(parcel: Parcel): MenuOuterClass.Menu {
        val byteArray = ByteArray(parcel.readInt())
        parcel.readByteArray(byteArray)

        return MenuOuterClass.Menu.parseFrom(byteArray)
    }

    override fun MenuOuterClass.Menu.write(parcel: Parcel, flags: Int) {
        val byteArray = toByteArray()
        parcel.writeInt(byteArray.size)
        parcel.writeByteArray(byteArray)
    }

}

class MenuDetailActivity {
    @Parcelize
    data class Extras(
            @TypeParceler<MenuOuterClass.Menu, MenuParceler>()
            val menu: MenuOuterClass.Menu,
            val recipeIndex: Int = 0) : Parcelable

    private val extras: Extras by lazy {
        intent.extras!!.getParcelable(this::extras.name) as Extras
    }

    companion object {
        fun newIntent(context: Context?, extras: Extras): Intent {
            val intent = Intent(context, MenuDetailActivity::class.java)
            intent.putExtra(MenuDetailActivity::extras.name, extras)

            return intent
        }
    }
}