publish method
Implementation
@override
Future<PublishResult> publish(
File file, {
Map<String, String>? environment,
Map<String, dynamic>? publishArguments,
PublishProgressCallback? onPublishProgress,
}) async {
String? apiToken = (environment ?? Platform.environment)[kEnvFirApiToken];
if ((apiToken ?? '').isEmpty) {
throw PublishError('Missing `$kEnvFirApiToken` environment variable.');
}
PublishFirConfig publishConfig = PublishFirConfig(
apiToken: apiToken!,
);
try {
AppPackage appPackage = await parseAppPackage(file);
final response = await _dio.post(
'/apps',
data: {
'type': appPackage.platform,
'bundle_id': appPackage.identifier,
'api_token': publishConfig.apiToken,
},
);
Map<String, dynamic> data = response.data;
Map<String, dynamic> cert = data['cert'];
String releaseId = await _uploadAppBinary(
file,
appPackage,
key: cert['binary']['key'],
token: cert['binary']['token'],
uploadUrl: cert['binary']['upload_url'],
onPublishProgress: onPublishProgress,
);
Uri downloadUri = Uri(
scheme: data['download_domain_https_ready'] ? 'https' : 'http',
host: data['download_domain'],
path: '/${data['short']}',
queryParameters: {'release_id': releaseId},
);
return PublishResult(
url: downloadUri.toString(),
);
} on DioError catch (error) {
String? message;
if (error.response?.data != null) {
int code = error.response?.data['code'];
message = error.response?.data['errors']['exception'][0];
message = '$code - $message';
}
throw PublishError(message);
} catch (error) {
throw error;
}
}