Skip to content

Add Flutter SDK avatars and storage service methods to build URLs #495

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/SDK/Language/Dart.php
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ public function getFilters(): array
new TwigFilter('dartComment', function ($value) {
$value = explode("\n", $value);
foreach ($value as $key => $line) {
$value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// ");
$value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// ");
}
return implode("\n", $value);
}, ['is_safe' => ['html']]),
Expand Down
6 changes: 3 additions & 3 deletions templates/flutter/base/requests/api.twig
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{% import 'flutter/base/utils.twig' as utils %}
final Map<String, dynamic> params = {
{{ utils.map_parameter(method.parameters.query) }}
{{ utils.map_parameter(method.parameters.body) }}
{{- utils.map_parameter(method.parameters.query) -}}
{{~ utils.map_parameter(method.parameters.body) }}
};

final Map<String, String> headers = {
{{ utils.map_headers(method.headers) }}
{{~ utils.map_headers(method.headers) }}
};

final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers);
Expand Down
8 changes: 4 additions & 4 deletions templates/flutter/base/requests/file.twig
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{% import 'flutter/base/utils.twig' as utils %}
{% import 'flutter/base/utils.twig' as utils %}
final Map<String, dynamic> params = {
{{ utils.map_parameter(method.parameters.query) }}
{{ utils.map_parameter(method.parameters.body) }}
{{~ utils.map_parameter(method.parameters.query) }}
{{~ utils.map_parameter(method.parameters.body) }}
};

final Map<String, String> headers = {
{{ utils.map_headers(method.headers) }}
{{~ utils.map_headers(method.headers) }}
};

{% if 'multipart/form-data' in method.consumes %}
Expand Down
17 changes: 15 additions & 2 deletions templates/flutter/base/requests/location.twig
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{% import 'flutter/base/utils.twig' as utils %}
final Map<String, dynamic> params = {
{{ utils.map_parameter(method.parameters.query) }}
{{- utils.map_parameter(method.parameters.query) -}}
{{ utils.map_parameter(method.parameters.body) }}
{% if method.security|length > 0 %}{% for node in method.security %}
{% for key,header in node|keys %}
Expand All @@ -9,6 +9,19 @@
{% endfor %}
{% endif %}
};
final uri = Uri.parse(client.endpoint + path).replace(queryParameters: params);

final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, responseType: ResponseType.bytes);
return uri;
}

Future<Uint8List> {{ method.name | caseCamel }}Bytes({{ utils.method_parameters(method.parameters.all | filter((param) => not param.isGlobal), method.consumes) }}) async {
final uri = {{ method.name | caseCamel }}(
{%- for parameter in method.parameters.all | filter((param) => not param.isGlobal) ~%}
{{ parameter.name | caseCamel | overrideIdentifier }}: {{ parameter.name | caseCamel | overrideIdentifier }},
{%- endfor ~%}
);

final path = "/" + uri.pathSegments.sublist(1).join("/");

final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: uri.queryParameters, responseType: ResponseType.bytes);
return res.data;
22 changes: 14 additions & 8 deletions templates/flutter/base/utils.twig
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
{% macro map_parameter(parameters) %}
{% for parameter in parameters %}
'{{ parameter.name }}': {{ parameter.name | caseCamel | overrideIdentifier }},
{% endfor %}
{% endmacro %}
{%- macro map_parameter(parameters) -%}
{%- for parameter in parameters ~%}
'{{ parameter.name }}': {{ parameter.name | caseCamel | overrideIdentifier }},
{%- endfor ~%}
{%- endmacro ~%}

{% macro map_headers(headers) %}
{% for key, header in headers %}
{% macro map_headers(headers) -%}
{%- for key, header in headers %}
'{{ key }}': '{{ header }}',
{% endfor %}
{%- endfor -%}
{%- endmacro -%}

{% macro parameter(parameter) %}{% if parameter.required %}required {{ parameter.type | typeName }}{% else %}{{ parameter.type | typeName }}?{% endif %} {{ parameter.name | caseCamel | overrideIdentifier }}{% endmacro %}

{% macro method_parameters(parameters, consumes) %}
{% if parameters|length > 0 %}{{ '{' }}{% for parameter in parameters %}{{ _self.parameter(parameter) }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, Function(UploadProgress)? onProgress{% endif %}{{ '}' }}{% endif %}
{% endmacro %}
18 changes: 7 additions & 11 deletions templates/flutter/lib/services/service.dart.twig
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
part of {{ language.params.packageName }};
{% macro parameter(parameter) %}{% if parameter.required %}required {{ parameter.type | typeName }}{% else %}{{ parameter.type | typeName }}?{% endif %} {{ parameter.name | caseCamel | overrideIdentifier }}{% endmacro %}
{% macro method_parameters(parameters, consumes) %}
{% if parameters|length > 0 %}{{ '{' }}{% for parameter in parameters %}{{ _self.parameter(parameter) }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, Function(UploadProgress)? onProgress{% endif %}{{ '}' }}{% endif %}
{% endmacro %}
{% import 'flutter/base/utils.twig' as utils %}
Comment on lines -3 to +2
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we did not export this to utils, as this macro is used only in this file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, but since I needed this in templates/flutter/base/requests/location.twig, I thought it would be better to move it to utils.

{% macro service_params(parameters) %}
{% if parameters|length > 0 %}{{ ', {' }}{% for parameter in parameters %}{% if parameter.required %}required {% endif %}this.{{ parameter.name | caseCamel | overrideIdentifier }}{% if not loop.last %}, {% endif %}{% endfor %}{{ '}' }}{% endif %}
{% endmacro %}

{%if service.description %}
{{ service.description|dartComment}}
{{- service.description|dartComment}}
{% endif %}
class {{ service.name | caseUcfirst }} extends Service {
{{ service.name | caseUcfirst }}(Client client{{ _self.service_params(service.globalParams) }}): super(client);
Expand All @@ -19,13 +16,13 @@ class {{ service.name | caseUcfirst }} extends Service {
{% endif %}
{% for method in service.methods %}

/// {{ method.title }}
{% if method.description %}
///
/// {{ method.title }}
{%~ if method.description %}
///
{{ method.description|dartComment }}
///
///
{% endif %}
{% if method.type == 'webAuth' %}Future{% elseif method.type == 'location' %} Future<Uint8List> {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future<models.{{method.responseModel | caseUcfirst | overrideIdentifier}}>{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ _self.method_parameters(method.parameters.all | filter((param) => not param.isGlobal), method.consumes) }}) async {
{% if method.type == 'webAuth' %}Future{% elseif method.type == 'location' %}Uri{% else %}{% if method.responseModel and method.responseModel != 'any' %}Future<models.{{method.responseModel | caseUcfirst | overrideIdentifier}}>{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ utils.method_parameters(method.parameters.all | filter((param) => not param.isGlobal), method.consumes) }}){% if method.type != 'location' %} async{% endif %} {
{% if method.parameters.path | length > 0 %}final{% else %}const{% endif %} String path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replaceAll('{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}', {{ parameter.name | caseCamel | overrideIdentifier }}){% endfor %};

{% if 'multipart/form-data' in method.consumes %}
Expand All @@ -37,7 +34,6 @@ class {{ service.name | caseUcfirst }} extends Service {
{% else %}
{{ include('flutter/base/requests/api.twig') }}
{% endif %}

}
{% endfor %}
}