wisetrack_sdk 1.0.6 copy "wisetrack_sdk: ^1.0.6" to clipboard
wisetrack_sdk: ^1.0.6 copied to clipboard

This is the Flutter SDK of WiseTrack™. You can read more about WiseTrack™ at wisetrack.io .

example/lib/main.dart

import 'package:example/Configs.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:wisetrack_sdk/wisetrack.dart';
import 'package:wisetrack_sdk/wisetrack_attribution.dart';
import 'package:wisetrack_sdk/wisetrack_config.dart';
import 'package:wisetrack_sdk/wisetrack_currency.dart';
import 'package:wisetrack_sdk/wisetrack_event.dart';
import 'package:wisetrack_sdk/wisetrack_event_failure.dart';
import 'package:wisetrack_sdk/wisetrack_event_success.dart';
import 'package:wisetrack_sdk/wisetrack_session_failure.dart';
import 'package:wisetrack_sdk/wisetrack_session_success.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'util.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
        // This makes the visual density adapt to the platform that you run
        // the app on. For desktop platforms, the controls will be smaller and
        // closer together (more dense) than on mobile platforms.
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String? title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage>  with WidgetsBindingObserver {
  final _formKey = GlobalKey<FormState>();
  final _eventTokenController = TextEditingController();
  final _eventNameController = TextEditingController();
  final _eventPriceController = TextEditingController();
  final _eventCurrencyController = TextEditingController();
  String _selectedCurrency = "USD";

  bool _isSdkEnabled = true;
  bool _isFirstLaunch = true;
  String environment = '';

  String defaultTracker = '';
  String appToken = '';
  String storeName = '';
  Configs configtoken = new Configs();

  @override
  initState() {
    super.initState();
     WidgetsBinding.instance.addObserver(this);

    _checkFirstLaunch();
  }

  Future<void> _checkFirstLaunch() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool isConfigured = prefs.getBool('isConfigured') ?? false;
    environment = prefs.getString('environment') ?? '';
    appToken = prefs.getString('appToken') ?? '';
    defaultTracker = prefs.getString('defaultTracker') ?? '';
    storeName = prefs.getString('StoreName') ?? '';

    if (!isConfigured) {
      //initPlatformState();
       _showConfigDialog();
    } else {
      initPlatformState();
    }
  }

  void _showConfigDialog() {
    TextEditingController tokenController = TextEditingController();
    TextEditingController trackerController = TextEditingController();
    TextEditingController storeNameController = TextEditingController();
    String selectedEnvironment = "Production";

    showDialog(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('App Configuration'),
          content: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              TextField(
                controller: tokenController,
                decoration: InputDecoration(labelText: 'App Token'),
              ),
              TextField(
                controller: trackerController,
                decoration: InputDecoration(labelText: 'Default Tracker'),
              ),
              TextField(
                controller: storeNameController,
                decoration: InputDecoration(labelText: 'Store Name'),
              ),
              DropdownButton<String>(
                value: selectedEnvironment,
                items: ['Production', 'Stage', 'Debug']
                    .map((env) => DropdownMenuItem(
                          value: env,
                          child: Text(env),
                        ))
                    .toList(),
                onChanged: (value) {
                  setState(() {
                    selectedEnvironment = value!;
                  });
                },
              ),
            ],
          ),
          actions: [
            TextButton(
              onPressed: () async {
                if (tokenController.text.isEmpty) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('All fields are required')),
                  );
                  return;
                }

                SharedPreferences prefs = await SharedPreferences.getInstance();
                await prefs.setBool('isConfigured', true);
                await prefs.setString('appToken', tokenController.text);
                await prefs.setString('defaultTracker', trackerController.text);
                await prefs.setString('storeName', storeNameController.text);
                await prefs.setString(
                    'environment', selectedEnvironment.toLowerCase());

                environment = prefs.getString('environment') ?? '';
                appToken = prefs.getString('appToken') ?? '';
                defaultTracker = prefs.getString('defaultTracker') ?? '';
                storeName = prefs.getString('storeName') ?? '';

                if (environment.isEmpty || appToken.isEmpty) {
                  initPlatformState();
                } else {
                  initPlatformState();
                  print("data is not true");
                }

                Navigator.of(context).pop();
              },
              child: Text('Save'),
            ),
          ],
        );
      },
    );
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this );
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      case AppLifecycleState.inactive:
        break;
      case AppLifecycleState.resumed:
        print('start RRRR onResume -----');
        WiseTrack.onResume();
        break;
      case AppLifecycleState.paused:
        WiseTrack.onPause();
        break;
      case AppLifecycleState.detached:
        break;
    }
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  initPlatformState() async {

    await Future.delayed(Duration.zero, () {

      print("data is not true ::: ${environment}");
      if (environment.isEmpty || appToken.isEmpty) {
        return;
      }

      configtoken.inti(ConfigType.stage);

      WiseTrackConfig config =
      new WiseTrackConfig(appToken, WiseTrackEnvironment.sandbox);
      // config.logLevel = WiseTrackLogLevel.verbose;
      config.processName = "com.wisetrack.flutter.examples";

      config.setAppSecret(159957537531, 1236987415000, 25852, 14741, 789987);

      if (defaultTracker.length > 0) {
        config.defaultTracker = defaultTracker;
      }

      if (environment.length > 0) {
        config.packageName = environment;
      }

      if (storeName.length > 0) {
        config.storeName = storeName;
      }

      config.attributionCallback = (WiseTrackAttribution attributionChangedData) {
        print('[WiseTrack]: Attribution changed!');

        if (attributionChangedData.trackerToken != null) {
          print('[WiseTrack]: Tracker token: ' +
              attributionChangedData.trackerToken!);
        }
        if (attributionChangedData.trackerName != null) {
          print('[WiseTrack]: Tracker name: ' +
              attributionChangedData.trackerName!);
        }
        if (attributionChangedData.campaign != null) {
          print('[WiseTrack]: Campaign: ' + attributionChangedData.campaign!);
        }
        if (attributionChangedData.network != null) {
          print('[WiseTrack]: Network: ' + attributionChangedData.network!);
        }
        if (attributionChangedData.creative != null) {
          print('[WiseTrack]: Creative: ' + attributionChangedData.creative!);
        }
        if (attributionChangedData.adgroup != null) {
          print('[WiseTrack]: Adgroup: ' + attributionChangedData.adgroup!);
        }
        if (attributionChangedData.clickLabel != null) {
          print(
              '[WiseTrack]: Click label: ' + attributionChangedData.clickLabel!);
        }
        if (attributionChangedData.costType != null) {
          print('[WiseTrack]: Cost type: ' + attributionChangedData.costType!);
        }
        if (attributionChangedData.costAmount != null) {
          print('[WiseTrack]: Cost amount: ' +
              attributionChangedData.costAmount!.toString());
        }
        if (attributionChangedData.costCurrency != null) {
          print('[WiseTrack]: Cost currency: ' +
              attributionChangedData.costCurrency!);
        }
      };

      config.sessionSuccessCallback =
          (WiseTrackSessionSuccess sessionSuccessData) {
        print('[WiseTrack]: Session tracking success!');

        if (sessionSuccessData.message != null) {
          print('[WiseTrack]: Message: ' + sessionSuccessData.message!);
        }
        if (sessionSuccessData.timestamp != null) {
          print('[WiseTrack]: Timestamp: ' + sessionSuccessData.timestamp!);
        }
        if (sessionSuccessData.adid != null) {
          print('[WiseTrack]: Adid: ' + sessionSuccessData.adid!);
        }
        if (sessionSuccessData.jsonResponse != null) {
          print(
              '[WiseTrack]: JSON response: ' + sessionSuccessData.jsonResponse!);
        }
      };

      config.sessionFailureCallback =
          (WiseTrackSessionFailure sessionFailureData) {
        print('[WiseTrack]: Session tracking failure!');

        if (sessionFailureData.message != null) {
          print('[WiseTrack]: Message: ' + sessionFailureData.message!);
        }
        if (sessionFailureData.timestamp != null) {
          print('[WiseTrack]: Timestamp: ' + sessionFailureData.timestamp!);
        }
        if (sessionFailureData.adid != null) {
          print('[WiseTrack]: Adid: ' + sessionFailureData.adid!);
        }
        if (sessionFailureData.willRetry != null) {
          print('[WiseTrack]: Will retry: ' +
              sessionFailureData.willRetry.toString());
        }
        if (sessionFailureData.jsonResponse != null) {
          print(
              '[WiseTrack]: JSON response: ' + sessionFailureData.jsonResponse!);
        }
      };

      config.eventSuccessCallback = (WiseTrackEventSuccess eventSuccessData) {
        print('[WiseTrack]: Event tracking success!');

        if (eventSuccessData.eventToken != null) {
          print('[WiseTrack]: Event token: ' + eventSuccessData.eventToken!);
        }
        if (eventSuccessData.message != null) {
          print('[WiseTrack]: Message: ' + eventSuccessData.message!);
        }
        if (eventSuccessData.timestamp != null) {
          print('[WiseTrack]: Timestamp: ' + eventSuccessData.timestamp!);
        }
        if (eventSuccessData.adid != null) {
          print('[WiseTrack]: Adid: ' + eventSuccessData.adid!);
        }
        if (eventSuccessData.callbackId != null) {
          print('[WiseTrack]: Callback ID: ' + eventSuccessData.callbackId!);
        }
        if (eventSuccessData.jsonResponse != null) {
          print('[WiseTrack]: JSON response: ' + eventSuccessData.jsonResponse!);
        }
      };

      config.eventFailureCallback = (WiseTrackEventFailure eventFailureData) {
        print('[WiseTrack]: Event tracking failure!');

        if (eventFailureData.eventToken != null) {
          print('[WiseTrack]: Event token: ' + eventFailureData.eventToken!);
        }
        if (eventFailureData.message != null) {
          print('[WiseTrack]: Message: ' + eventFailureData.message!);
        }
        if (eventFailureData.timestamp != null) {
          print('[WiseTrack]: Timestamp: ' + eventFailureData.timestamp!);
        }
        if (eventFailureData.adid != null) {
          print('[WiseTrack]: Adid: ' + eventFailureData.adid!);
        }
        if (eventFailureData.callbackId != null) {
          print('[WiseTrack]: Callback ID: ' + eventFailureData.callbackId!);
        }
        if (eventFailureData.willRetry != null) {
          print('[WiseTrack]: Will retry: ' +
              eventFailureData.willRetry.toString());
        }
        if (eventFailureData.jsonResponse != null) {
          print('[WiseTrack]: JSON response: ' + eventFailureData.jsonResponse!);
        }
      };

      config.deferredDeeplinkCallback = (String? uri) {
        print('[WiseTrack]: Received deferred deeplink: ' + uri!);
      };

      config.skanUpdatedCallback = (Map<String, String> skanUpdateData) {
        print('[WiseTrack]: Received SKAN update information!');
        if (skanUpdateData["conversion_value"] != null) {
          print('[WiseTrack]: Conversion value: ' +
              skanUpdateData["conversion_value"]!);
        }
        if (skanUpdateData["coarse_value"] != null) {
          print('[WiseTrack]: Coarse value: ' + skanUpdateData["coarse_value"]!);
        }
        if (skanUpdateData["lock_window"] != null) {
          print('[WiseTrack]: Lock window: ' + skanUpdateData["lock_window"]!);
        }
        if (skanUpdateData["error"] != null) {
          print('[WiseTrack]: Error: ' + skanUpdateData["error"]!);
        }
      };

      // Add session callback parameters.
      WiseTrack.addGlobalCallbackParameter('scp_foo_1', 'scp_bar');
      WiseTrack.addGlobalCallbackParameter('scp_foo_2', 'scp_value');

      // Add session Partner parameters.
      WiseTrack.addGlobalPartnerParameter('spp_foo_1', 'spp_bar');
      WiseTrack.addGlobalPartnerParameter('spp_foo_2', 'spp_value');

      // Remove session callback parameters.
      WiseTrack.removeGlobalCallbackParameter('scp_foo_1');
      WiseTrack.removeGlobalPartnerParameter('spp_foo_1');

      // Clear all session callback parameters.
      WiseTrack.removeGlobalCallbackParameters();

      // Clear all session partner parameters.
      WiseTrack.removeGlobalPartnerParameters();

      // Ask for tracking consent.
      WiseTrack.requestAppTrackingAuthorization().then((status) {
        print('[WiseTrack]: Authorization status update!');
        switch (status) {
          case 0:
            print(
                '[WiseTrack]: Authorization status update: ATTrackingManagerAuthorizationStatusNotDetermined');
            break;
          case 1:
            print(
                '[WiseTrack]: Authorization status update: ATTrackingManagerAuthorizationStatusRestricted');
            break;
          case 2:
            print(
                '[WiseTrack]: Authorization status update: ATTrackingManagerAuthorizationStatusDenied');
            break;
          case 3:
            print(
                '[WiseTrack]: Authorization status update: ATTrackingManagerAuthorizationStatusAuthorized');
            break;
        }
      });

      // start SDK
      WiseTrack.initSdk(config);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Event Details'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              TextFormField(
                controller: _eventTokenController,
                decoration: const InputDecoration(
                  labelText: 'Event Token',
                ),
                validator: (value) {

                  return null;
                },
              ),
              const SizedBox(height: 16.0),
              TextFormField(
                controller: _eventNameController,
                decoration: const InputDecoration(
                  labelText: 'Event Name',
                ),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter event name';
                  }
                  return null;
                },
              ),
              const SizedBox(height: 16.0),
              TextFormField(
                controller: _eventPriceController,
                decoration: const InputDecoration(
                  labelText: 'Event Price',
                ),
                keyboardType: TextInputType.number,
                validator: (value) {
                },
              ),
              const SizedBox(height: 16.0),

              DropdownButton<String>(
                value: _selectedCurrency,
                items: [
                  'USD',
                  'EUR',
                  'JPY',
                  'GBP',
                  'AUD',
                  'CAD',
                  'CHF',
                  'CNY',
                  'SEK',
                  'NZD',
                  'MXN',
                  'SGD',
                  'HKD',
                  'NOK',
                  'KRW',
                  'TRY',
                  'RUB',
                  'INR',
                  'BRL',
                  'ZAR',
                  'IRR',
                  'AED',
                  'IQD',
                  'SAR',
                  'OMR',
                  'BTC',
                  'EHT',
                  'LTC'
                ]
                    .map((env) => DropdownMenuItem(
                          value: env,
                          child: Text(env),
                        ))
                    .toList(),
                onChanged: (value) {
                  setState(() {
                    _selectedCurrency = value!;
                  });
                },
              ),

              const SizedBox(height: 24.0),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    // Process data here
                    String eventToken = _eventTokenController.text;
                    String eventName = _eventNameController.text;
                    String eventPrice = _eventPriceController.text;
                    String eventCurrency = _eventCurrencyController.text;

                    WiseTrackEvent event = WiseTrackEvent(eventToken);
                    if (eventName.isNotEmpty) {
                      event.setEventName(eventName);
                    }


                    // Default currency
                    WiseTrackCurrency currency = WiseTrackCurrency.USD;

                    // Compare and assign the correct enum value
                    if (_selectedCurrency.contains('USD')) {
                      currency = WiseTrackCurrency.USD;
                    } else if (_selectedCurrency.contains('EUR')) {
                      currency = WiseTrackCurrency.EUR;
                    } else if (_selectedCurrency.contains('JPY')) {
                      currency = WiseTrackCurrency.JPY;
                    } else if (_selectedCurrency.contains('GBP')) {
                      currency = WiseTrackCurrency.GBP;
                    } else if (_selectedCurrency.contains('AUD')) {
                      currency = WiseTrackCurrency.AUD;
                    } else if (_selectedCurrency.contains('CAD')) {
                      currency = WiseTrackCurrency.CAD;
                    } else if (_selectedCurrency.contains('CHF')) {
                      currency = WiseTrackCurrency.CHF;
                    } else if (_selectedCurrency.contains('CNY')) {
                      currency = WiseTrackCurrency.CNY;
                    } else if (_selectedCurrency.contains('SEK')) {
                      currency = WiseTrackCurrency.SEK;
                    } else if (_selectedCurrency.contains('NZD')) {
                      currency = WiseTrackCurrency.NZD;
                    } else if (_selectedCurrency.contains('MXN')) {
                      currency = WiseTrackCurrency.MXN;
                    } else if (_selectedCurrency.contains('SGD')) {
                      currency = WiseTrackCurrency.SGD;
                    } else if (_selectedCurrency.contains('HKD')) {
                      currency = WiseTrackCurrency.HKD;
                    } else if (_selectedCurrency.contains('NOK')) {
                      currency = WiseTrackCurrency.NOK;
                    } else if (_selectedCurrency.contains('KRW')) {
                      currency = WiseTrackCurrency.KRW;
                    } else if (_selectedCurrency.contains('TRY')) {
                      currency = WiseTrackCurrency.TRY;
                    } else if (_selectedCurrency.contains('RUB')) {
                      currency = WiseTrackCurrency.RUB;
                    } else if (_selectedCurrency.contains('INR')) {
                      currency = WiseTrackCurrency.INR;
                    } else if (_selectedCurrency.contains('BRL')) {
                      currency = WiseTrackCurrency.BRL;
                    } else if (_selectedCurrency.contains('ZAR')) {
                      currency = WiseTrackCurrency.ZAR;
                    } else if (_selectedCurrency.contains('IRR')) {
                      currency = WiseTrackCurrency.IRR;
                    } else if (_selectedCurrency.contains('AED')) {
                      currency = WiseTrackCurrency.AED;
                    } else if (_selectedCurrency.contains('IQD')) {
                      currency = WiseTrackCurrency.IQD;
                    } else if (_selectedCurrency.contains('SAR')) {
                      currency = WiseTrackCurrency.SAR;
                    } else if (_selectedCurrency.contains('OMR')) {
                      currency = WiseTrackCurrency.OMR;
                    } else if (_selectedCurrency.contains('BTC')) {
                      currency = WiseTrackCurrency.BTC;
                    } else if (_selectedCurrency.contains('EHT')) {
                      currency = WiseTrackCurrency.EHT;
                    } else if (_selectedCurrency.contains('LTC')) {
                      currency = WiseTrackCurrency.LTC;
                    }

                    if (eventPrice.isNotEmpty && eventPrice.isNotEmpty) {
                      event.setRevenue(int.parse(eventPrice), currency);
                    }


                    WiseTrack.trackEvent(event);


                  }
                },
                child: const Text('Send'),
              ),
            ],
          ),
        ),
      ),
    );
  }

/*  _showIsSdkEnabled() {
    try {
      WiseTrack.isEnabled().then((isEnabled) {
        _isSdkEnabled = isEnabled;
        _showDialogMessage('SDK Enabled?', 'WiseTrack is enabled = $isEnabled');
      });
    } on PlatformException {
      _showDialogMessage(
          'SDK Enabled?', 'No such method found in plugin: isEnabled');
    }
  }

  void _showDialogMessage(String title, String text,
      [bool printToConsoleAlso = true]) {
    if (printToConsoleAlso) {
      print(text);
    }

    showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        return new CupertinoAlertDialog(
          title: Text(title),
          content: Text(text),
          actions: <Widget>[
            new CupertinoDialogAction(
              child: const Text('OK'),
              onPressed: () {
                Navigator.pop(context, 'OK');
              },
            )
          ],
        );
      },
    );
  }*/
}
0
likes
120
points
0
downloads

Publisher

unverified uploader

Weekly Downloads

This is the Flutter SDK of WiseTrack™. You can read more about WiseTrack™ at wisetrack.io .

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

flutter, meta

More

Packages that depend on wisetrack_sdk

Packages that implement wisetrack_sdk