Извлечение объекта из JSON в методе .from Json родительского объекта - PullRequest
0 голосов
/ 10 марта 2020

Я хочу сохранить ColorSwatch в json и извлечь его с помощью метода объекта. Json.

Я пытался сохранить его в JSON как:

"colorSwatch": "ColorSwatch(0xFFFFB7DE, { 'highlight': Color(0xFFFFB7DE), 'splash': Color(0xFFF94CBF) })"

Затем извлеките его с помощью:

colorSwatch = jsonMap ['colorSwatch'],

Это не сработало. Я попытался изменить JSON на:

"colorSwatch": "0xFFFFB7DE, { 'highlight': Color(0xFFFFB7DE), 'splash': Color(0xFFF94CBF) }"

Затем изменил метод объекта .from Json на:

colorSwatch = ColorSwatch(jsonMap['colorSwatch']),

Это не сработало. Затем я попытался:

colorSwatch = jsonMap['colorSwatch'] as ColorSwatch,

Не работает.

Затем я попытался сохранить цвета подсветки и spla sh в json отдельно и извлечь с помощью

highlight = jsonMap['highlight'] as int,
splash = jsonMap['splash'] as int,
colorSwatch = new ColorSwatch(0xFFFFD28E, {'highlight': Color(highlight), 'splash': Color(splash)}),

Но, по-видимому, мне разрешено выполнять операции только с переменными * stai c в объекте из метода Json.

Так что я застрял.

Я хочу ColorSwatch объект присоединен к объекту Riddle, поэтому все свойства, связанные с Riddle, находятся в одном месте, и при необходимости их не нужно собирать в другом месте.

  • Кажется невозможным построить объект , здесь ColorSwatch, внутри другого объекта. Из Json метода, это правильно?
  • Значит, мне нужно извлечь весь объект в одну строку кода, как мне это сделать?

1 Ответ

1 голос
/ 10 марта 2020

Json не поддерживает шестнадцатеричные числа, поэтому вам нужно записать их в виде строки и преобразовать их, используя int.tryparse:

  var hexadecimalString = 'ff542144';
  var decimalInteger = int.tryParse(hexadecimalString, radix: 16);

для вашего ColorSwatch, вам нужен вспомогательный класс, подобный этому:

class ColorSwatch {
  final Color swatch;
  final Color splash;
  final Color highlight;

  ColorSwatch(this.swatch, this.splash, this.highlight);

  factory ColorSwatch.fromJson(Map<String, dynamic> json) {
    return ColorSwatch(
      Color(int.tryParse(json['colorSwatch'], radix: 16)),
      Color(int.tryParse(json['highlight'], radix: 16)),
      Color(int.tryParse(json['splash'], radix: 16)),
    );
  }

  String toJson() {
    return jsonEncode({
      'colorSwatch': swatch.value.toRadixString(16),
      'highlight': highlight.value.toRadixString(16),
      'splash': splash.value.toRadixString(16),
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...