init method

  1. @override
Future<IPlatformEntrypoint> init({
  1. required InitRequest request,
  2. required CallBacksController controller,
  3. required IPlatformEntrypoint instanceFactory({
    1. required CallBacksController callBacksController,
    2. required EventChannel eventChannel,
    3. required String id,
    4. required String mainChannelId,
    5. required MethodChannel methodChannel,
    }),
})
override

Instantiates a new channel on host. Parameters: instanceFactory - Gives us the opportunitty to intercept and overrides some properties. Throws: ChannelInvokeException - When there's some problem with native communication.

Implementation

@override
Future<IPlatformEntrypoint> init({
  required InitRequest request,
  required CallBacksController controller,
  required IPlatformEntrypoint Function({
    required String id,
    required String mainChannelId,
    required MethodChannel methodChannel,
    required EventChannel eventChannel,
    required CallBacksController callBacksController,
  })
      instanceFactory,
}) async {
  log('DevicePlatform -> init: ${request.id}');

  final initChannel = await _mainChannel.invokeMethod<dynamic>(
    'init',
    request.toMap(),
  );

  if (initChannel == null) {
    throw ChannelInvokeException();
  }

  final response = InitResponse.fromMap(initChannel);

  final id = response.id;

  _actualEntrypoint = instanceFactory(
    id: id,
    mainChannelId: _mainChannel.name,
    methodChannel: MethodChannel(
        '${NativeCommunicationMetadata.platformMethodChannel}.$id'),
    eventChannel:
        EventChannel('${NativeCommunicationMetadata.hostEventChannel}.$id'),
    callBacksController: controller,
  );

  _entrypointsHistory.putIfAbsent(response.id, () => true);

  _entrypointsHistory.update(response.id, (_) => true);

  return _actualEntrypoint!;
}