Skip to content

Commit ec4e441

Browse files
committed
Flutter template refactoring
1 parent 093486f commit ec4e441

File tree

5 files changed

+139
-89
lines changed

5 files changed

+139
-89
lines changed

templates/flutter/base/api.twig

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{% import "flutter/base/macros.twig" as macros %}
2+
3+
final Map<String, dynamic> params = {
4+
{% for parameter in method.parameters.query %}
5+
{{ macros.map_parameter(parameter) }}
6+
{% endfor %}
7+
{% for parameter in method.parameters.body %}
8+
{{ macros.map_parameter(parameter) }}
9+
{% endfor %}
10+
{% if method.type == 'location' %}
11+
{% if method.security|length > 0 %}
12+
{% for node in method.security %}
13+
{% for key,header in node|keys %}
14+
'{{header|caseLower}}': client.config['{{header|caseLower}}'],
15+
{% endfor %}
16+
{% endfor %}
17+
{% endif %}
18+
{% endif %}
19+
};
20+
21+
{% if method.type == 'location' %}
22+
final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, responseType: ResponseType.bytes);
23+
return res.data;
24+
{% else %}
25+
final Map<String, String> headers = {
26+
{% for key, header in method.headers %}
27+
'{{ key }}': '{{ header }}',
28+
{% endfor %}
29+
};
30+
31+
final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers);
32+
33+
return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst}}.fromMap(res.data){% else %} res.data{% endif %};
34+
{% endif %}

templates/flutter/base/file.twig

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{% import "flutter/base/macros.twig" as macros %}
2+
3+
final Map<String, dynamic> params = {
4+
{% for parameter in method.parameters.query %}
5+
{{ macros.map_parameter(parameter) }}
6+
{% endfor %}
7+
{% for parameter in method.parameters.body %}
8+
{{ macros.map_parameter(parameter) }}
9+
{% endfor %}
10+
};
11+
12+
final Map<String, String> headers = {
13+
{% for key, header in method.headers %}
14+
'{{ key }}': '{{ header }}',
15+
{% endfor %}
16+
};
17+
18+
{% if 'multipart/form-data' in method.consumes %}
19+
dynamic res;
20+
if(kIsWeb) {
21+
{% for parameter in method.parameters.all %}
22+
{% if parameter.type == 'file' %}
23+
params['{{ parameter.name }}'] = {{ parameter.name }}.file;
24+
{% endif %}
25+
{% endfor %}
26+
res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers);
27+
} else {
28+
String idParamName = '';
29+
{% for parameter in method.parameters.all %}
30+
{% if parameter.type == 'file' %}
31+
final paramName = '{{ parameter.name }}';
32+
{% endif %}
33+
{% if parameter.isUploadID %}
34+
idParamName = '{{ parameter.name }}';
35+
{% endif %}
36+
{% endfor %}
37+
res = await chunkedUpload(
38+
client: client,
39+
path: path,
40+
params: params,
41+
paramName: paramName,
42+
idParamName: idParamName,
43+
headers: headers,
44+
onProgress: onProgress,
45+
);
46+
}
47+
48+
return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst}}.fromMap(res.data){% else %} res.data{% endif %};
49+
{% endif %}

