Skip to content

Commit a8877d1

Browse files
committed
fix cfug#316
1 parent b6bdf11 commit a8877d1

File tree

3 files changed

+49
-40
lines changed

3 files changed

+49
-40
lines changed

example/test.dart

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,15 @@ main() async {
77
"param2": "-1",
88
"param3": "-1",
99
"param4": "-1",
10-
"param5": "-1",
11-
"param8":{
12-
"a":"b",
13-
"b":"c"
14-
},
10+
"param5": null,
11+
"param8": {"a": "b", "b": "c"},
1512
"music": new UploadFileInfo(new File("./example/bee.mp4"), "be.mp4"),
1613
});
17-
var v=File("./example/audio.m4a");
18-
print(v.lengthSync());
19-
var t= await formData.asBytesAsync();
14+
15+
var t = await formData.asBytesAsync();
2016
print("formStreamSize = ${t.length}");
2117
print("formData.length = ${formData.length}");
22-
print(formData.length==t.length);
23-
print(formData);
18+
print(formData.length == t.length);
19+
//print(formData);
20+
2421
}

package_src/lib/src/form_data.dart

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ class FormData extends MapMixin<String, dynamic> {
7777
int get _fileFieldLength {
7878
if (_fileFieldLen == null) {
7979
_fileFieldLen = _chunkHeader(
80-
StringBuffer(),
81-
"",
82-
UploadFileInfo(null, "", contentType: ContentType.text),
83-
).length -
80+
StringBuffer(),
81+
"",
82+
UploadFileInfo(null, "", contentType: ContentType.text),
83+
).length -
8484
utf8.encode(ContentType.text.mimeType).length;
8585
}
8686
return _fileFieldLen;
@@ -120,6 +120,7 @@ class FormData extends MapMixin<String, dynamic> {
120120
writeMapLength(buf, key, value) {
121121
value.keys.toList().forEach((mapKey) {
122122
var nestedKey = '${key}[${mapKey}]';
123+
if (value[mapKey]) return;
123124
if (value[mapKey] is Map) {
124125
writeMapLength(buf, nestedKey, value[mapKey]);
125126
} else if (value[mapKey] is UploadFileInfo) {
@@ -136,18 +137,21 @@ class FormData extends MapMixin<String, dynamic> {
136137
}
137138

138139
_map.forEach((key, value) {
140+
if (value == null) return;
139141
if (value is UploadFileInfo || value is List) {
140142
fileMap[key] = value;
141143
return;
142144
} else if (value is Map) {
143145
value.keys.toList().forEach((mapKey) {
144146
var nestedKey = '${key}[${mapKey}]';
147+
if (value[mapKey] == null) return;
145148
if (value[mapKey] is Map) {
146149
writeMapLength(buf, nestedKey, value[mapKey]);
147150
} else if (value[mapKey] is UploadFileInfo) {
148151
len += _fileFieldLength;
149152
_fileInfo(nestedKey, value[mapKey]);
150-
len += value[mapKey].bytes?.length ?? value[mapKey].file.lengthSync();
153+
len +=
154+
value[mapKey].bytes?.length ?? value[mapKey].file.lengthSync();
151155
len += lineSplitLen;
152156
} else {
153157
len += _textFieldLength;
@@ -162,6 +166,7 @@ class FormData extends MapMixin<String, dynamic> {
162166
});
163167

164168
fileMap.forEach((key, fileInfo) {
169+
if (fileInfo == null) return;
165170
if (fileInfo is UploadFileInfo) {
166171
len += _fileFieldLength;
167172
_fileInfo(key, fileInfo);
@@ -177,6 +182,7 @@ class FormData extends MapMixin<String, dynamic> {
177182
} else if (e is Map) {
178183
e.keys.toList().forEach((mapKey) {
179184
var nestedKey = '${key}[][${mapKey}]';
185+
if (e[mapKey] == null) return;
180186
if (e[mapKey] is Map) {
181187
writeMapLength(buf, nestedKey, e[mapKey]);
182188
} else if (e[mapKey] is UploadFileInfo) {
@@ -215,6 +221,7 @@ class FormData extends MapMixin<String, dynamic> {
215221
var fileMap = new Map<String, dynamic>();
216222
StringBuffer data = new StringBuffer();
217223
_map.forEach((key, value) {
224+
if (value == null) return;
218225
if (value is UploadFileInfo || value is List) {
219226
// If file, add it to `fileMap`, we handle it later.
220227
fileMap[key] = value;
@@ -251,12 +258,14 @@ class FormData extends MapMixin<String, dynamic> {
251258
}
252259
return bytes;
253260
}
254-
261+
255262
handleMapField(List<int> bytes, String key, dynamic value) {
263+
if (value == null) return;
256264
StringBuffer buffer = new StringBuffer();
257265
if (value is Map) {
258266
value.keys.toList().forEach((mapKey) {
259267
var nestedKey = '${key}[${mapKey}]';
268+
if (value[mapKey] == null) return;
260269
if (value[mapKey] is Map) {
261270
handleMapField(bytes, nestedKey, value[mapKey]);
262271
} else if (value[mapKey] is UploadFileInfo) {
@@ -293,10 +302,10 @@ class FormData extends MapMixin<String, dynamic> {
293302
}
294303

295304
List<int> _chunkHeader(
296-
StringBuffer buffer,
297-
String key,
298-
UploadFileInfo fileInfo,
299-
) {
305+
StringBuffer buffer,
306+
String key,
307+
UploadFileInfo fileInfo,
308+
) {
300309
buffer.clear();
301310
buffer.write(boundary);
302311
_writeln(buffer);
@@ -333,6 +342,7 @@ class FormData extends MapMixin<String, dynamic> {
333342
}
334343

335344
for (var entry in _map.entries) {
345+
if(entry.value==null) continue;
336346
if (entry.value is UploadFileInfo || entry.value is List) {
337347
// If file, add it to `fileMap`, we handle it later.
338348
fileMap[entry.key] = entry.value;
@@ -347,12 +357,14 @@ class FormData extends MapMixin<String, dynamic> {
347357
}
348358

349359
for (var entry in fileMap.entries) {
360+
if(entry.value==null) continue;
350361
if (entry.value is UploadFileInfo) {
351362
await for (var chunk in addFile(entry.key, entry.value)) {
352363
yield chunk;
353364
}
354365
} else {
355366
for (var info in entry.value) {
367+
if(info==null) continue;
356368
if (info is UploadFileInfo) {
357369
await for (var chunk in addFile(entry.key, info)) {
358370
yield chunk;

package_src/test/dio_test.dart

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -67,28 +67,26 @@ void main() {
6767
dio.options.baseUrl = MockAdapter.mockBase;
6868
dio.options.headers = {'User-Agent': 'dartisan', 'XX': '8'};
6969
dio.httpClientAdapter = MockAdapter();
70-
7170
});
7271
test('test', () async {
7372
// dio.options.responseType=ResponseType.json // Default
74-
Response<Map>r0 =await dio.get("/test");
75-
expect(r0.data is Map,true);
76-
Response<String>r =await dio.get<String>("/test");
77-
expect(r.data is String,true);
78-
dio.options.responseType=ResponseType.plain;
79-
r =await dio.get("/test");
80-
expect(r.data is String,true);
81-
Response<Map>r2 =await dio.get<Map>("/test");
82-
expect(r2.data is Map,true);
83-
73+
Response<Map> r0 = await dio.get("/test");
74+
expect(r0.data is Map, true);
75+
Response<String> r = await dio.get<String>("/test");
76+
expect(r.data is String, true);
77+
dio.options.responseType = ResponseType.plain;
78+
r = await dio.get("/test");
79+
expect(r.data is String, true);
80+
Response<Map> r2 = await dio.get<Map>("/test");
81+
expect(r2.data is Map, true);
8482
});
8583
});
8684

8785
group('download', () {
8886
test("test", () async {
8987
var dio = new Dio();
9088
dio.options.baseUrl = MockAdapter.mockBase;
91-
dio.httpClientAdapter=MockAdapter();
89+
dio.httpClientAdapter = MockAdapter();
9290
await dio.download("/download", "../download.md",
9391
options: Options(
9492
headers: {HttpHeaders.acceptEncodingHeader: "*"}), // disable gzip
@@ -108,17 +106,20 @@ void main() {
108106
var dio = new Dio();
109107
dio.interceptors.add(LogInterceptor(requestBody: true));
110108
dio.options.baseUrl = MockAdapter.mockBase;
111-
dio.httpClientAdapter=MockAdapter();
109+
dio.httpClientAdapter = MockAdapter();
112110
FormData formData = FormData.from({
113111
"name": "wendux",
114112
"age": 25,
113+
"other": {"a": 1, "b": 2}
115114
});
116115
formData.remove("name");
117116
formData["xx"] = 9;
118117
formData.add(
119118
"file",
120119
UploadFileInfo(File("./pubspec.yaml"), "pubspec.yaml"),
121120
);
121+
var t = await formData.asBytesAsync();
122+
expect(formData.length, t.length);
122123
await dio.post("/test", data: formData);
123124
formData.clear();
124125
expect(formData.length, 0);
@@ -127,11 +128,11 @@ void main() {
127128
var dio = new Dio();
128129
dio.interceptors.add(LogInterceptor(requestBody: true));
129130
dio.options.baseUrl = MockAdapter.mockBase;
130-
dio.httpClientAdapter=MockAdapter();
131+
dio.httpClientAdapter = MockAdapter();
131132
FormData formData = FormData.from({
132133
"name": "wendux",
133-
"tag":["a","b","c"],
134-
"student":{"a":"b","c": "d"},
134+
"tag": ["a", "b", "c"],
135+
"student": {"a": "b", "c": "d"},
135136
"age": 25,
136137
});
137138
formData.remove("name");
@@ -186,7 +187,7 @@ void main() {
186187
group('transfomer', () {
187188
test("test", () async {
188189
var dio = new Dio();
189-
dio.httpClientAdapter=MockAdapter();
190+
dio.httpClientAdapter = MockAdapter();
190191
dio.options.baseUrl = MockAdapter.mockBase;
191192
dio.transformer = new MyTransformer();
192193
// Response response = await dio.get("https://www.baidu.com");
@@ -221,7 +222,7 @@ void main() {
221222
setUp(() {
222223
dio = new Dio();
223224
dio.options.baseUrl = MockAdapter.mockBase;
224-
dio.httpClientAdapter=MockAdapter();
225+
dio.httpClientAdapter = MockAdapter();
225226
dio.interceptors
226227
.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
227228
switch (options.path) {
@@ -250,8 +251,7 @@ void main() {
250251
});
251252

252253
test('TestRI', () async {
253-
Response
254-
response = await dio.get("/fakepath1");
254+
Response response = await dio.get("/fakepath1");
255255
expect(response.data, "fake data");
256256
response = await dio.get("/fakepath2");
257257
expect(response.data["errCode"], 0);

0 commit comments

Comments
 (0)