312 lines
8.4 KiB
Dart
312 lines
8.4 KiB
Dart
import 'dart:async';
|
||
import 'dart:convert';
|
||
import 'dart:js' as js;
|
||
|
||
import 'package:guru_fb_game/model/model.dart';
|
||
|
||
class FbGameGlobalUtils {
|
||
static Future<dynamic> getFBProfile() {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('getFBProfileWithUid', [
|
||
(success) => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> shareGame(FbShareData data) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('shareGame', [
|
||
json.encode(data.toJson()),
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> inviteUser(FbInviteData data) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('inviteUser', [
|
||
json.encode(data.toJson()),
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Map<String, dynamic> getEntryPointData() {
|
||
final result = js.context.callMethod('getEntryPointData');
|
||
return json.decode(result);
|
||
}
|
||
|
||
static String getLocale() {
|
||
final result = js.context.callMethod('getLocale');
|
||
return result ?? "";
|
||
}
|
||
|
||
static String getPlatform() {
|
||
String result = "web";
|
||
result = js.context.callMethod('getPlatform');
|
||
return result;
|
||
}
|
||
}
|
||
|
||
class FbGamePlayerUtils {
|
||
static void saveData(Map<String, dynamic> data) {
|
||
js.context.callMethod('fbSetData', [json.encode(data)]);
|
||
}
|
||
|
||
static Future<dynamic> getData(List<String> keys) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('fbGetData', [
|
||
json.encode(keys),
|
||
(success) => completer.complete(json.decode(success)),
|
||
(error) => completer.completeError(json.decode(error)),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
//获取当前环境下的用户信息,包括用户id,用户名称,用户头像
|
||
Future<dynamic> getPlayersAsync() async {
|
||
final completer = Completer<dynamic>();
|
||
js.context.callMethod('getPlayersAsync', [
|
||
(value) {
|
||
List<Map<String, dynamic>> players = json.decode(value);
|
||
final users = players.map((e) => FbUserInfo.fromJson(e)).toList();
|
||
completer.complete(users);
|
||
},
|
||
(error) => completer.completeError(json.decode(error)),
|
||
]);
|
||
return completer.future;
|
||
}
|
||
|
||
/**
|
||
* 获取玩家同玩好友的信息
|
||
* 返回的值是数组
|
||
*/
|
||
Future<dynamic> getConnectedPlayersAsync() {
|
||
final completer = Completer<dynamic>();
|
||
js.context.callMethod('getConnectedPlayersAsync', [
|
||
(value) {
|
||
List<Map<String, dynamic>> players = json.decode(value);
|
||
final users = players.map((e) => FbUserInfo.fromJson(e)).toList();
|
||
completer.complete(users);
|
||
},
|
||
(error) => completer.completeError(json.decode(error)),
|
||
]);
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> subscribeBot() {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('subscribeBot', [
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(json.decode(error)),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
}
|
||
|
||
class FbGameTournamentUtils {
|
||
static Future<dynamic> createTournament(num initialScore, FbTournamentConfig config, Map<String, String> data) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('createTournament', [
|
||
initialScore,
|
||
json.encode(config.toJson()),
|
||
json.encode(data),
|
||
(value) => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> postTournamentScore(String id, num score) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('postTournamentScore', [
|
||
id,
|
||
score,
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> shareTournament(num score, Map<String, dynamic> data) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('shareTournament', [
|
||
score,
|
||
json.encode(data),
|
||
(value) => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> getCurrentTournament() {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('getCurrentTournament', [
|
||
(success) => completer.complete(json.decode(success)),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
// success 返回 map
|
||
// {
|
||
// id: tournament.getContextID(),
|
||
// endTime: tournament.getEndTime(),
|
||
// title: tournament.getTitle(),
|
||
// payLoad: tournament.getPayload()
|
||
// }
|
||
|
||
return completer.future;
|
||
}
|
||
}
|
||
|
||
class FbGameContextUtils {
|
||
static Future<dynamic> createAsync(String playerId) {
|
||
final completer = Completer<dynamic>();
|
||
js.context.callMethod('createAsync', [
|
||
playerId,
|
||
(value) => completer.complete(),
|
||
(error) => completer.completeError(json.decode(error)),
|
||
]);
|
||
return completer.future;
|
||
}
|
||
|
||
static void updateAsync(String img) {
|
||
js.context.callMethod('updateAsync', [img]);
|
||
}
|
||
|
||
static FBContextInfo getContext() {
|
||
final result = js.context.callMethod('getContextInfo');
|
||
return FBContextInfo.fromJson(json.decode(result));
|
||
}
|
||
|
||
static Future<dynamic> contextSwitchAsync(String contextId) {
|
||
final completer = Completer<dynamic>();
|
||
js.context.callMethod('contextSwitchAsync', [
|
||
contextId,
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(json.decode(error)),
|
||
]);
|
||
return completer.future;
|
||
}
|
||
|
||
//切换当前环境,如果选择朋友,则可以获取到朋友的信息
|
||
static Future<dynamic> chooseContext() async {
|
||
final completer = Completer<dynamic>();
|
||
js.context.callMethod('chooseContext', [
|
||
(value) => completer.complete(FBContextInfo.fromJson(json.decode(value))),
|
||
(error) => completer.completeError(json.decode(error)),
|
||
]);
|
||
return completer.future;
|
||
}
|
||
}
|
||
|
||
class FbGameLogUtils {
|
||
static void fbLogEvent(String eventName, int valueToSum, Map<String, dynamic> params) {
|
||
js.context.callMethod('logEvent', [eventName, valueToSum, json.encode(params)]);
|
||
}
|
||
|
||
static void initGuruLogEvent(InitGuruLogEventData data) {
|
||
js.context.callMethod('initEventLogger', [json.encode(data.toJson())]);
|
||
}
|
||
|
||
static void guruLogEvent(String eventName, Map<String, dynamic> params, Map<String, dynamic> properties) {
|
||
js.context.callMethod('castboxLogEvent', [eventName, json.encode(params), json.encode(properties)]);
|
||
}
|
||
}
|
||
|
||
class FbGameAdUtils {
|
||
static List<String> checkSupportedAds() {
|
||
final String listStr = js.context.callMethod("checkSupportedAds");
|
||
List<String> list = json.decode(listStr);
|
||
return list;
|
||
}
|
||
|
||
static Future<dynamic> showBanner(String id) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('showBannerAds', [
|
||
id,
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> hideBanner(String id) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('hideBannerAds', [
|
||
id,
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> loadInterstitial(String id) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('loadInterstitial', [
|
||
id,
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> showInterstitial() {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('showInterstitial', [
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> loadRewarded(String id) {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('loadRewarded', [
|
||
id,
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
|
||
static Future<dynamic> showRewarded() {
|
||
final completer = Completer<dynamic>();
|
||
|
||
js.context.callMethod('showRewarded', [
|
||
() => completer.complete(),
|
||
(error) => completer.completeError(error),
|
||
]);
|
||
|
||
return completer.future;
|
||
}
|
||
} |