templates/flutter/base/macros.twig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{% macro parameter(parameter) %}{% if parameter.required %}required {{ parameter.type | typeName }}{% else %}{{ parameter.type | typeName }}?{% endif %} {{ parameter.name | caseCamel | escapeKeyword }}{% endmacro %}
2+
{% macro method_parameters(parameters, consumes) %}
3+
{% if parameters.all|length > 0 %}{{ '{' }}{% for parameter in parameters.all %}{{ _self.parameter(parameter) }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, Function(UploadProgress)? onProgress{% endif %}{{ '}' }}{% endif %}
4+
{% endmacro %}
5+
{% macro map_parameter(parameter) %}'{{ parameter.name }}': {{ parameter.name | caseCamel | escapeKeyword }},{% endmacro %}

templates/flutter/base/oauth.twig

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{% import "flutter/base/macros.twig" as macros %}
2+
3+
final Map<String, dynamic> params = {
4+
{% for parameter in method.parameters.query %}
5+
{{ macros.map_parameter(parameter) }}
6+
{% endfor %}
7+
{% for parameter in method.parameters.body %}
8+
{{ macros.map_parameter(parameter) }}
9+
{% endfor %}
10+
{% if method.type == 'webAuth' %}
11+
{% if method.security|length > 0 %}
12+
{% for node in method.security %}
13+
{% for key,header in node|keys %}
14+
'{{header|caseLower}}': client.config['{{header|caseLower}}'],
15+
{% endfor %}
16+
{% endfor %}
17+
{% endif %}
18+
{% endif %}
19+
};
20+
21+
{% if method.type == 'webAuth' %}
22+
23+
final List query = [];
24+
25+
params.forEach((key, value) {
26+
if (value is List) {
27+
for (var item in value) {
28+
query.add(Uri.encodeComponent(key + '[]') + '=' + Uri.encodeComponent(item));
29+
}
30+
} else if(value != null) {
31+
query.add(Uri.encodeComponent(key) + '=' + Uri.encodeComponent(value));
32+
}
33+
});
34+
35+
Uri endpoint = Uri.parse(client.endPoint);
36+
Uri url = Uri(scheme: endpoint.scheme,
37+
host: endpoint.host,
38+
port: endpoint.port,
39+
path: endpoint.path + path,
40+
query: query.join('&')
41+
);
42+
43+
return client.webAuth(url);
44+
{% endif %}
Lines changed: 7 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
part of {{ language.params.packageName }};
22

3-
{% macro parameter(parameter) %}{% if parameter.required %}required {{ parameter.type | typeName }}{% else %}{{ parameter.type | typeName }}?{% endif %} {{ parameter.name | caseCamel | escapeKeyword }}{% endmacro %}
4-
{% macro method_parameters(parameters, consumes) %}
5-
{% if parameters.all|length > 0 %}{{ '{' }}{% for parameter in parameters.all %}{{ _self.parameter(parameter) }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, Function(UploadProgress)? onProgress{% endif %}{{ '}' }}{% endif %}
6-
{% endmacro %}
7-
{% macro map_parameter(parameter) %}'{{ parameter.name }}': {{ parameter.name | caseCamel | escapeKeyword }},{% endmacro %}
3+
{% import "flutter/base/macros.twig" as macros %}
84

95
{%if service.description %}
106
{{ service.description|dartComment}}
@@ -19,95 +15,17 @@ class {{ service.name | caseUcfirst }} extends Service {
1915
{{ method.description|dartComment }}
2016
///
2117
{% endif %}
22-
{% if method.type == 'webAuth' %}Future{% elseif method.type == 'location' %} Future<Uint8List> {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future<models.{{method.responseModel | caseUcfirst}}>{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ _self.method_parameters(method.parameters, method.consumes) }}) async {
18+
{% if method.type == 'webAuth' %}Future{% elseif method.type == 'location' %} Future<Uint8List> {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future<models.{{method.responseModel | caseUcfirst}}>{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ macros.method_parameters(method.parameters, method.consumes) }}) async {
2319
{% 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 | escapeKeyword }}){% endfor %};
2420

25-
final Map<String, dynamic> params = {
26-
{% for parameter in method.parameters.query %}
27-
{{ _self.map_parameter(parameter) }}
28-
{% endfor %}
29-
{% for parameter in method.parameters.body %}
30-
{{ _self.map_parameter(parameter) }}
31-
{% endfor %}
32-
{% if method.type == 'webAuth' or method.type == 'location' %}
33-
{% if method.security|length > 0 %}
34-
{% for node in method.security %}
35-
{% for key,header in node|keys %}
36-
'{{header|caseLower}}': client.config['{{header|caseLower}}'],
37-
{% endfor %}
38-
{% endfor %}
39-
{% endif %}
40-
{% endif %}
41-
};
42-
43-
{% if method.type == 'webAuth' %}
44-
45-
final List query = [];
46-
47-
params.forEach((key, value) {
48-
if (value is List) {
49-
for (var item in value) {
50-
query.add(Uri.encodeComponent(key + '[]') + '=' + Uri.encodeComponent(item));
51-
}
52-
} else if(value != null) {
53-
query.add(Uri.encodeComponent(key) + '=' + Uri.encodeComponent(value));
54-
}
55-
});
56-
57-
Uri endpoint = Uri.parse(client.endPoint);
58-
Uri url = Uri(scheme: endpoint.scheme,
59-
host: endpoint.host,
60-
port: endpoint.port,
61-
path: endpoint.path + path,
62-
query: query.join('&')
63-
);
64-
65-
return client.webAuth(url);
66-
67-
{% elseif method.type == 'location' %}
68-
final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, responseType: ResponseType.bytes);
69-
return res.data;
70-
{% else %}
71-
final Map<String, String> headers = {
72-
{% for key, header in method.headers %}
73-
'{{ key }}': '{{ header }}',
74-
{% endfor %}
75-
};
76-
7721
{% if 'multipart/form-data' in method.consumes %}
78-
dynamic res;
79-
if(kIsWeb) {
80-
{% for parameter in method.parameters.all %}
81-
{% if parameter.type == 'file' %}
82-
params['{{ parameter.name }}'] = {{ parameter.name }}.file;
83-
{% endif %}
84-
{% endfor %}
85-
res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers);
86-
} else {
87-
String idParamName = '';
88-
{% for parameter in method.parameters.all %}
89-
{% if parameter.type == 'file' %}
90-
final paramName = '{{ parameter.name }}';
91-
{% endif %}
92-
{% if parameter.isUploadID %}
93-
idParamName = '{{ parameter.name }}';
94-
{% endif %}
95-
{% endfor %}
96-
res = await chunkedUpload(
97-
client: client,
98-
path: path,
99-
params: params,
100-
paramName: paramName,
101-
idParamName: idParamName,
102-
headers: headers,
103-
onProgress: onProgress,
104-
);
105-
}
22+
{{ include('flutter/base/file.twig') }}
23+
{% elseif method.type == 'webAuth' %}
24+
{{ include('flutter/base/oauth.twig') }}
10625
{% else %}
107-
final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers);
108-
{% endif %}
109-
return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst}}.fromMap(res.data){% else %} res.data{% endif %};
26+
{{ include('flutter/base/api.twig') }}
11027
{% endif %}
28+
11129
}
11230
{% endfor %}
11331
}

0 commit comments

Comments
 (0)