Skip to content

Getting started

Install for Flutter

Add the playstep package, wrap your app with PlayStep.builder, and anchor guides to widgets with GuideAnchor.

Terminal
flutter pub add playstep

Start PlayStep before runApp, then add its builder and navigator observer to your app:

Dart
import 'package:flutter/material.dart';
import 'package:playstep/playstep.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await PlayStep.init(appKey: 'ps_pub_dev_your_key');
  runApp(const InvoicelyApp());
}

class InvoicelyApp extends StatelessWidget {
  const InvoicelyApp({super.key});

  @override
  Widget build(BuildContext context) => MaterialApp(
        builder: PlayStep.builder,
        navigatorObservers: [PlayStep.navigatorObserver],
        home: const InvoicesScreen(),
      );
}

PlayStep.builder draws guides above every route and dialog. PlayStep.navigatorObserver reports route names as screen views, which page_view triggers match.

Anchor widgets

Wrap the widget a step points at:

Dart
GuideAnchor(
  id: 'new-invoice-btn',
  child: FilledButton(onPressed: createInvoice, child: const Text('New invoice')),
)

Identify users and report events

Dart
PlayStep.identify(user.id, {'plan': user.plan});
PlayStep.track('invoice_page_opened');

YouTube and Vimeo clips

Embedded clips play inline when you add the optional playstep_embeds package:

Terminal
flutter pub add playstep_embeds
Dart
await PlayStep.init(appKey: 'ps_pub_dev_your_key');
PlayStepEmbeds.register();

Without it, embed steps show the poster and open the video in the browser.

The package supports iOS, Android, web and desktop, and depends only on video_player, flutter_cache_manager, shared_preferences and http. Every API is in the Flutter reference.

Search the docs and guides.

PlayStep is coming soon

We're opening PlayStep to teams one at a time. Leave your name and email and we'll set up a demo.

We use your email only to arrange the demo. See the privacy policy.