Describe the bug
When I used the Retrofit and Dio upload a file, I got a fatal exception.
If I hidden the logger, the upload will succeed.
To Reproduce
@MultiPart()
@POST(Api.uploadFile)
Future<Result<ImageFile>> uploadFile(
@Part(name: "file") File file,
@Part(name: "type") String type,
);
@override
Future<Result<ImageFile>> uploadFile(
file,
type,
) async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{};
final _data = FormData();
_data.files.add(MapEntry(
'file',
MultipartFile.fromFileSync(
file.path,
filename: file.path.split(Platform.pathSeparator).last,
),
));
_data.fields.add(MapEntry(
'type',
type,
));
final _result = await _dio
.fetch<Map<String, dynamic>>(_setStreamType<Result<ImageFile>>(Options(
method: 'POST',
headers: _headers,
extra: _extra,
contentType: 'multipart/form-data',
)
.compose(
_dio.options,
'common/upload',
queryParameters: queryParameters,
data: _data,
)
.copyWith(baseUrl: baseUrl ?? _dio.options.baseUrl)));
final value = Result<ImageFile>.fromJson(
_result.data!,
(json) => ImageFile.fromJson(json as Map<String, dynamic>),
);
return value;
}
dio.interceptors.add(TalkerDioLogger(
settings: const TalkerDioLoggerSettings(
printRequestHeaders: true,
),
));
Expected behavior
I/flutter (21545): βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
I/flutter (21545): β [EXCEPTION] | 8:50:26 288ms | URL: http://192.168.1.61:8094/task-app/common/upload
I/flutter (21545): β METHOD: POST
I/flutter (21545): β
I/flutter (21545): β DioError [DioErrorType.other]: Converting object to an encodable object failed: Instance of 'FormData'
I/flutter (21545): β #0 _JsonStringifier.writeObject (dart:convert/json.dart:794:7)
I/flutter (21545): β #1 _JsonStringStringifier.printOn (dart:convert/json.dart:983:17)
I/flutter (21545): β #2 _JsonStringStringifier.stringify (dart:convert/json.dart:968:5)
I/flutter (21545): β #3 JsonEncoder.convert (dart:convert/json.dart:345:30)
I/flutter (21545): β #4 HttpRequestLog.generateTextMessage (package:talker_dio_logger/http_logs.dart:40:34)
I/flutter (21545): β #5 Talker._handleLogData (package:talker/src/talker.dart:325:16)
I/flutter (21545): β #6 Talker.logTyped (package:talker/src/talker.dart:180:5)
I/flutter (21545): β #7 TalkerDioLogger.onRequest (package:talker_dio_logger/talker_dio_logger_interceptor.dart:53:13)
I/flutter (21545): β #8 DioMixin.fetch._requestInterceptorWrapper.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:dio/src/dio_mixin.dart:517:28)
I/flutter (21545): β #9 DioMixin.checkIfNeedEnqueue (package:dio/src/dio_mixin.dart:789:22)
I/flutter (21545): β #10 DioMixin.fetch._requestInterceptorWrapper.<anonymous closure>.<anonymous closure> (package:dio/src/dio_mixin.dart:515:22)
I/flutter (21545): β #11 new Future.<anonymous closure> (dart:async/future.dart:252:37)
I/flutter (21545): β #12 _rootRun (dart:async/zone.dart:1418:47)
I/flutter (21545): β #13 _CustomZone.run (dart:async/zone.dart:1328:19)
I/flutter (21545): β #14 _CustomZone.runGuarded (dart:async/zone.dart:1236:7)
I/flutter (21545): β #15 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1276:23)
I/flutter (21545): β #16 _rootRun (dart:async/zone.dart:1426:13)
I/flutter (21545): β #17 _CustomZone.run (dart:async/zone.dart:1328:19)
I/flutter (21545): β #18 _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:1260:23)
I/flutter (21545): β #19 Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
I/flutter (21545): β #20 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
I/flutter (21545): β #21 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
I/flutter (21545): β #22 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
I/flutter (21545): β
I/flutter (21545): β #0 TalkerDioLogger.onError (package:talker_dio_logger/talker_dio_logger_interceptor.dart:76:18)
I/flutter (21545): β #1 DioMixin.fetch._errorInterceptorWrapper.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:dio/src/dio_mixin.dart:574:28)
I/flutter (21545): β #2 DioMixin.checkIfNeedEnqueue (package:dio/src/dio_mixin.dart:789:22)
I/flutter (21545): β #3 DioMixin.fetch._errorInterceptorWrapper.<anonymous closure>.<anonymous closure> (package:dio/src/dio_mixin.dart:572:22)
I/flutter (21545): β #4 new Future.<anonymous closure> (dart:async/future.dart:252:37)
I/flutter (21545): β #5 _rootRun (dart:async/zone.dart:1418:47)
I/flutter (21545): β #6 _CustomZone.run (dart:async/zone.dart:1328:19)
I/flutter (21545): β #7 _CustomZone.runGuarded (dart:async/zone.dart:1236:7)
I/flutter (21545): β #8 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1276:23)
I/flutter (21545): β #9 _rootRun (dart:async/zone.dart:1426:13)
I/flutter (21545): β #10 _CustomZone.run (dart:async/zone.dart:1328:19)
I/flutter (21545): β #11 _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:1260:23)
I/flutter (21545): β #12 Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)
I/flutter (21545): β #13 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
I/flutter (21545): β #14 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
I/flutter (21545): β #15 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
I/flutter (21545): β
I/flutter (21545): βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