Flutter Smart Analytics

Flutter Smart Analytics is a lightweight, extensible plugin that unifies analytics tracking across multiple providers such as Firebase Analytics, Mixpanel, and AppsFlyer — through a simple, modular adapter interface.

Easily log events, set user properties, and identify users across all your analytics platforms with a single API.

Features

  • Unified API for multiple analytics SDKs

  • Plug-and-play adapter system

  • Supports Firebase, Mixpanel, and AppsFlyer out of the box

  • Extensible — create your own adapters for other providers (Amplitude, Segment, etc.)

  • Supports event logging, user IDs, and user properties

  • Written in pure Dart, easy to integrate and extend

Architecture

The plugin is built around an Adapter Interface (AnalyticsAdapter) that each analytics provider implements.

FlutterSmartAnalytics
   |- adapters
      ├── FirebaseAnalyticsAdapter
      ├── MixpanelAdapter
      ├── AppsFlyerAdapter
      └── (Your custom adapter)
    |- flutter_smart_analytics

Installation

Add this line to your pubspec.yaml:

dependencies:
  flutter_smart_analytics: ^0.0.1

Then run:

flutter pub get

Available Adapters

Provider Package Dependency Class Firebase firebase_analytics FirebaseAnalyticsAdapter Mixpanel mixpanel_flutter MixpanelAdapter AppsFlyer appsflyer_sdk AppsFlyerAdapter

Usage

  • Initialize Adapters
final firebaseAdapter = FirebaseAnalyticsAdapter();
final mixpanelAdapter = MixpanelAdapter("YOUR_MIXPANEL_PROJECT_TOKEN");
final appsFlyerAdapter = AppsFlyerAdapter(
  devKey: "YOUR_APPSFLYER_DEV_KEY",
  appId: "YOUR_APP_ID",
);

final analytics = FlutterSmartAnalytics([
  firebaseAdapter,
  mixpanelAdapter,
  appsFlyerAdapter,
]);

  • Log Events
await analytics.logEvent("purchase_completed", parameters: {
  "amount": 49.99,
  "currency": "USD",
});

This event will be logged simultaneously across all connected analytics providers.

  • Set User ID
await analytics.setUserId("user_123");

  • Set User Properties
await analytics.setUserProperties({
  "plan": "premium",
  "role": "admin",
});

  • Example App

Below is a sample Flutter app demonstrating how to use the plugin.

import 'package:flutter/material.dart';
import 'package:flutter_smart_analytics/flutter_smart_analytics.dart';
import 'package:flutter_smart_analytics/adapters/firebase_analytics_adapter.dart';
import 'package:flutter_smart_analytics/adapters/mixpanel_adapter.dart';
import 'package:flutter_smart_analytics/adapters/appsflyer_adapter.dart';

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late FlutterSmartAnalytics analytics;
  String _status = "No events logged yet";

  @override
  void initState() {
    super.initState();

    final firebaseAdapter = FirebaseAnalyticsAdapter();
    final mixpanelAdapter = MixpanelAdapter("YOUR_MIXPANEL_PROJECT_TOKEN");
    final appsFlyerAdapter = AppsFlyerAdapter(
      devKey: "YOUR_APPSFLYER_DEV_KEY",
      appId: "YOUR_IOS_OR_ANDROID_APP_ID",
    );

    analytics = FlutterSmartAnalytics([
      firebaseAdapter,
      mixpanelAdapter,
      appsFlyerAdapter,
    ]);
  }

  Future<void> _logTestEvent() async {
    await analytics.logEvent("test_event", parameters: {"source": "example"});
    setState(() => _status = "Logged test_event with parameter {source: example}");
  }

  Future<void> _setUserId() async {
    await analytics.setUserId("user123");
    setState(() => _status = "User ID set to user123");
  }

  Future<void> _setUserProperties() async {
    await analytics.setUserProperties({"role": "admin"});
    setState(() => _status = "User properties set: {role: admin}");
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Flutter Smart Analytics Example')),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(_status, textAlign: TextAlign.center, style: const TextStyle(fontSize: 16)),
              const SizedBox(height: 20),
              ElevatedButton(onPressed: _logTestEvent, child: const Text("Log Test Event")),
              ElevatedButton(onPressed: _setUserId, child: const Text("Set User ID")),
              ElevatedButton(onPressed: _setUserProperties, child: const Text("Set User Properties")),
            ],
          ),
        ),
      ),
    );
  }
}

void main() {
  runApp(const MyApp());
}

Creating a Custom Adapter

You can extend analytics support to any platform by implementing AnalyticsAdapter:

import '../flutter_smart_analytics.dart';

class MyCustomAdapter implements AnalyticsAdapter {
  @override
  Future<void> logEvent(String name, {Map<String, dynamic>? parameters}) async {
    // Custom logic
  }

  @override
  Future<void> setUserId(String? userId) async {}

  @override
  Future<void> setUserProperties(Map<String, String> properties) async {}
}

Then plug it in:

final analytics = FlutterSmartAnalytics([MyCustomAdapter()]);

Folder Structure

lib/
│
├── flutter_smart_analytics.dart        
│
└── adapters/
    ├── firebase_analytics_adapter.dart
    ├── mixpanel_adapter.dart
    ├── appsflyer_adapter.dart
    └── your_custom_adapter.dart

Why Use Flutter Smart Analytics?

  • Simplifies integration of multiple analytics providers

  • Reduces boilerplate across your app

  • Makes switching or adding analytics SDKs easy

  • Encourages clean, decoupled architecture

Contributing

Contributions are welcome! You can add support for more analytics SDKs such as:

  • Amplitude

  • Segment

  • CleverTap

  • Facebook Analytics

  • Fork the repo

  • Create a new branch

  • Add your adapter

  • Submit a pull request