trigger method

  1. @override
Future<void> trigger({
  1. required BuildContext context,
  2. required String userStatId,
  3. String position = "FULL_SCREEN",
  4. required String event,
  5. Map<String, dynamic>? gameSettingDetails,
  6. List? userResponses,
  7. int? status,
  8. List? rewards,
  9. Map<String, dynamic>? subTasks,
  10. Map<String, dynamic>? eventProperties,
  11. String? destinationRoot,
})
override

Implementation

@override
Future<void> trigger({
  required BuildContext context,
  required String userStatId,
  String position = "FULL_SCREEN",
  required String event,
  Map<String, dynamic>? gameSettingDetails,
  List<dynamic>? userResponses,
  int? status,
  List<dynamic>? rewards,
  Map<String, dynamic>? subTasks,
  Map<String, dynamic>? eventProperties,
  String? destinationRoot,
}) async {
  // log(jsonEncode(gameSettingDetails), name: "NudgeLeaderboardUi");

  // return;

  leaderboard_entity.Task task =
      leaderboard_entity.Task.fromJson(gameSettingDetails!);
  TaskFilter? taskFilter = TaskFilter.fromString(task.vars!['filter']);

  taskId = task.id!;

  // if (taskFilter.taskId == "UNINITIALIZED" &&
  //     taskFilter.rewardId == "UNINITIALIZED") {
  //   return;
  // }

  // logger.i("""
  // taskFilter:
  // taskID: ${taskFilter.taskId}
  // rewardID: ${taskFilter.rewardId}
  // """);

  Map<String, dynamic>? currentUser;
  List<dynamic> users = [];

  CentralDataRepository(
    taskId: taskId,
    taskData: gameSettingDetails,
    subTasks: null,
    assets: Nudge.assets,
    assetUrl: assetUrl,
    userProps: Nudge.userProps,
    currentUser: null,
    users: null,
    // currentUser: {"name": "You", "rank": "1", "value": "0"},
    // users: [
    //   {"name": "You", "rank": "1", "value": "0"},
    //   {"name": "User 1", "rank": "2", "value": "0"},
    //   {"name": "User 2", "rank": "3", "value": "0"},
    //   {"name": "User 3", "rank": "4", "value": "0"},
    //   {"name": "User 4", "rank": "5", "value": "0"},
    //   {"name": "User 5", "rank": "6", "value": "0"},
    //   {"name": "User 6", "rank": "7", "value": "0"},
    //   {"name": "User 7", "rank": "8", "value": "0"},
    //   {"name": "User 8", "rank": "9", "value": "0"},
    //   {"name": "User 9", "rank": "10", "value": "0"},
    // ],
  );

  try {
    await Nudge.getInstance().getLeaderboardData(
        filter: task.vars!['filter'],
        onSuccessCallback: (data) {
          // logger.i(
          //   "Leaderboard data: ${jsonEncode(data)}",
          // );

          currentUser = data['user'];
          users = data['users'].isEmpty ? [] : data['users'];

          CentralDataRepository.updateInstance(
            taskId,
            // currentUser: {"name": "You", "rank": "1", "value": "0"},
            // users: [
            //   {"name": "You", "rank": "1", "value": "0"},
            //   {"name": "User 1", "rank": "2", "value": "0"},
            //   {"name": "User 2", "rank": "3", "value": "0"},
            //   {"name": "User 3", "rank": "4", "value": "0"},
            //   {"name": "User 4", "rank": "5", "value": "0"},
            //   {"name": "User 5", "rank": "6", "value": "0"},
            //   {"name": "User 6", "rank": "7", "value": "0"},
            //   {"name": "User 7", "rank": "8", "value": "0"},
            //   {"name": "User 8", "rank": "9", "value": "0"},
            //   {"name": "User 9", "rank": "10", "value": "0"},
            // ],
            currentUser: currentUser,
            users: users,
          );
        },
        onErrorCallback: (error, stackTrace) {
          logger.e("Error: $error", stackTrace: stackTrace);
          return;
        });
  } catch (e) {
    logger.e("Error: $e");
  }
  // log("NudgeLeaderboardUi: $users", name: "NudgeLeaderboardUi");
  // return;

  // logger.i("length : ${CentralDataRepository.getInstance(taskId)?.users}");

  if (!context.mounted) {
    return;
  }

  Map<String, dynamic> _roots = {};

  _roots = ExperienceParser.parseExperience(
    taskData: gameSettingDetails,
    variantIndex: 0,
    rewards: rewards,
    taskStatus: status,
    eventProperties: eventProperties,
  );

  for (var root in gameSettingDetails["variants"][0]["root"]) {
    if (root["type"] == 5) {
      for (var acId in root["app_component_ids"]!) {
        var widgetDetails =
            NudgeWidgetTracker.findWidgetPositionByLabel(acId, 1, 1);

        if (widgetDetails != null) {
          var appComponentKey = widgetDetails.key;

          Nudge.appComponents[appComponentKey] = NudgeAppComponentData(
            taskId: task.id!,
            event: event,
            rootId: root["id"],
            taskData: gameSettingDetails,
            subTasksData: subTasks ?? {},
            rootData: root,
          );

          Nudge.appComponentUiController.add(
            Nudge.appComponents,
          );
        }
      }
    }
  }

  // log("NudgeChallengesUi: $destinationRoot", name: "NudgeChallengesUi");

  leaderboard_entity.Root? fullPageRoot;

  // log("NudgeChallengesUi: ${task.variants[0].roots.map((e) => print(e.id))}",
  //     name: "NudgeChallengesUi");

  try {
    fullPageRoot = task.variants[0].roots
        .where((element) => element.id == destinationRoot)
        .single;
  } catch (e) {
    log(
      "NudgeChallengesUi: $e, pageRoot: $fullPageRoot",
      name: "NudgeChallengesUi",
    );
  }

  // log("NudgeChallengesUi: ${fullPageRoot?.type}", name: "NudgeChallengesUi");

  if (fullPageRoot == null) {
    return;
  }

  switch (fullPageRoot.type) {
    case 1:
      showDialog(
        context: context,
        builder: (context) {
          return Dialog(
            insetPadding: const EdgeInsets.all(0),
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(18.0),
            ),
            child: Padding(
              padding: const EdgeInsets.all(0.0),
              child: ClipRRect(
                borderRadius: const BorderRadius.only(
                  topLeft: Radius.circular(18.0),
                  topRight: Radius.circular(18.0),
                ),
                child: FractionallySizedBox(
                  widthFactor: 0.8,
                  child: LeaderboardPage(
                    root: fullPageRoot!,
                  ),
                ),
              ),
            ),
          );
        },
      );
      break;

    case 2:
      showModalBottomSheet(
        backgroundColor: Colors.white,
        isDismissible: true,
        isScrollControlled: true,
        shape: const RoundedRectangleBorder(
          borderRadius: BorderRadius.only(
            topLeft: Radius.circular(18.0),
            topRight: Radius.circular(18.0),
          ),
        ),
        context: context,
        builder: (context) {
          return FractionallySizedBox(
            heightFactor: 0.7,
            child: ClipRRect(
              borderRadius: const BorderRadius.only(
                topLeft: Radius.circular(18.0),
                topRight: Radius.circular(18.0),
              ),
              child: LeaderboardPage(
                root: fullPageRoot!,
              ),
            ),
          );
        },
      );
      break;

    case 4:
      Navigator.of(context).push(
        MaterialPageRoute(builder: (context) {
          return LeaderboardPage(
            root: fullPageRoot!,
          );
        }),
      );
      break;

    default:
      break;
  }
}