seatlayer 0.2.1
seatlayer: ^0.2.1 copied to clipboard
Flutter SDK for interactive seat maps and reserved seating charts on iOS and Android, with live availability, seat selection, temporary holds, and secure booking.
SeatLayer Flutter Seat Map SDK for Reserved Seating #
The official SeatLayer Flutter package for adding an interactive seating chart and seat picker to ticketing apps on iOS and Android. Render live seat availability, create temporary holds, find best-available seats, and hand secure booking to your trusted server.
SeatLayer Flutter package on pub.dev · Flutter seat-map documentation · SeatLayer reserved-seating platform · Buyer seat-map demo (web) · Native Android · React Native · AI Toolkit
Production SDK:
0.2.1is the current Flutter release. Pin the documented release and validate your event, checkout handoff, lifecycle, and supported physical devices before rollout.
Install #
flutter pub add seatlayer
Or add it to pubspec.yaml:
dependencies:
seatlayer: ^0.2.1
Then import the public library:
import 'package:seatlayer/seatlayer.dart';
Quick start #
Create one controller for the lifetime of the view. Give the map a definite height or place it full-screen.
final controller = SeatLayerController();
@override
Widget build(BuildContext context) {
return SizedBox(
height: 640,
child: SeatLayerView(
controller: controller,
configuration: SeatLayerConfiguration(
event: 'ev_your_event_key',
currency: 'USD',
),
onReady: (info) {
debugPrint(
'SeatLayer ready: protocol=${info.protocolRevision} '
'mode=${info.mode.raw}',
);
},
),
);
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
Drive buyer actions through the controller:
try {
final hold = await controller.bestAvailable(4);
if (hold != null) {
beginCheckoutOnYourServer(hold.holdId);
}
} on SeatLayerError catch (error) {
// Handle sold_out, not_enough_together, expired holds, and other
// recoverable inventory outcomes in the buyer UI.
showSeatError(error.code, error.message);
}
Subscribe to strongly typed event streams:
controller.onSelectionChanged.listen(updateSelectedSeats);
controller.onHold.listen(persistHold);
controller.onHoldExpired.listen(returnBuyerToMap);
controller.onError.listen(reportSeatLayerError);
Flutter package proof #
[SeatLayer Flutter reserved-seating chart running in the iOS example app]
This capture comes from the repository's runnable Flutter example using the
packaged offline fixture. Run flutter run from example/ to exercise the
real Dart bridge and buyer renderer without a live event key. The separate
buyer seat-map demo is a
browser preview of the wider SeatLayer buyer experience, not a Flutter app.
For private channel inventory, mint short-lived sessions on your backend for
the exact allowed origin https://cdn.seatlayer.io:
final configuration = SeatLayerConfiguration(
event: 'ev_private',
buyerAccessTokenProvider: (context) =>
buyerBackend.mintSeatLayerAccess(context.reason),
);
Security boundary #
The Flutter app selects and holds inventory. Your trusted backend inspects and books the hold after payment or order validation.
- Never ship a SeatLayer secret key in the app binary or WebView.
- Send only the
holdIdand your normal checkout context to your backend. - Calculate the charge from server-inspected hold items, not app input.
- Reuse your stable order id as
bookingReffor safe booking retries.
Read how the integration works before connecting checkout.
How it works #
Production views load the immutable
seatlayer-js@0.67.14/mobile.html document and its lazy assets from
https://cdn.seatlayer.io inside webview_flutter. This gives iOS and Android
one canonical HTTPS origin for origin-bound buyer sessions. Tokens stay in
memory and are never put in page URLs or events. Explicit bundled fixture pages
remain supported for demos and tests and are pinned to the same verified
0.67.14 release.
The public contract matches the Web and iOS SDKs:
- commands return
Futurevalues and throw typedSeatLayerErrorfailures; - events arrive through typed Dart streams;
- protocol negotiation fails clearly when an app update is required; and
- unknown future enum values and events remain forward-compatible.
Commands #
hold · resumeHold · extendHold · release · releaseLabels ·
bestAvailable · holdGA · setSeatTier · getSelection ·
selectObjects · deselectObjects · clearSelection · selectCategories ·
deselectCategories · setSelectableObjects · setMaxSelection ·
getSelectionValidity · refreshAccess · getCurrentHold · getGAAreas ·
getFloors · setFloor · setColorblindSafe · setViewMode ·
getViewMode · zoomIn · zoomOut · zoomToFit · destroy
Event streams #
onReady · onSelectionChanged · onSelectionValidityChanged ·
onSelectionValid · onSelectionInvalid · onSelectionLimit ·
onBuyerAccessExpired · onBuyerAccessUnavailable ·
onSelectedObjectsUnavailable · onHold · onHoldRestored · onHoldExpired ·
onError · onHint · onGAClick · onSeatHover · onDeckTap ·
onUnknownEvent
Layout requirement #
Do not place the seat map inside ListView, SingleChildScrollView, or another
gesture-driven scrolling surface. The canvas owns pan and pinch gestures for map
navigation. Use a fixed-height SizedBox, an Expanded child with a resolved
height, or a full-screen route.
Run the example #
cd example
flutter run
The example uses the SDK's offline fixture to exercise the real bridge and renderer without a live event key. For an end-to-end integration, provide a test event and keep the default API origin.
Frequently asked questions #
Is SeatLayer a Flutter widget or only a WebView snippet? #
SeatLayerView is a Flutter widget with a typed Dart controller. On iOS and
Android it uses webview_flutter to load SeatLayer's immutable hosted mobile
runtime, while application code works through Dart commands, payloads, errors,
and event streams.
Which Flutter platforms are supported? #
The package declares and supports iOS and Android. It does not currently claim Flutter web, macOS, Windows, or Linux support.
Does the app book seats or process payment? #
No. The app selects inventory and creates a temporary hold. Send the opaque
holdId to your trusted backend, calculate the charge from server-inspected
hold items, process the order, and book with a stable bookingRef.
Why does the seat map need a definite height? #
The buyer canvas owns pan and pinch gestures. Give SeatLayerView a resolved
height or a full-screen route, and do not nest it inside another gesture-driven
scroll or zoom surface.
Can I evaluate the package without a live event? #
Yes. The repository example uses the packaged offline fixture to verify the Flutter view, bridge, renderer, commands, and event streams. Use a SeatLayer test event and your backend when validating live inventory, holds, expiry, conflicts, and checkout.
Is the linked buyer demo a Flutter application? #
No. It is clearly labelled browser proof of the wider buyer experience. The runnable example and simulator capture above are the proof for this Flutter package.
Related resources #
- Flutter seat-map integration guide
- SeatLayer Flutter package on pub.dev
- SeatLayer reserved-seating platform
- Buyer seat-map demo (web)
- Mobile SDK chooser
- Buyer SDK installation
- Holds and checkout
- Complete checkout example
- JavaScript and React SDKs
- SeatLayer iOS SDK
- Agent-readable documentation
SeatLayer SDK ecosystem #
| Surface | Package or source |
|---|---|
| JavaScript | @seatlayer/js |
| React | @seatlayer/react |
| React Native | @seatlayer/react-native |
| iOS | seatlayer-ios |
| Android | seatlayer-android |
| Server SDKs | Node.js, Python, PHP, Ruby, .NET, Java, and Go |
Development #
flutter pub get
flutter analyze
flutter test
dart pub publish --dry-run
License #
MIT © SeatLayer