Flutter fromJson - 未处理的错误未处理的错误类型'String'不是'int'类型的子类型发生在实例中
Posted
技术标签:
【中文标题】Flutter fromJson - 未处理的错误未处理的错误类型\'String\'不是\'int\'类型的子类型发生在实例中【英文标题】:Flutter fromJson - Unhandled error Unhandled error type 'String' is not a subtype of type 'int' occurred in Instance ofFlutter fromJson - 未处理的错误未处理的错误类型'String'不是'int'类型的子类型发生在实例中 【发布时间】:2021-01-26 08:21:09 【问题描述】:我正在使用 HydratedBloc 尝试将颜色存储为 json 作为 int 值,因此我没有大量的 if/else 方法来执行一堆 if (color == Colors.blue) => 'blue'
等...
所以我正在尝试这个:
int mapColorToInt(Color color) => color.value;
Color mapIntToColor(int colorValue) => Color(colorValue);
@override
ThemeState fromJson(Map<String, dynamic> json)
return NewTheme(
themeData: ThemeData(
scaffoldBackgroundColor: mapIntToColor(json['scaffoldBackgroundColor']),
accentColor: mapIntToColor(json['accentColor']),
),
);
@override
Map<String, dynamic> toJson(ThemeState state)
return
'scaffoldBackgroundColor':
mapColorToInt(state.themeData.scaffoldBackgroundColor),
'accentColor': mapColorToInt(state.themeData.accentColor),
;
并得到这个错误:
未处理的错误在“ThemeBloc”的实例中发生未处理的错误类型“String”不是“int”类型的子类型。
我不明白整数是否是受支持的类型,但根据我的搜索,似乎我不是唯一一个遇到整数和 json 问题的人。
然后我尝试做同样的事情,但保留所有字符串:
String mapColorToInt(Color color) => color.value.toString();
Color mapIntToColor(String colorValue) => Color(int.parse(colorValue));
@override
ThemeState fromJson(Map<String, dynamic> json)
return NewTheme(
themeData: ThemeData(
scaffoldBackgroundColor: mapIntToColor(json['scaffoldBackgroundColor']),
accentColor: mapIntToColor(json['accentColor']),
),
);
@override
Map<String, dynamic> toJson(ThemeState state)
return
'scaffoldBackgroundColor':
mapColorToInt(state.themeData.scaffoldBackgroundColor),
'accentColor': mapColorToInt(state.themeData.accentColor),
;
这给出了这个错误:
未处理的错误 未处理的错误 FormatException: Invalid radix-10 number (at character 1)
显然我在这里遗漏了一些东西,但不清楚是什么。我在 UI 中测试了 mapIntToColor 函数,它在通过 color.value
时工作正常。任何帮助将不胜感激。
谢谢。
【问题讨论】:
【参考方案1】:请告诉我 json['accentColor'] 的例子。 如果该 json 值类似于“#FCFDSD”,请尝试使用以下代码。
scaffoldBackgroundColor: HexColor(json['scaffoldBackgroundColor']),
class HexColor extends Color
static int _getColorFromHex(String hexColor)
hexColor = hexColor.toUpperCase().replaceAll('#', '');
if (hexColor.length == 6)
hexColor = 'FF' + hexColor;
return int.parse(hexColor, radix: 16);
HexColor(final String hexColor) : super(_getColorFromHex(hexColor));
【讨论】:
嗨库库,感谢您的回复。颜色上的 .value 与十六进制值不同,但我仍然使用十六进制值尝试了您的代码,不幸的是得到了无效的基数错误。 让我知道你的json的颜色值? 好的,如果我将 Colors.blue 传递给我的 mapColorToInt 函数,它会返回 4280391411。根据文档,value 属性是代表颜色的 32 位值。 你会打印'state.themeData.scaffoldBackgroundColor'值和'state.themeData.accentColor'吗? state.themeData.scaffoldBackgroundColor' 打印:MaterialColor(primary value: Color(0xff2196f3))以上是关于Flutter fromJson - 未处理的错误未处理的错误类型'String'不是'int'类型的子类型发生在实例中的主要内容,如果未能解决你的问题,请参考以下文章
Flutter JSON 该类没有名为“fromJson”的构造函数
Flutter:未处理的异常:错误状态:DocumentSnapshotPlatform中不存在字段
Flutter firebase 查询快照错误:“未处理的异常:错误状态:无元素”