Events and handles
Each entry point reports through one onEvent closure. The SDK navigates inside
its flows, so events say what happened — a property opened, a capture finished,
something failed — and never ask you to push or pop anything.
New cases arrive in minor versions. Keep a default in exhaustive switches.
Handles
Property and Floor are opaque references. A Property arrives from
createProperty(name:floorCount:metadata:) / property(id:) or an event, and
goes straight back into makePropertyViewController(property:onEvent:); a
Floor arrives in the capture events.
You cannot construct one, by design — a hand-built handle could only name a row that doesn't exist.
| Type | Properties |
|---|---|
Property | id: String, name: String |
Floor | id: String, name: String?, number: Int?, propertyId: String |
Both are Equatable. Store Property.id next to your own record to reopen it
on a later launch.
PropertyFlowEvent
| Case | Meaning |
|---|---|
openedProperty(Property) | A property opened from the list, after the user selected or created it. Not raised by a flow started on one property |
structureCaptureFinished(Floor) | The user confirmed a floor plan, from scratch or with rooms added to the existing one |
panoramaCaptureFinished(Floor, capturedInSession: Int) | Count is for this visit, not the floor total, and excludes scans the SDK discarded |
failed(NoughtyToursError) | Something the flow did on its own failed — a write, or building the next screen, which then is not shown |
Where errors reach you
Two paths, and they mean different things:
- Thrown from an entry point, before you have a screen — the property was gone, or the read failed. Nothing is on screen yet, so you decide what to show.
- Reported through
failed— something inside the flow failed while the user was looking at it: a write, or a screen that could not be opened (for example capture on a device without LiDAR). The user stays on the screen they were on.
See Errors.