publish method

  1. @override
Future<PublishResult> publish(
  1. File file, {
  2. Map<String, String>? environment,
  3. Map<String, dynamic>? publishArguments,
  4. PublishProgressCallback? onPublishProgress,
})

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;
  }
}