UNPKG

@nativescript/flutter

Version:
130 lines 5.59 kB
import { Utils } from '@nativescript/core'; import { FlutterCommon } from './common'; function makeFragmentName(viewId) { return 'android:flutter:' + viewId; } let initialized = false; let flutterEngineGroup; const ReplyMethod = (io.flutter.plugin.common.BasicMessageChannel.Reply); export function init() { if (!initialized) { initialized = true; flutterEngineGroup = new io.flutter.embedding.engine.FlutterEngineGroup(Utils.android.getApplicationContext()); } } var BasicMessageChannelHandler = /** @class */ (function (_super) { __extends(BasicMessageChannelHandler, _super); function BasicMessageChannelHandler() { var _this = _super.call(this) || this; return global.__native(_this); } BasicMessageChannelHandler_1 = BasicMessageChannelHandler; BasicMessageChannelHandler.initWithOwner = function (owner) { var instance = new BasicMessageChannelHandler_1(); instance.owner = owner; return instance; }; BasicMessageChannelHandler.prototype.onMessage = function (message, reply) { var _a, _b; try { var flutterMessage = JSON.parse(message); if (flutterMessage) { if (Flutter.DEBUG) { console.log('Flutter called NativeScript with type:', flutterMessage.type); console.log('data:', flutterMessage.data); } var owner = (_a = this.owner) === null || _a === void 0 ? void 0 : _a.deref(); if (owner) { if ((_b = owner.channel) === null || _b === void 0 ? void 0 : _b[flutterMessage.type]) { owner.channel[flutterMessage.type](flutterMessage.data); } } } } catch (err) { console.log('Flutter message error:', err); } }; var BasicMessageChannelHandler_1; BasicMessageChannelHandler = BasicMessageChannelHandler_1 = __decorate([ Interfaces([(io.flutter.plugin.common.BasicMessageChannel.MessageHandler)]), __metadata("design:paramtypes", []) ], BasicMessageChannelHandler); return BasicMessageChannelHandler; }(java.lang.Object)); export class Flutter extends FlutterCommon { constructor() { super(...arguments); this._androidViewId = -1; } createNativeView() { if (!this.id) { throw new Error(`Flutter requires an 'id' property set to match your Dart entry point name.`); } if (!flutterEngineGroup) { throw new Error(`Ensure you have called @nativescript/flutter 'init' from you main bootstrap file.`); } this._flutterEngine = flutterEngineGroup.createAndRunEngine(Utils.android.getApplicationContext(), new io.flutter.embedding.engine.dart.DartExecutor.DartEntrypoint(null, this.id), null); // cache the engine io.flutter.embedding.engine.FlutterEngineCache.getInstance().put(this.id, this._flutterEngine); // register for plugins io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(this._flutterEngine); this._platformChannel = new io.flutter.plugin.common.BasicMessageChannel(this._flutterEngine.getDartExecutor().getBinaryMessenger(), 'nativescript', io.flutter.plugin.common.StringCodec.INSTANCE); this._listener = BasicMessageChannelHandler.initWithOwner(new WeakRef(this)); this._platformChannel.setMessageHandler(this._listener); return new android.widget.FrameLayout(this._context); } initNativeView() { super.initNativeView(); if (this._androidViewId < 0) { this._androidViewId = android.view.View.generateViewId(); } this.nativeViewProtected.setId(this._androidViewId); const fm = this._getFragmentManager(); const engineFragmentBuilder = io.flutter.embedding.android.FlutterFragment.withCachedEngine(this.id).renderMode(io.flutter.embedding.android.RenderMode.texture); this._fragment = engineFragmentBuilder.build(); const name = makeFragmentName(this._androidViewId); const tr = fm.beginTransaction(); tr.replace(this._androidViewId, this._fragment, name); tr.commit(); } disposeNativeView() { if (this._platformChannel) { this._platformChannel.setMessageHandler(null); } this._platformChannel = null; this._listener = null; } sendMessage(type, data, callback) { if (this._platformChannel) { const message = { type, }; if (data) { message.data = data; } try { const json = JSON.stringify(message, null, 0); this._platformChannel.send(json, new ReplyMethod({ reply: (result) => { this.notify({ eventName: Flutter.sendMessageReplyEvent, object: this, data: result, }); if (callback) { callback(result); } }, })); if (Flutter.DEBUG) { console.log('NativeScript sent message to Flutter:', json); } } catch (err) { console.log('Flutter message error:', err); } } } } //# sourceMappingURL=index.android.js.map