instanceManagerApiTemplate function
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;
}
}
}''';
}