trigger method
Future<void>
trigger({
- required BuildContext context,
- required String userStatId,
- String position = "FULL_SCREEN",
- required String event,
- Map<
String, dynamic> ? gameSettingDetails, - List? userResponses,
- int? status,
- List? rewards,
- Map<
String, dynamic> ? subTasks, - Map<
String, dynamic> ? eventProperties, - 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;
}
}