onMethodCall method
Handles method calls from the native platform.
Implementation
Future<dynamic> onMethodCall(final MethodCall call) async {
try {
switch (call.method) {
case 'onPageChanged':
final args = call.arguments as String;
final locatorJson = json.decode(args) as Map<String, dynamic>;
final locator = Locator.fromJson(locatorJson);
_log.d('onPageChanged $locator');
if (locator == null) {
_log.w('onPageChanged received empty locator');
return null;
}
onPageChanged(locator);
return null;
case 'onExternalLinkActivated':
final link = call.arguments as String;
_log.d('onExternalLinkActivated $link');
onExternalLinkActivated?.call(link);
return null;
case 'onTextSelected':
final args = call.arguments as String;
final eventJson = json.decode(args) as Map<String, dynamic>;
final event = TextSelectionEvent.fromJson(eventJson);
_log.d('onTextSelected ${event.selectedText}');
onTextSelected?.call(event);
return null;
case 'onSelectionAction':
final args = call.arguments as String;
final eventJson = json.decode(args) as Map<String, dynamic>;
final event = SelectionActionEvent.fromJson(eventJson);
_log.d('onSelectionAction ${event.actionId}');
onSelectionAction?.call(event);
return null;
case 'onDecorationInteraction':
final args = call.arguments as String;
final eventJson = json.decode(args) as Map<String, dynamic>;
final event = DecorationInteractionEvent.fromJson(eventJson);
_log.d('onDecorationInteraction ${event.decorationId}');
onDecorationInteraction?.call(event);
return null;
case 'onImageTapped':
final args = call.arguments as String;
final eventJson = json.decode(args) as Map<String, dynamic>;
final event = ImageTapEvent.fromJson(eventJson);
_log.d('onImageTapped ${event.href}');
onImageTapped?.call(event);
return null;
default:
throw UnimplementedError('Unhandled call ${call.method}');
}
} on Object catch (e, st) {
_log.e(e, data: call.method, stackTrace: st);
}
}