在';家长';对象';fromJson方法

在';家长';对象';fromJson方法,json,object,flutter,dart,Json,Object,Flutter,Dart,我想在json中存储一个色样,并在对象的.fromJson方法中提取它 我尝试将其存储在JSON中,如下所示: "colorSwatch": "ColorSwatch(0xFFFFB7DE, { 'highlight': Color(0xFFFFB7DE), 'splash': Color(0xFFF94CBF) })" 然后使用以下方法提取它: colorSwatch=jsonMap['colorSwatch'] 它不起作用。我尝试将JSON更改为: "colorSwatch": "0xFF

我想在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方法中对静态变量执行操作

所以我被卡住了

我希望颜色样本对象附加到Riddle对象,因此与Riddle相关联的所有属性都位于一个位置,不需要在需要时在其他位置进行组装

  • 似乎不可能在内部构建一个对象,这里是色样 另一个objects.fromJson方法,是否正确
  • 这意味着我必须在一行中提取整个对象 当然,我该怎么做

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),
    });
  }
}
class色样{
最终色样;
最终色斑;
最终颜色高亮;
色样(this.swatch,this.splash,this.highlight);
factory ColorSwatch.fromJson(映射json){
返回色样(
颜色(int.tryParse(json['colorSwatch',,基数:16)),
颜色(int.tryParse(json['highlight'],基数:16)),
颜色(int.tryParse(json['splash'],基数:16)),
);
}
字符串toJson(){
返回jsonEncode({
“colorSwatch”:swatch.value.toRadixString(16),
“highlight”:highlight.value.toRadixString(16),
“splash”:splash.value.toRadixString(16),
});
}
}

谢谢Aligator,这是一个有用的答案。最后I:1。将十六进制颜色值分别保存到JSON,2。使用颜色(int.parse(json['highlight'],基数16))提取它们;十六进制转换帮我解决了这个问题,我欠你的。干杯,山姆。