seatlayer 0.2.1 copy "seatlayer: ^0.2.1" to clipboard
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 #

CI pub package Flutter Dart License: MIT

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.1 is 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 holdId and your normal checkout context to your backend.
  • Calculate the charge from server-inspected hold items, not app input.
  • Reuse your stable order id as bookingRef for 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 Future values and throw typed SeatLayerError failures;
  • 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.

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

1
likes
0
points
1.07k
downloads

Documentation

Documentation

Publisher

verified publisherseatlayer.io

Weekly Downloads

Flutter SDK for interactive seat maps and reserved seating charts on iOS and Android, with live availability, seat selection, temporary holds, and secure booking.

Homepage
Repository (GitHub)
View/report issues

Topics

#seat-map #seating-chart #reserved-seating #seat-picker #ticketing

License

unknown (license)

Dependencies

flutter, meta, webview_flutter

More

Packages that depend on seatlayer