not straight out of the box.
you can do this with an additional class.
for the examples I’m using type alias, which renames the lambda into a simple name
I’m using typealias (for renaming the lambda’s to an easier to unserstand name
and apply (executes things on an object and then returns itself).
both functions are required
When both the functions must be overridden, you can create the following class:
typealias OnEnter = (region: BeaconRegion, beacons: List<Beacon>)->Unit
typealias OnExit = (region: BeaconRegion)->Unit
class ComposableMonitoringListener(
public var onEnter: OnEnter,
public var onExit: OnExit
)BeaconMonitoringListener{
override fun onEnteredRegion(region: BeaconRegion, beacons: List<Beacon>) = onEnter(region, beacons)
override fun onExitedRegion(region: BeaconRegion) = onExit(region)
}
which you can call like:
ComposableMonitoringListener(
onEnter = {region, beacons-> ...},
onExit = {region -> }
)
one functions is required
typealias OnEnter = (region: BeaconRegion, beacons: List<Beacon>)->Unit
typealias OnExit = (region: BeaconRegion)->Unit
class ComposableMonitoringListener(
public var onEnter: OnEnter,
): BeaconMonitoringListener{
private var onExit: OnExit? = null
fun onExitedRegion(onExit: OnExit?) = this.apply{
this.onExit = onExit
}
override fun onEnteredRegion(region: BeaconRegion, beacons: List<Beacon>) = onEnter(region, beacons)
override fun onExitedRegion(region: BeaconRegion){
onExit?.invoke(region)
}
}
which you can call like:
ComposableMonitoringListener(
onEnter = {region, beacons-> ...},
).onExitedRegionon{region -> }
or even
ComposableMonitoringListener{region, beacons-> ...}
.onExitedRegionon{region -> }
both functions are optional
typealias OnEnter = (region: BeaconRegion, beacons: List<Beacon>)->Unit
typealias OnExit = (region: BeaconRegion)->Unit
class ComposableMonitoringListener: BeaconMonitoringListener{
private var onExit: OnExit? = nul
private var onEnter: OnEnter? = null
fun onExitedRegion(onExit: OnExit?) = this.apply{
this.onExit = onExit
}
fun onEnteredRegion(onEnter: OnEnter?) = this.apply{
this.onEnter = onEnter
}
override fun onEnteredRegion(region: BeaconRegion, beacons: List<Beacon>) { onEnter?.invoke(region, beacons) }
override fun onExitedRegion(region: BeaconRegion) { onExit?.invoke(region) }
}
which you call like
ComposableMonitoringListener()
.onEnteredRegion{region, beacons-> ...}
.onExitedRegionon{region -> }
remark
Of course, if an function is optional, you can also ask it as an optional constructor argument.