tealium 3.0.0 copy "tealium: ^3.0.0" to clipboard
tealium: ^3.0.0 copied to clipboard

A Flutter plugin for using Tealium's Android and iOS libraries.

example/lib/main.dart

import 'dart:developer' as developer;
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:tealium/common.dart';
import 'package:tealium/tealium.dart';
import 'package:tealium_example/tealium_button.dart';

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

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

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

class _MyAppState extends State<MyApp> {
  static final visitorIdentityKey = "visitor_identity";
  final traceIdValue = TextEditingController();
  final userIdValue = TextEditingController();
  String result = '';
  String currentVisitorId = '';

  // MARK: Tealium Configuration

  final config = TealiumConfig(
    'tealiummobile',
    'demo',
    TealiumEnvironment.dev,
    [Collectors.AppData, Collectors.Lifecycle],
    [Dispatchers.RemoteCommands, Dispatchers.Collect],
    loglevel: LogLevel.DEV,
    consentPolicy: ConsentPolicy.GDPR,
    useRemoteLibrarySettings: true,
    batchingEnabled: false,
    visitorServiceEnabled: true,
    consentExpiry: ConsentExpiry(5, TimeUnit.MINUTES),
    visitorIdentityKey: visitorIdentityKey,
  );

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

    // MARK: Initialize Tealium
    Tealium.initialize(config).then((_) async {
      developer.log('Tealium Initialized');
      await Tealium.setConsentStatus(ConsentStatus.consented);
      await Tealium.setConsentExpiryListener(
        () => developer.log('Consent Expired'),
      );
      Tealium.setVisitorServiceListener(
        (profile) => _logVisitorProfile(profile),
      );
      final visitorId = await Tealium.getVisitorId();
      _logVisitorId(visitorId);
      Tealium.setVisitorIdListener((visitorId) => _logVisitorId(visitorId));
      await Tealium.addCustomRemoteCommand(
        'json-test',
        (payload) => _logRemoteCommand('JSON Test', payload),
      );
      final value = await Tealium.getFromDataLayer(visitorIdentityKey);
      if (mounted) setState(() => userIdValue.text = value ?? '');
    });
  }

  ListView _listView() {
    return ListView(
      scrollDirection: Axis.vertical,
      padding: EdgeInsets.all(5),
      children: <Widget>[
        TextField(
          controller: traceIdValue,
          autocorrect: true,
          decoration: InputDecoration(hintText: 'Enter Trace Id'),
        ),
        TealiumButton(
          title: 'Join Trace',
          onPressed: _joinTrace,
        ),
        TealiumButton(
          title: 'Leave Trace',
          onPressed: () => Tealium.leaveTrace(),
        ),
        TealiumButton(
          title: 'Track Event',
          onPressed: () => Tealium.track(
            TealiumEvent('Some Event', {'button_click': 'test'}),
          ),
        ),
        TealiumButton(
          title: 'Track View',
          onPressed: () => Tealium.track(
            TealiumView('Some View', {'screen_view': 'tester'}),
          ),
        ),
        TealiumButton(
          title: 'Add Data',
          onPressed: () =>
              Tealium.addToDataLayer({'hello': 'world'}, Expiry.session),
        ),
        TealiumButton(
          title: 'Get Data',
          onPressed: () => Tealium.getFromDataLayer('hello').then(
            (value) => developer.log('Value From Data Layer: $value'),
          ),
        ),
        TealiumButton(
          title: 'Remove Data',
          onPressed: () => Tealium.removeFromDataLayer(['hello']),
        ),
        TealiumButton(
          title: 'Set Consent',
          onPressed: () => Tealium.setConsentStatus(ConsentStatus.consented),
        ),
        TealiumButton(
          title: 'Get Consent',
          onPressed: () => Tealium.getConsentStatus().then(
            (status) => developer.log('Consent Status: $status'),
          ),
        ),
        TealiumButton(
          title: 'Set Consent Categories',
          onPressed: () => _setRandomConsentCategories(),
        ),
        TealiumButton(
          title: 'Get Consent Categories',
          onPressed: () => Tealium.getConsentCategories().then(
            (categories) =>
                developer.log('Consent Categories: ${categories.join(",")}'),
          ),
        ),
        TealiumButton(
          title: 'Add Remote Command',
          onPressed: () => Tealium.addCustomRemoteCommand(
            'example',
            (payload) => _logRemoteCommand('Example', payload),
          ),
        ),
        TealiumButton(
          title: 'Remove Remote Command',
          onPressed: () => Tealium.removeRemoteCommand('json-test'),
        ),
        TealiumButton(
          title: 'Get Visitor Id',
          onPressed: () => Tealium.getVisitorId().then(
            (visitorId) => developer.log('Visitor Id: $visitorId'),
          ),
        ),
        TealiumButton(
          title: 'Gather Track Data',
          onPressed: () => Tealium.gatherTrackData().then(
            (data) => developer.log('Gather track Data: $data'),
          ),
        ),
        TealiumButton(
          title: 'Terminate Tealium',
          onPressed: () => Tealium.terminateInstance(),
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('Identity:'),
            Padding(padding: EdgeInsets.all(3)),
            Expanded(
              child: TextField(
                controller: userIdValue,
                autocorrect: true,
                decoration: InputDecoration(hintText: 'Enter an Identity'),
              ),
            ),
          ],
        ),
        Padding(
          padding: EdgeInsets.symmetric(vertical: 10),
          child: Text(
            'Current Visitor ID: $currentVisitorId',
            textAlign: TextAlign.center,
          ),
        ),
        TealiumButton(
          title: 'Set Identity',
          onPressed: _setIdentity,
        ),
        TealiumButton(
          title: 'Reset Visitor Id',
          onPressed: () => Tealium.resetVisitorId(),
        ),
        TealiumButton(
          title: 'Clear Stored Visitor Ids',
          onPressed: () => Tealium.clearStoredVisitorIds(),
        ),
      ],
    );
  }

  void _logVisitorProfile(dynamic profile) {
    var encodedData = json.encode(profile);
    var converted = json.decode(encodedData);
    developer.log('=========Visitor Service Response=========');
    developer
        .log('Audiences: ${JsonEncoder().convert(converted['audiences'])}');
    developer.log(
        'Visit Tallies: ${JsonEncoder().convert(converted['currentVisit']['tallies'])}');
    developer.log('Badges: ${JsonEncoder().convert(converted['badges'])}');
  }

  void _logVisitorId(String visitorId) {
    developer.log('=========Visitor Id Changed =========');
    developer.log('VisitorId: $visitorId');
    setState(() {
      currentVisitorId = visitorId;
    });
  }

  void _logRemoteCommand(String name, dynamic payload) {
    developer.log('=========$name Remote Command Response=========');
    developer.log(JsonEncoder().convert(payload));
  }

  Future<void> _setRandomConsentCategories() async {
    List<ConsentCategories> list = [
      ConsentCategories.affiliates,
      ConsentCategories.analytics,
      ConsentCategories.bigData,
      ConsentCategories.cdp,
      ConsentCategories.cookieMatch,
      ConsentCategories.crm,
      ConsentCategories.displayAds,
      ConsentCategories.email,
      ConsentCategories.engagement,
      ConsentCategories.misc,
      ConsentCategories.mobile,
      ConsentCategories.monitoring,
      ConsentCategories.personalization,
      ConsentCategories.social
    ];
    list.shuffle();
    await Tealium.setConsentCategories(list.sublist(0, 3));
  }

  Future<void> _joinTrace() async {
    setState(() => result = traceIdValue.text);
    await Tealium.joinTrace(result);
  }

  Future<void> _setIdentity() async {
    var identity = userIdValue.text;
    await Tealium.addToDataLayer({visitorIdentityKey: identity}, Expiry.forever);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('TealiumFlutterPluginExample'),
        ),
        body: _listView(),
      ),
    );
  }
}
5
likes
140
points
6.1k
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for using Tealium's Android and iOS libraries.

Homepage
Repository (GitHub)
View/report issues

Documentation

Documentation
API reference

License

unknown (license)

Dependencies

flutter

More

Packages that depend on tealium

Packages that implement tealium