Skip to main content

openpanel_dart_flutter 0.1.2 copy "openpanel_dart_flutter: ^0.1.2" to clipboard
openpanel_dart_flutter: ^0.1.2 copied to clipboard

Flutter integration for openpanel_dart: screen tracking, referrer and lifecycle observers, plus shared_preferences and device_info backed storage/metadata.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:openpanel_dart_flutter/openpanel_dart_flutter.dart';

/// Example app for `openpanel_dart_flutter`.
///
/// It wires the Flutter helpers (screen tracking, referrer and lifecycle
/// observers, `shared_preferences` storage) through `initOpenpanelFlutter` and exposes a few manual calls.
///
/// Replace `YOUR_CLIENT_ID` below (and, for a self-hosted instance, `apiUrl`)  to actually deliver events.
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  final analytics = OpenpanelAnalytics.instance;
  WidgetsBinding.instance
    ..addObserver(OpenpanelReferrerObserver(analytics: analytics))
    ..addObserver(OpenpanelLifecycleObserver(analytics: analytics));

  await initOpenpanelFlutter(
    analytics,
    config: const OpenpanelConfig(
      clientId: 'YOUR_CLIENT_ID',
      // Self-hosted? Point apiUrl at your own domain:
      // apiUrl: 'https://analytics.example.com',
    ),
  );

  runApp(const ExampleApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'openpanel_dart_flutter example',
      theme: ThemeData(
        colorSchemeSeed: const Color(0xFF6750A4),
        useMaterial3: true,
      ),
      // Every named route change is tracked as a `screen_view` event.
      navigatorObservers: [OpenpanelRouteObserver()],
      home: const HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final OpenpanelAnalytics _analytics = OpenpanelAnalytics.instance;
  int _pending = 0;

  Future<void> _refresh() async {
    final pending = await _analytics.pendingEventCount();
    if (mounted) {
      setState(() => _pending = pending);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('openpanel_dart_flutter example')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('pending events: $_pending'),
            const SizedBox(height: 16),
            FilledButton(
              onPressed: () async {
                await _analytics.track(
                  'button_clicked',
                  properties: const {'label': 'demo'},
                );
                await _refresh();
              },
              child: const Text('track button_clicked'),
            ),
            const SizedBox(height: 8),
            OutlinedButton(
              onPressed: () async {
                await _analytics.identify(
                  profileId: 'user_123',
                  email: 'jane@example.com',
                );
                await _refresh();
              },
              child: const Text('identify user_123'),
            ),
            const SizedBox(height: 8),
            OutlinedButton(
              onPressed: () => Navigator.of(context).push(
                MaterialPageRoute<void>(
                  settings: const RouteSettings(name: '/details'),
                  builder: (_) => const DetailsScreen(),
                ),
              ),
              child: const Text('open /details (screen_view)'),
            ),
            const SizedBox(height: 8),
            OutlinedButton(
              onPressed: () async {
                await _analytics.flush();
                await _refresh();
              },
              child: const Text('flush queue'),
            ),
          ],
        ),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Details')),
      body: const Center(
        child: Text('Pushed route: a screen_view event was tracked.'),
      ),
    );
  }
}
0
likes
0
points
132
downloads

Publisher

unverified uploader

Weekly Downloads

Flutter integration for openpanel_dart: screen tracking, referrer and lifecycle observers, plus shared_preferences and device_info backed storage/metadata.

Repository (GitHub)
View/report issues

Topics

#analytics #openpanel #flutter

License

unknown (license)

Dependencies

device_info_plus, flutter, openpanel_dart, package_info_plus, referrer, shared_preferences

More

Packages that depend on openpanel_dart_flutter