instanceManagerApiTemplate function

String instanceManagerApiTemplate({
  1. required String dartPackageName,
  2. required String pigeonChannelCodecVarName,
})

Creates the InstanceManagerApi with the passed string values.

Implementation

String instanceManagerApiTemplate({
  required String dartPackageName,
  required String pigeonChannelCodecVarName,
}) {
  const String apiName = '${instanceManagerClassName}Api';

  final String removeStrongReferenceName = makeChannelNameWithStrings(
    apiName: apiName,
    methodName: 'removeStrongReference',
    dartPackageName: dartPackageName,
  );

  final String clearName = makeChannelNameWithStrings(
    apiName: apiName,
    methodName: 'clear',
    dartPackageName: dartPackageName,
  );

  return '''
/// Generated API for managing the Dart and native `$instanceManagerClassName`s.
class _$apiName {
  /// Constructor for [_$apiName].
  _$apiName({BinaryMessenger? binaryMessenger})
      : _binaryMessenger = binaryMessenger;

  final BinaryMessenger? _binaryMessenger;

  static const MessageCodec<Object?> $pigeonChannelCodecVarName =
     StandardMessageCodec();

  static void setUpMessageHandlers({
    BinaryMessenger? binaryMessenger,
    $instanceManagerClassName? instanceManager,
  }) {
    const String channelName =
        r'$removeStrongReferenceName';
    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
      channelName,
      $pigeonChannelCodecVarName,
      binaryMessenger: binaryMessenger,
    );
    channel.setMessageHandler((Object? message) async {
      assert(
        message != null,
        'Argument for \$channelName was null.',
      );
      final int? identifier = message as int?;
      assert(
        identifier != null,
        r'Argument for \$channelName, expected non-null int.',
      );
      (instanceManager ?? $instanceManagerClassName.instance).remove(identifier!);
      return;
    });
  }

  Future<void> removeStrongReference(int identifier) async {
    const String channelName =
        r'$removeStrongReferenceName';
    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
      channelName,
      $pigeonChannelCodecVarName,
      binaryMessenger: _binaryMessenger,
    );
    final List<Object?>? replyList =
        await channel.send(identifier) as List<Object?>?;
    if (replyList == null) {
      throw _createConnectionError(channelName);
    } else if (replyList.length > 1) {
      throw PlatformException(
        code: replyList[0]! as String,
        message: replyList[1] as String?,
        details: replyList[2],
      );
    } else {
      return;
    }
  }

  /// Clear the native `$instanceManagerClassName`.
  ///
  /// This is typically called after a hot restart.
  Future<void> clear() async {
    const String channelName =
        r'$clearName';
    final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
      channelName,
      $pigeonChannelCodecVarName,
      binaryMessenger: _binaryMessenger,
    );
    final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
    if (replyList == null) {
      throw _createConnectionError(channelName);
    } else if (replyList.length > 1) {
      throw PlatformException(
        code: replyList[0]! as String,
        message: replyList[1] as String?,
        details: replyList[2],
      );
    } else {
      return;
    }
  }
}''';
}