我想将ColorSwatch存储在json中,并将其提取到对象的.fromJson方法中。
我尝试过将其存储在JSON中,
"colorSwatch": "ColorSwatch(0xFFFFB7DE, { 'highlight': Color(0xFFFFB7DE), 'splash': Color(0xFFF94CBF) })"
然后将其提取:
colorSwatch = jsonMap ['colorSwatch'],
它没有用。我尝试将JSON更改为:
"colorSwatch": "0xFFFFB7DE, { 'highlight': Color(0xFFFFB7DE), 'splash': Color(0xFFF94CBF) }"
然后将对象的.fromJson方法修改为:
colorSwatch = ColorSwatch(jsonMap['colorSwatch']),
它没有用。然后,我尝试了:
colorSwatch = jsonMap['colorSwatch'] as ColorSwatch,
没有用。
然后我尝试将突出显示颜色和初始颜色分别保存在json中,并使用
进行提取highlight = jsonMap['highlight'] as int,
splash = jsonMap['splash'] as int,
colorSwatch = new ColorSwatch(0xFFFFD28E, {'highlight': Color(highlight), 'splash': Color(splash)}),
但是显然,我只能在对象的fromJson方法中对静态变量进行操作。
所以我被困住了。
我希望将ColorSwatch对象附加到Riddle对象,因此与Riddle相关的所有属性都放在一个位置,不需要在需要时在其他位置组装。
答案 0 :(得分:1)
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),
});
}
}