countly_flutter 20.11.2 copy "countly_flutter: ^20.11.2" to clipboard
countly_flutter: ^20.11.2 copied to clipboard

outdated

Countly is an innovative, real-time, open source mobile analytics and push notifications platform.

example/lib/main.dart

// @dart=2.9
import 'dart:io';

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:math';
import 'dart:convert';

import 'package:countly_flutter/countly_flutter.dart';

/// This or a similar call needs to added to catch and report Dart Errors to Countly,
/// You need to run app inside a Zone
/// and provide the [Countly.recordDartError] callback for [onError()]
void main() {
  runZonedGuarded<Future<void>>(() async {
    runApp(MyApp());
  }, Countly.recordDartError);
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    Countly.isInitialized().then((bool isInitialized){
      if(!isInitialized){
        /// Recommended settings for Countly initialisation
        Countly.setLoggingEnabled(true); // Enable countly internal debugging logs
        Countly.enableCrashReporting(); // Enable crash reporting to report unhandled crashes to Countly
        Countly.setRequiresConsent(true); // Set that consent should be required for features to work.
        Countly.giveConsentInit(["location", "sessions", "attribution", "push", "events", "views", "crashes", "users", "push", "star-rating", "apm", "feedback", "remote-config"]);
        Countly.setLocationInit("TR", "Istanbul", "41.0082,28.9784", "10.2.33.12");// Set user initial location.

        /// Optional settings for Countly initialisation
        Countly.enableParameterTamperingProtection("salt"); // Set the optional salt to be used for calculating the checksum of requested data which will be sent with each request
        Countly.setHttpPostForced(false); // Set to "true" if you want HTTP POST to be used for all requests
        Countly.enableApm(); // Enable APM features, which includes the recording of app start time.
        if (Platform.isIOS) {
          Countly.recordAttributionID("ADVERTISING_ID");
        }
        else {
          Countly.enableAttribution(); // Enable to measure your marketing campaign performance by attributing installs from specific campaigns.
        }
        Countly.setRemoteConfigAutomaticDownload((result){
          print(result);
        }); // Set Automatic value download happens when the SDK is initiated or when the device ID is changed.
        var segment = {"Key": "Value"};
        Countly.setCustomCrashSegment(segment); // Set optional key/value segment added for crash reports.
        Countly.pushTokenType(Countly.messagingMode["TEST"]); // Set messaging mode for push notifications

        Countly.setStarRatingDialogTexts("Title", "Message", "Dismiss");

        Countly.init(SERVER_URL, APP_KEY ).then((value){
          Countly.appLoadingFinished();
          Countly.start();
          /// Push notifications settings
          /// Should be call after init
          Countly.onNotification((String notification){
            print("The notification");
            print(notification);
          }); // Set callback to receive push notifications
          Countly.askForNotificationPermission(); // This method will ask for permission, enables push notification and send push token to countly server.;

          Countly.giveAllConsent(); // give consent for all features, should be call after init
//        Countly.giveConsent(["events", "views"]); // give consent for some specific features, should be call after init.
        }); // Initialize the countly SDK.
      }else{
        print("Countly: Already initialized.");
      }
    });
  }

  // ignore: non_constant_identifier_names
  static String SERVER_URL = "https://try.count.ly";
  // ignore: non_constant_identifier_names
  static String APP_KEY = "YOUR_API_KEY";

  enableTemporaryIdMode(){
    Countly.changeDeviceId(Countly.deviceIDType["TemporaryDeviceID"], false);
  }
  manualSessionHandling(){
    Countly.manualSessionHandling();
  }
  basicEvent(){
    // example for basic event
    var event = {
      "key": "Basic Event",
      "count": 1
    };
    Countly.recordEvent(event);
  }
  eventWithSum(){
    // example for event with sum
    var event = {
      "key": "Event With Sum",
      "count": 1,
      "sum": "0.99",
    };
    Countly.recordEvent(event);
  }
  eventWithSegment(){
    // example for event with segment
    var event = {
      "key": "Event With Segment",
      "count": 1
    };
    event["segmentation"] = {
      "Country": "Turkey",
      "Age": "28"
    };
    Countly.recordEvent(event);
  }

  eventWithSumSegment(){
    // example for event with segment and sum
    var event = {
      "key": "Event With Sum And Segment",
      "count": 1,
      "sum": "0.99"
    };
    event["segmentation"] = {
      "Country": "Turkey",
      "Age": "28"
    };
    Countly.recordEvent(event);
  }
  endEventBasic(){
    Countly.startEvent("Timed Event");
    Timer timer;
    timer = new Timer(new Duration(seconds: 5), () {
      Countly.endEvent({ "key": "Timed Event" });
      timer.cancel();
    });
  }
  endEventWithSum(){
    Countly.startEvent("Timed Event With Sum");
    Timer timer;
    timer = new Timer(new Duration(seconds: 5), () {
      Countly.endEvent({ "key": "Timed Event With Sum", "sum": "0.99" });
      timer.cancel();
    });
  }
  endEventWithSegment(){
    Countly.startEvent("Timed Event With Segment");
    Timer timer;
    timer = new Timer(new Duration(seconds: 5), () {
      var event = {
        "key": "Timed Event With Segment",
        "count": 1,
      };
      event["segmentation"] = {
        "Country": "Turkey",
        "Age": "28"
      };
      Countly.endEvent(event);
      timer.cancel();
    });
  }
  endEventWithSumSegment(){
    Countly.startEvent("Timed Event With Segment, Sum and Count");
    Timer timer;
    timer = new Timer(new Duration(seconds: 5), () {
      var event = {
        "key": "Timed Event With Segment, Sum and Count",
        "count": 1,
        "sum": "0.99"
      };
      event["segmentation"] = {
        "Country": "Turkey",
        "Age": "28"
      };
      Countly.endEvent(event);
      timer.cancel();
    });
  }
  recordViewHome(){
    Map<String, Object> segments = {
      "Cats": 123,
      "Moons": 9.98,
      "Moose": "Deer"
    };
    Countly.recordView("HomePage", segments);

  }
  recordViewDashboard(){
    Countly.recordView("Dashboard");
  }
  String makeid(){
    int code = new Random().nextInt(999999);
    String random = code.toString();
    print(random);
    return random;
  }
  setUserData(){
    Map<String, Object> options = {
      "name": "Name of User",
      "username": "Username",
      "email": "User Email",
      "organization": "User Organization",
      "phone": "User Contact number",
      "picture": "https://count.ly/images/logos/countly-logo.png",
      "picturePath": "",
      "gender": "User Gender",
      "byear": "1989",
    };
    Countly.setUserData(options);
  }
  setProperty(){
    Countly.setProperty("setProperty", "My Property");
  }
  increment(){
    Countly.increment("increment");
  }
  incrementBy(){
    Countly.incrementBy("incrementBy", 10);
  }
  multiply(){
    Countly.multiply("multiply", 20);
  }
   saveMax(){
    Countly.saveMax("saveMax", 100);
  }
  saveMin(){
    Countly.saveMin("saveMin", 50);
  }
  setOnce(){
    Countly.setOnce("setOnce", "200");
  }
  pushUniqueValue(){
    Countly.pushUniqueValue("pushUniqueValue", "morning");
  }
  pushValue(){
    Countly.pushValue("pushValue", "morning");
  }
  pullValue(){
    Countly.pullValue("pushValue", "morning");
  }
  //
  giveMultipleConsent(){
    Countly.giveConsent(["events", "views", "star-rating", "crashes"]);
  }
  removeMultipleConsent(){
    Countly.removeConsent(["events", "views", "star-rating", "crashes"]);
  }
  giveAllConsent() {
    Countly.giveAllConsent();
  }
  removeAllConsent(){
    Countly.removeAllConsent();
  }

  giveConsentSessions(){
    Countly.giveConsent(["sessions"]);
  }
  giveConsentEvents(){
    Countly.giveConsent(["events"]);
  }
  giveConsentViews(){
    Countly.giveConsent(["views"]);
  }
  giveConsentLocation(){
    Countly.giveConsent(["location"]);
  }
  giveConsentCrashes(){
    Countly.giveConsent(["crashes"]);
  }
  giveConsentAttribution(){
    Countly.giveConsent(["attribution"]);
  }
  giveConsentUsers(){
    Countly.giveConsent(["users"]);
  }
  giveConsentPush(){
    Countly.giveConsent(["push"]);
  }
  giveConsentStarRating(){
    Countly.giveConsent(["star-rating"]);
  }
  giveConsentAPM(){
  Countly.giveConsent(["apm"]);
  }

  removeConsentsessions(){
    Countly.removeConsent(["sessions"]);
  }
  removeConsentEvents(){
    Countly.removeConsent(["events"]);
  }
  removeConsentViews(){
    Countly.removeConsent(["views"]);
  }
  removeConsentlocation(){
    Countly.removeConsent(["location"]);
  }
  removeConsentcrashes(){
    Countly.removeConsent(["crashes"]);
  }
  removeConsentattribution(){
    Countly.removeConsent(["attribution"]);
  }
  removeConsentusers(){
    Countly.removeConsent(["users"]);
  }
  removeConsentpush(){
    Countly.removeConsent(["push"]);
  }
  removeConsentstarRating(){
    Countly.removeConsent(["star-rating"]);
  }
  removeConsentAPM(){
    Countly.removeConsent(["apm"]);
  }

  askForNotificationPermission(){
    Countly.askForNotificationPermission();
  }
  remoteConfigUpdate(){
    Countly.remoteConfigUpdate((result){
      print(result);
    });
  }
  updateRemoteConfigForKeysOnly(){
    Countly.updateRemoteConfigForKeysOnly(["name"],(result){
      print(result);
    });
  }
  getRemoteConfigValueForKeyString(){
    Countly.getRemoteConfigValueForKey("stringValue",(result){
      print(result);
    });
  }
  getRemoteConfigValueForKeyBoolean(){
    Countly.getRemoteConfigValueForKey("booleanValue",(result){
      print(result);
    });
  }
  getRemoteConfigValueForKeyFloat(){
    Countly.getRemoteConfigValueForKey("floatValue",(result){
      print(result);
    });
  }
  getRemoteConfigValueForKeyInteger(){
    Countly.getRemoteConfigValueForKey("integerValue",(result){
      print(result);
    });
  }

  updateRemoteConfigExceptKeys(){
    Countly.updateRemoteConfigExceptKeys(["url"],(result){
      print(result);
    });
  }

  remoteConfigClearValues(){
    Countly.remoteConfigClearValues((result){
      print(result);
    });
  }

  getRemoteConfigValueForKey(){
    Countly.getRemoteConfigValueForKey("name", (result){
      print(result);
    });
  }

  changeDeviceIdWithMerge(){
    Countly.changeDeviceId("123456", true);
  }
  changeDeviceIdWithoutMerge(){
    Countly.changeDeviceId("123456", false);
  }
  enableParameterTamperingProtection(){
    Countly.enableParameterTamperingProtection("salt");
  }
   setOptionalParametersForInitialization(){
    Map<String, Object> options = {
      "city": "Tampa",
      "country": "US",
      "latitude": "28.006324",
      "longitude": "-82.7166183",
      "ipAddress": "255.255.255.255"
    };
    Countly.setOptionalParametersForInitialization(options);
  }

  addCrashLog(){
    Countly.enableCrashReporting();
    Countly.addCrashLog("User Performed Step A");
    Timer timer;
    timer = new Timer(new Duration(seconds: 5), () {
      Countly.logException("one.js \n two.js \n three.js", true, {"_facebook_version": "0.0.1"});
      timer.cancel();
    });
  }
  causeException(){
    Map<String, Object> options = json.decode("This is a on purpose error.");
  }

  throwException() {
    throw new StateError('This is an thrown Dart exception.');
  }

  throwNativeException() {
    Countly.throwNativeException();
  }

  throwExceptionAsync() async {
    foo() async {
      throw new StateError('This is an async Dart exception.');
    }
    bar() async {
      await foo();
    }
    await bar();
  }

  recordExceptionManually() {
    Countly.logException("This is a manually created exception", true, null);
  }

  dividedByZero() {
    try {
      int firstInput = 20;
      int secondInput = 0;
      int result = firstInput ~/ secondInput;
      print('The result of $firstInput divided by $secondInput is $result');
    } catch (e, s) {
      print('Exception occurs: $e');
      print('STACK TRACE\n: $s');
      Countly.logExceptionEx(e, true, stacktrace: s);
    }
  }

  setLoggingEnabled(){
    Countly.setLoggingEnabled(false);
  }
  askForStarRating(){
    Countly.askForStarRating();
  }
  askForFeedback(){
    Countly.askForFeedback("5e391ef47975d006a22532c0", "Close");
  }

  showSurvey() async {
    FeedbackWidgetsResponse feedbackWidgetsResponse = await Countly.getAvailableFeedbackWidgets() ;
    List<CountlyPresentableFeedback> widgets = feedbackWidgetsResponse.presentableFeedback;
    String error = feedbackWidgetsResponse.error;

    if(error != null) {
      return;
    }

    CountlyPresentableFeedback chosenWidget = null;
    for(CountlyPresentableFeedback widget in widgets) {
      if(widget.type == "survey") {
        chosenWidget = widget;
        break;
      }
    }
    String result = await Countly.presentFeedbackWidget(chosenWidget, "Cancel");
  }

  showNPS() async {
    FeedbackWidgetsResponse feedbackWidgetsResponse = await Countly.getAvailableFeedbackWidgets() ;
    List<CountlyPresentableFeedback> widgets = feedbackWidgetsResponse.presentableFeedback;
    String error = feedbackWidgetsResponse.error;

    if(error != null) {
      return;
    }

    CountlyPresentableFeedback chosenWidget = null;
    for(CountlyPresentableFeedback widget in widgets) {
      if(widget.type == "nps") {
        chosenWidget = widget;
        break;
      }
    }
    String result = await Countly.presentFeedbackWidget(chosenWidget, "Close");
  }

  reportSurveyManually() async {
    FeedbackWidgetsResponse feedbackWidgetsResponse = await Countly.getAvailableFeedbackWidgets() ;
    List<CountlyPresentableFeedback> widgets = feedbackWidgetsResponse.presentableFeedback;
    String error = feedbackWidgetsResponse.error;

    if(error != null) {
      return;
    }
    CountlyPresentableFeedback chosenWidget = null;
    for(CountlyPresentableFeedback widget in widgets) {
      if(widget.type == "survey") {
        chosenWidget = widget;
        break;
      }
    }
    List result = await Countly.getFeedbackWidgetData(chosenWidget);
    error = result[1];
    if(error == null) {
      Map<String, dynamic> retrievedWidgetData = result[0];
      Map<String, Object> segments = {};
      if(retrievedWidgetData != null && retrievedWidgetData.length > 0) {
        List<dynamic> questions = retrievedWidgetData["questions"];

        if (questions != null) {
          Random rnd = new Random();
          //iterate over all questions and set random answers
          for (int a = 0; a < questions.length; a++) {
            Map<dynamic, dynamic> question = questions[a];
            String wType = question["type"];
            String questionId = question["id"];
            String answerKey = "answ-" + questionId;
            List<dynamic> choices = question["choices"];
            switch (wType) {
            //multiple answer question
              case "multi":
                String str = "";
                for(int b = 0 ; b < choices.length ; b++) {
                  if (b % 2 == 0) {
                    if (b != 0) {
                      str += ",";
                    }
                    str += choices[b]["key"];
                  }
                }
                segments[answerKey] =  str;
                break;
              case "radio":
              //dropdown value selector
              case "dropdown":
                int pick = rnd.nextInt(choices.length);
                segments[answerKey] = choices[pick]["key"];//pick the key of random choice
                break;
            //text input field
              case "text":
                segments[answerKey] = "Some random text";
                break;
            //rating picker
              case "rating":
                segments[answerKey] = rnd.nextInt(11);
                break;
            }
          }
        }
      }
      await Countly.reportFeedbackWidgetManually(chosenWidget, retrievedWidgetData , segments);
    }
  }

  reportNPSManually() async {
    FeedbackWidgetsResponse feedbackWidgetsResponse = await Countly.getAvailableFeedbackWidgets() ;
    List<CountlyPresentableFeedback> widgets = feedbackWidgetsResponse.presentableFeedback;
    String error = feedbackWidgetsResponse.error;

    if(error != null) {
      return;
    }

    CountlyPresentableFeedback chosenWidget = null;
    for(CountlyPresentableFeedback widget in widgets) {
      if(widget.type == "nps") {
        chosenWidget = widget;
        break;
      }
    }
    List result = await Countly.getFeedbackWidgetData(chosenWidget);
    error = result[1];
    if(error == null) {
      Map<String, dynamic> retrievedWidgetData = result[0];
      Map<String, Object> segments = {
        "rating": 3,
        "comment": "Filled out comment"
      };
      await Countly.reportFeedbackWidgetManually(chosenWidget, retrievedWidgetData , segments);
    }
  }

  setLocation(){
    Countly.setLocation("-33.9142687","18.0955802");
  }

  // APM Examples
  startTrace(){
    String traceKey = "Trace Key";
    Countly.startTrace(traceKey);
  }
  endTrace(){
    String traceKey = "Trace Key";
    Map<String, int> customMetric = {
      "ABC": 1233,
      "C44C": 1337
    };
    Countly.endTrace(traceKey, customMetric);
  }
  List<int> successCodes = [100, 101, 200, 201, 202, 205, 300, 301, 303, 305];
  List<int> failureCodes = [400, 402, 405, 408, 500, 501, 502, 505];
  recordNetworkTraceSuccess(){
    String networkTraceKey = "api/endpoint.1";
    var rnd = new Random();
    int responseCode = successCodes[rnd.nextInt(successCodes.length)];
    int requestPayloadSize = rnd.nextInt(700) + 200;
    int responsePayloadSize = rnd.nextInt(700) + 200;
    int startTime = new DateTime.now().millisecondsSinceEpoch;
    int endTime = startTime + 500;
    Countly.recordNetworkTrace(networkTraceKey, responseCode, requestPayloadSize, responsePayloadSize, startTime, endTime);
  }
  recordNetworkTraceFailure(){
    String networkTraceKey = "api/endpoint.1";
    var rnd = new Random();
    int responseCode = failureCodes[rnd.nextInt(failureCodes.length)];
    int requestPayloadSize = rnd.nextInt(700) + 250;
    int responsePayloadSize = rnd.nextInt(700) + 250;
    int startTime = new DateTime.now().millisecondsSinceEpoch;
    int endTime = startTime + 500;
    Countly.recordNetworkTrace(networkTraceKey, responseCode, requestPayloadSize, responsePayloadSize, startTime, endTime);
  }
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Countly SDK Dart Demo'),
        ),
        body: Center(
          child: SingleChildScrollView(child:
            Column(children: <Widget>[
              MyButton(text: "Basic event", color: "brown", onPressed: basicEvent),
              MyButton(text: "Event with Sum", color: "brown", onPressed: eventWithSum),
              MyButton(text: "Event with Segment", color: "brown", onPressed: eventWithSegment),
              MyButton(text: "Even with Sum and Segment", color: "brown", onPressed: eventWithSumSegment),
              MyButton(text: "Timed event: Start / Stop", color: "grey", onPressed: endEventBasic),
              MyButton(text: "Timed event Sum: Start / Stop", color: "grey", onPressed: endEventWithSum),
              MyButton(text: "Timed event Segment: Start / Stop", color: "grey", onPressed: endEventWithSegment),
              MyButton(text: "Timed event Sum Segment: Start / Stop", color: "grey", onPressed: endEventWithSumSegment),

              MyButton(text: "Record View: 'HomePage'", color: "olive", onPressed: recordViewHome),
              MyButton(text: "Record View: 'Dashboard'", color: "olive", onPressed: recordViewDashboard),

              MyButton(text: "Send Users Data", color: "teal", onPressed: setUserData),
              MyButton(text: "UserData.setProperty", color: "teal", onPressed: setProperty),
              MyButton(text: "UserData.increment", color: "teal", onPressed: increment),
              MyButton(text: "UserData.incrementBy", color: "teal", onPressed: incrementBy),
              MyButton(text: "UserData.multiply", color: "teal", onPressed: multiply),
              MyButton(text: "UserData.saveMax", color: "teal", onPressed: saveMax),
              MyButton(text: "UserData.saveMin", color: "teal", onPressed: saveMin),
              MyButton(text: "UserData.setOnce", color: "teal", onPressed: setOnce),
              MyButton(text: "UserData.pushUniqueValue", color: "teal", onPressed: pushUniqueValue),
              MyButton(text: "UserData.pushValue", color: "teal", onPressed: pushValue),
              MyButton(text: "UserData.pullValue", color: "teal", onPressed: pullValue),

              MyButton(text: "Give multiple consent", color: "blue", onPressed: giveMultipleConsent),
              MyButton(text: "Remove multiple consent", color: "blue", onPressed: removeMultipleConsent),
              MyButton(text: "Give all Consent", color: "blue", onPressed: giveAllConsent),
              MyButton(text: "Remove all Consent", color: "blue", onPressed: removeAllConsent),

              MyButton(text: "Give Consent Sessions", color: "blue", onPressed: giveConsentSessions),
              MyButton(text: "Give Consent Events", color: "blue", onPressed:giveConsentEvents),
              MyButton(text: "Give Consent Views", color: "blue", onPressed: giveConsentViews),
              MyButton(text: "Give Consent Location", color: "blue", onPressed: giveConsentLocation),
              MyButton(text: "Give Consent Crashes", color: "blue", onPressed: giveConsentCrashes),
              MyButton(text: "Give Consent Attribution", color: "blue", onPressed:giveConsentAttribution),
              MyButton(text: "Give Consent Users", color: "blue", onPressed: giveConsentUsers),
              MyButton(text: "Give Consent Push", color: "blue", onPressed: giveConsentPush),
              MyButton(text: "Give Consent starRating", color: "blue", onPressed: giveConsentStarRating),
              MyButton(text: "Give Consent Performance", color: "blue", onPressed: giveConsentAPM),


              MyButton(text: "Remove Consent Sessions", color: "blue", onPressed: removeConsentsessions),
              MyButton(text: "Remove Consent Events", color: "blue", onPressed:removeConsentEvents),
              MyButton(text: "Remove Consent Views", color: "blue", onPressed: removeConsentViews),
              MyButton(text: "Remove Consent Location", color: "blue", onPressed: removeConsentlocation),
              MyButton(text: "Remove Consent Crashes", color: "blue", onPressed: removeConsentcrashes),
              MyButton(text: "Remove Consent Attribution", color: "blue", onPressed:removeConsentattribution),
              MyButton(text: "Remove Consent Users", color: "blue", onPressed: removeConsentusers),
              MyButton(text: "Remove Consent Push", color: "blue", onPressed: removeConsentpush),
              MyButton(text: "Remove Consent starRating", color: "blue", onPressed: removeConsentstarRating),
              MyButton(text: "Remove Consent Performance", color: "blue", onPressed: removeConsentAPM),



              MyButton(text: "Countly.remoteConfigUpdate", color: "purple", onPressed: remoteConfigUpdate),
              MyButton(text: "Countly.updateRemoteConfigForKeysOnly", color: "purple", onPressed: updateRemoteConfigForKeysOnly),
              MyButton(text: "Countly.updateRemoteConfigExceptKeys", color: "purple", onPressed: updateRemoteConfigExceptKeys),
              MyButton(text: "Countly.remoteConfigClearValues", color: "purple", onPressed: remoteConfigClearValues),
              MyButton(text: "Get String Value", color: "purple", onPressed: getRemoteConfigValueForKeyString),
              MyButton(text: "Get Boolean Value", color: "purple", onPressed: getRemoteConfigValueForKeyBoolean),
              MyButton(text: "Get Float Value", color: "purple", onPressed: getRemoteConfigValueForKeyFloat),
              MyButton(text: "Get Integer Value", color: "purple", onPressed: getRemoteConfigValueForKeyInteger),

              MyButton(text: "Push Notification", color: "primary", onPressed: askForNotificationPermission),

              MyButton(text: "Enable Temporary ID Mode", color: "violet", onPressed: enableTemporaryIdMode),
              MyButton(text: "Change Device ID With Merge", color: "violet", onPressed: changeDeviceIdWithMerge),
              MyButton(text: "Change Device ID Without Merge", color: "violet", onPressed: changeDeviceIdWithoutMerge),
              MyButton(text: "Enable Parameter Tapmering Protection", color: "violet", onPressed: enableParameterTamperingProtection),
              MyButton(text: "City, State, and Location", color: "violet", onPressed: setOptionalParametersForInitialization),
              MyButton(text: "setLocation", color: "violet", onPressed: setLocation),

              MyButton(text: "Send Crash Report", color: "violet", onPressed: addCrashLog),
              MyButton(text: "Cause Exception", color: "violet", onPressed: causeException),
              MyButton(text: "Throw Exception", color: "violet", onPressed: throwException),

              MyButton(text: "Throw Exception Async", color: "violet", onPressed: throwExceptionAsync),
              MyButton(text: "Throw Native Exception", color: "violet", onPressed: throwNativeException),
              MyButton(text: "Record Exception Manually", color: "violet", onPressed: recordExceptionManually),
              MyButton(text: "Divided By Zero Exception", color: "violet", onPressed: dividedByZero),

              MyButton(text: "Enabling logging", color: "violet", onPressed: setLoggingEnabled),

              MyButton(text: "Open rating modal", color: "orange", onPressed: askForStarRating),
              MyButton(text: "Open feedback modal", color: "orange", onPressed: askForFeedback),
              MyButton(text: "Show Survey", color: "orange", onPressed: showSurvey),
              MyButton(text: "Show NPS", color: "orange", onPressed: showNPS),
              MyButton(text: "Report Survey Manually", color: "orange", onPressed: reportSurveyManually),
              MyButton(text: "Report NPS Manually", color: "orange", onPressed: reportNPSManually),

              MyButton(text: "Start Trace", color: "black", onPressed: startTrace),
              MyButton(text: "End Trace", color: "black", onPressed: endTrace),
              MyButton(text: "Record Network Trace Success", color: "black", onPressed: recordNetworkTraceSuccess),
              MyButton(text: "Record Network Trace Failure", color: "black", onPressed: recordNetworkTraceFailure),
            ],),
          )
        ),
      ),
    );
  }
}

