Flutter SDK

The Datafly Signal Flutter SDK wraps the native iOS and Android SDKs via platform channels, giving you full native performance with a Dart API.

Requirements

  • Flutter 3.10+
  • Dart 3.0+
  • iOS 15+ / Android API 21+

Installation

Add to your pubspec.yaml:

dependencies:
  datafly_signal: ^1.0.0

Then run:

flutter pub get

Initialisation

import 'package:datafly_signal/datafly_signal.dart';
 
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
 
  await DataflySignal.initialize(DataflyConfig(
    pipelineKey: 'dk_live_abc123',
    endpoint: 'https://data.example.com',
  ));
 
  runApp(MyApp());
}

Usage

import 'package:datafly_signal/datafly_signal.dart';
 
// Track a screen view
await DataflySignal.screen('Home');
 
// Track a custom event
await DataflySignal.track('add_to_cart', properties: {
  'item_id': 'SKU-001',
  'item_name': 'Running Shoes',
  'price': 79.99,
  'currency': 'GBP',
});
 
// Identify a user
await DataflySignal.identify('user-123', traits: {
  'email': '[email protected]',
  'name': 'Jane Doe',
});
 
// Associate with a company
await DataflySignal.group('company-456', traits: {'name': 'Acme Corp'});
 
// Handle deep link
await DataflySignal.handleDeepLink('https://example.com?utm_source=google');
 
// Set consent
await DataflySignal.setConsent({'analytics': true, 'marketing': false});
 
// Force flush
await DataflySignal.flush();
 
// Logout
await DataflySignal.reset();
 
// Get anonymous ID
final anonId = await DataflySignal.getAnonymousId();

Track screen views automatically with a NavigatorObserver:

class DataflyNavigatorObserver extends NavigatorObserver {
  @override
  void didPush(Route route, Route? previousRoute) {
    if (route.settings.name != null) {
      DataflySignal.screen(route.settings.name!);
    }
  }
}
 
// In your MaterialApp:
MaterialApp(
  navigatorObservers: [DataflyNavigatorObserver()],
  // ...
)
import 'package:app_links/app_links.dart';
 
final appLinks = AppLinks();
appLinks.uriLinkStream.listen((Uri uri) {
  DataflySignal.handleDeepLink(uri.toString());
});

The Flutter SDK communicates with the native SDKs via platform channels (MethodChannel). All event processing, offline queuing, batching, and retry logic runs natively on each platform.

Configuration

See Configuration for all available options.