Kotlin parcelable and arrayList of parcelables

Replace:

arrayListOf<OrderedService>().apply {
    parcelIn.readArrayList(OrderedService::class.java.classLoader)
}

with:

arrayListOf<OrderedService>().apply {
    parcelIn.readList(this, OrderedService::class.java.classLoader)
}

If Parent and Child model have parcelable then used below one

Parent Model

Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.createTypedArrayList(ImagesModel.CREATOR)
    )
}

override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeTypedList(images)
}

For API 29 and above

Replace:

arrayListOf<OrderedService>().apply {
    parcelIn.readArrayList(OrderedService::class.java.classLoader)
}

with

if (Build.VERSION.SDK_INT >= 29)
    parcel.readParcelableList(this, OrderedService::class.java.classLoader)
else
    parcel.readList(this as List<OrderedService>, OrderedService::class.java.classLoader)
}

and

override fun writeToParcel(dest: Parcel?, flags: Int) {
    dest?.writeString(id)
    dest?.writeString(status)
    dest?.writeList(orderedServices)
}

with

override fun writeToParcel(dest: Parcel?, flags: Int) {
    dest?.writeString(id)
    dest?.writeString(status)
    if (Build.VERSION.SDK_INT >= 29) {
        dest?.writeParcelableList(orderedServices,flags)
    } else {
        dest?.writeList(orderedServices as List<OrderedService>)
    }
}

Change

arrayListOf<OrderedService>().apply {
    parcelIn.readArrayList(OrderedService::class.java.classLoader)
}

to

source.createTypedArrayList(OrderedService.CREATOR)

Change dest?.writeList(orderedServices)

to dest?.writeTypedList(orderedServices)

The creator method

    companion object {
    @JvmField
    val CREATOR: Parcelable.Creator<Trip> = object : Parcelable.Creator<Trip> {
        override fun createFromParcel(source: Parcel): Trip = Trip(source)
        override fun newArray(size: Int): Array<Trip?> = arrayOfNulls(size)
    }
}