API загрузки файла прерывателя флаттера бросает NoSuchMethodError - PullRequest
0 голосов
/ 19 марта 2020

У меня есть настройка BLoC + Chopper для моего проекта Fluter и все API работают до даты. В настоящее время происходит интеграция File Upload API, и я сталкиваюсь с некоторой проблемой со стороны Chopper, и я не знаю, что это такое и как я могу ее решить.

@Post(path: "FILE_UPLOAD_URL")
@multipart
Future<Response<ProfileResponse>> uploadUserProfilePic(
  @Header("Authorization") String token,
  @PartFile('file') List<int> file,
);

Вызов API:

await SharedPreferenceHelper.getToken().then(
  (token) async {
    final bytes = (await File(event.file.path).readAsBytes()).toList();
    final file = http.MultipartFile.fromBytes('file', bytes);
    profileResponse =
        await Provider.of<ApiService>(context, listen: false)
            .uploadUserProfilePic(token, bytes);
  },
);

Выдает NoSuchMethodError исключение из этого метода и файла (object_patch.dart),

@patch
@pragma("vm:entry-point", "call")
dynamic noSuchMethod(Invocation invocation) {
  // TODO(regis): Remove temp constructor identifier 'withInvocation'.
  throw new NoSuchMethodError.withInvocation(this, invocation);
}

1 Ответ

0 голосов
/ 24 марта 2020

Я изменил этот requestConverter между вызовами,

@override
  Request convertRequest(Request request) {
    if (!request.multipart) {
      return super.convertRequest(
        request.replace(
          body: serializers.serializeWith(
            serializers.serializerForType(request.body.runtimeType),
            request.body,
          ),
        ),
      );
    } else {
      return request;
    }
  }

List<bytes> не работал для меня, но File путь выручил меня,

@Post(
    path: URLS.API_UPLOAD_IMAGE,
    headers: {"Content-Type": "multipart/formdata"},
  )
  @multipart
  Future<Response> uploadUserProfilePic(
    @Header("Authorization") String token,
    @PartFile('file') String file,
  );

Надеюсь, что это будет помочь кому-нибудь.

...