import 'dart:async'; import 'dart:convert'; import 'dart:js' as js; import 'package:guru_fb_game/model/model.dart'; class FbGameGlobalUtils { static Future getFBProfile() { final completer = Completer(); js.context.callMethod('getFBProfileWithUid', [ (success) => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future shareGame(FbShareData data) { final completer = Completer(); js.context.callMethod('shareGame', [ json.encode(data.toJson()), () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future inviteUser(FbInviteData data) { final completer = Completer(); js.context.callMethod('inviteUser', [ json.encode(data.toJson()), () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Map 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 data) { js.context.callMethod('fbSetData', [json.encode(data)]); } static Future getData(List keys) { final completer = Completer(); js.context.callMethod('fbGetData', [ json.encode(keys), (success) => completer.complete(json.decode(success)), (error) => completer.completeError(json.decode(error)), ]); return completer.future; } //获取当前环境下的用户信息,包括用户id,用户名称,用户头像 Future getPlayersAsync() async { final completer = Completer(); js.context.callMethod('getPlayersAsync', [ (value) { List> 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 getConnectedPlayersAsync() { final completer = Completer(); js.context.callMethod('getConnectedPlayersAsync', [ (value) { List> 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 subscribeBot() { final completer = Completer(); js.context.callMethod('subscribeBot', [ () => completer.complete(), (error) => completer.completeError(json.decode(error)), ]); return completer.future; } } class FbGameTournamentUtils { static Future createTournament(num initialScore, FbTournamentConfig config, Map data) { final completer = Completer(); js.context.callMethod('createTournament', [ initialScore, json.encode(config.toJson()), json.encode(data), (value) => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future postTournamentScore(String id, num score) { final completer = Completer(); js.context.callMethod('postTournamentScore', [ id, score, () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future shareTournament(num score, Map data) { final completer = Completer(); js.context.callMethod('shareTournament', [ score, json.encode(data), (value) => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future getCurrentTournament() { final completer = Completer(); 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 createAsync(String playerId) { final completer = Completer(); 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 contextSwitchAsync(String contextId) { final completer = Completer(); js.context.callMethod('contextSwitchAsync', [ contextId, () => completer.complete(), (error) => completer.completeError(json.decode(error)), ]); return completer.future; } //切换当前环境,如果选择朋友,则可以获取到朋友的信息 static Future chooseContext() async { final completer = Completer(); 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 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 params, Map properties) { js.context.callMethod('castboxLogEvent', [eventName, json.encode(params), json.encode(properties)]); } } class FbGameAdUtils { static List checkSupportedAds() { final String listStr = js.context.callMethod("checkSupportedAds"); List list = json.decode(listStr); return list; } static Future showBanner(String id) { final completer = Completer(); js.context.callMethod('showBannerAds', [ id, () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future hideBanner(String id) { final completer = Completer(); js.context.callMethod('hideBannerAds', [ id, () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future loadInterstitial(String id) { final completer = Completer(); js.context.callMethod('loadInterstitial', [ id, () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future showInterstitial() { final completer = Completer(); js.context.callMethod('showInterstitial', [ () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future loadRewarded(String id) { final completer = Completer(); js.context.callMethod('loadRewarded', [ id, () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } static Future showRewarded() { final completer = Completer(); js.context.callMethod('showRewarded', [ () => completer.complete(), (error) => completer.completeError(error), ]); return completer.future; } }