tealium 3.0.0
tealium: ^3.0.0 copied to clipboard
A Flutter plugin for using Tealium's Android and iOS libraries.
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(),
),
);
}
}