Map<String, Object> theColor = {
  "default": {
    "button": Color(0xffe0e0e0),
    "text": Color(0xff000000)
  },
  "red": {
    "button": Color(0xffdb2828),
    "text": Color(0xff000000)
  },
  "green": {
    "button": Colors.green,
    "text": Color(0xffffffff)
  },
  "teal": {
    "button": Color(0xff00b5ad),
    "text": Color(0xff000000)
  },
  "blue": {
    "button": Color(0xff00b5ad),
    "text": Color(0xff000000)
  },
  "primary": {
    "button": Color(0xff54c8ff),
    "text": Color(0xff000000)
  },
  "grey": {
    "button": Color(0xff767676),
    "text": Color(0xff000000)
  },
  "brown": {
    "button": Color(0xffa5673f),
    "text": Color(0xff000000)
  },
  "purple": {
    "button": Color(0xffa333c8),
    "text": Color(0xff000000)
  },
  "violet": {
    "button": Color(0xff6435c9),
    "text": Color(0xff000000)
  },
  "yellow": {
    "button": Color(0xfffbbd08),
    "text": Color(0xffffffff)
  },
  "black": {
    "button": Color(0xff1b1c1d),
    "text": Color(0xffffffff)
  },
  "olive": {
    "button": Color(0xffd9e778),
    "text": Color(0xff000000)
  },
  "orange": {
    "button": Color(0xffff851b),
    "text": Color(0xff000000)
  }

};
Map<String, Object> getColor(color){
  if(color == "green"){
    return theColor["green"];
  }else if(color == "teal"){
    return theColor["teal"];
  }else if(color == "red"){
    return theColor["red"];
  }else if(color == "brown"){
    return theColor["brown"];
  }else if(color == "grey"){
    return theColor["grey"];
  }else if(color == "blue"){
    return theColor["blue"];
  }else if(color == "purple"){
    return theColor["purple"];
  }else if(color == "primary"){
    return theColor["primary"];
  }else if(color == "violet"){
    return theColor["violet"];
  }else if(color == "black"){
    return theColor["black"];
  }else if(color == "olive"){
    return theColor["olive"];
  }else if(color == "orange"){
    return theColor["orange"];
  }else{
    return theColor["default"];
  }
}
class MyButton extends StatelessWidget{
  String _text;
  Color _button;
  Color _textC;
  Function _onPressed;
  MyButton({String color, String text, Function onPressed}){
    _text = text;

    Map<String, Object> tColor;
    tColor = getColor(color);
    if(tColor == null){
      tColor = theColor["default"];
    }
    _button = tColor["button"];
    _textC = tColor["text"];

    _onPressed = onPressed;
  }

  @override
  Widget build(BuildContext context){
    return new RaisedButton(
      onPressed: _onPressed,
      color: _button,
      child: SizedBox(
        width: double.maxFinite,
        child: Text(_text, style: new TextStyle(color: _textC),textAlign: TextAlign.center)
        )
    );
  }
}
17
likes
0
pub points
85%
popularity

Publisher

verified publishercount.ly

Countly is an innovative, real-time, open source mobile analytics and push notifications platform.

Homepage

License

unknown (license)

Dependencies

flutter, flutter_plugin_android_lifecycle

More

Packages that depend on countly_flutter