Преобразование недопустимых типов json
Я использую замороженный, и мне нужно преобразовать класс в json.
Мой код выглядит так:
import 'package:freezed_annotation/freezed_annotation.dart';
part 'key_state.freezed.dart';
part 'key_state.g.dart';
@freezed
class KeyState with _$KeyState {
factory KeyState({
CancelToken? token,
// ...
}) = _KeyState;
factory KeyState.initial() => KeyState();
factory KeyState.fromJson(Map<String, dynamic> json) =>
_$KeyStateFromJson(json);
}
Это класс CancelToken https://github.com/flutterchina/dio/blob/master/dio/lib/src/cancel_token.dart
Это не работает.
Ошибки консоли выглядят так
Не удалось сгенерировать код для
token
. Чтобы поддержать тип
CancelToken
ты можешь:
- Использовать
JsonConverter
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonConverter-class.html - Использовать
JsonKey
поляfromJson
иtoJson
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/fromJson.html https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/toJson.html пакет: flutter_app / redux / state / key_state.freezed.dart:114:22
Как мне это сделать?
1 ответ
Ошибка сообщает вам, что класс CancelToken нельзя напрямую преобразовать в JSON. Возможны следующие варианты:
Создайте класс обслуживания, который вручную преобразует ваш класс KeyState в представление JSON.
Создайте в проекте метод расширения для класса CancelToken, который добавляет к нему методы fromJson и toJson.https://dart.dev/guides/language/extension-methods
Создайте форк кода из Github, самостоятельно добавьте методы преобразования в класс CancelToken и укажите свое репо в файле pubspec.yaml. (также отправьте запрос на перенос, чтобы объединить ваши изменения в исходное репо)
Вам также потребуется добавить аналогичные методы преобразования для зависимых типов, таких как DioError, RequestOptions, Response.