One capability. Four runtimes. Six lifecycle states.

Choose the exact mobile path you are shipping. The matrix preserves current version evidence, exposes missing overview coverage, and makes the host application—not the provider UI—the owner of durable state.

4platform lines

Android, iOS, Flutter, and React Native remain distinct release and lifecycle boundaries.

5capabilities

Place search, nearby, directions, geofence, and feedback are evaluated independently.

20platform paths

Every pairing is represented, including gaps in the current first-party overview.

17published paths

The remaining 3 paths require product selection—not a guessed package.

Bind to the runtime you own

Versions were checked against the linked first-party overview on 2026-08-17. Reconfirm before resolving dependencies.

source-ready

Place search and picker for Android

Documentation
v2.0.2
Component
Place Search Widget
Version
3.0.2
State model
selection

The current Android overview lists Place Search Widget 3.0.2 under documentation v2.0.2. Confirm the exact package, configuration, callback schema, and entitlement in the selected guide before binding the adapter.

Open first-party evidence Read as JSON

Twenty paths. Every gap visible.

“Not listed” means the current overview does not establish a package. It does not mean the capability is impossible, and it never licenses reuse of another platform’s package.

Make every return, cancellation, and late callback explainable.

The generated scaffold deliberately stops at an application-owned candidate. Your repository decides whether and how that candidate becomes durable.

01
Application screen

idle

No provider controller, route, Promise, delegate, or listener is active.

02
Platform adapter

launching

One generation ID binds configuration, owner, and launch time.

03
Provider widget under host lifecycle

active

Background, recreation, close, and duplicate-launch behavior are observable.

04
Platform adapter

returned / cancelled / failed

Exactly one typed terminal result wins; late results are ignored.

05
Application domain

candidate

Validate and normalize mappls pin plus application-owned display label before committing.

06
Application repository

committed

Persist the normalized selection/draft with version, actor, source, and audit event.

Android host adapter boundary
data class PlaceSelection(val mapplsPin: String, val label: String)

interface MapplsPlaceWidget {
    suspend fun selectPlace(): PlaceSelection? // null means deliberate cancellation
}

class AddressDraft(private val widget: MapplsPlaceWidget) {
    suspend fun choose(): PlaceSelection? = widget.selectPlace()?.also { selected ->
        require(Regex("^[A-Za-z0-9]{6}$").matches(selected.mapplsPin))
        // Persist through the application repository, not a Fragment reference.
    }
}

The widget is a collaborator, not your database.

One Activity, Fragment, or Compose wrapper owns launch, callback registration, saved state, and disposal.

Translate the documented Activity/Fragment result into a small application selection before persisting it.

Back, close, process recreation, denied configuration, and an unavailable Activity are distinct outcomes.

The durable record is mappls pin plus application-owned display label; never retain a provider view/controller or opaque bridge result.

Test the lifecycle you cannot demo.

Happy-path selection proves almost nothing about a production mobile integration.

01

BoM/component versions resolve together

02

Debug and release signing identities are separately approved

03

Rotation and process death do not duplicate a commit

04

Fragment/Activity listeners are removed with their owner

05

Permission/configuration denied

06

Offline and slow provider response

07

Cancel before and after a candidate appears

08

Host edit invalidates a stale selection

09

Duplicate callback/Promise result commits once

10

Accessibility, focus return, and a non-widget fallback