如何将文本小部件(和其他小部件)转换为JSON?
我正在尝试将对象保存到SharedPreferences,但是令人难以置信的是,我似乎找不到任何信息。我希望可以像DateTime一样做一些事情使它可以JSON转换。
我的活动课:
class Activity {
String state;
bool visible;
DateTime visibleAfter;
bool firstView;
Widget menuText;
Widget route;
Activity(this.state, this.visible, this.visibleAfter, this.firstView, this.menuText, this.route);
Map<String, dynamic> toJson() => {
'state': state,
'visible': visible,
'visibleAfter': visibleAfter.toIso8601String(),
'firstView': firstView,
'menuText': menuText,
'route': route,
};
factory Activity.fromJson(Map<String, dynamic> json) {
return new Activity(
json['state'], json['visible'], DateTime.parse(json['visibleAfter']), json['firstView'], json['menuText'], json['route']);
}
}
如果我尝试编写它,则会收到一个错误消息(注意:在对象中没有Widget的情况下,编写工作仍然可以正常进行)
json.encode(
activityStates.map((k, v) => MapEntry(k, v.toJson())),
/////// Unhandled Exception: Converting object to an encodable object failed: Instance of 'Text'
));
/* These include routes that I would like to map to, like WelcomeScreen
var defaultActivityStates = {
'Welcome': Activity('review', true, DateTime.now(), false, Text('welcome'), WelcomeScreen),
'SingleDigitEdit': Activity('todo', true, DateTime.now(), false, Text('test'), SingleDigitEditScreen),
'SingleDigitPractice': Activity('todo', true, DateTime.now(), false, Text('test'), SingleDigitPractice),
}
*/
答案 0 :(得分:0)
您的menuText
是一个小部件(它是类的实例)。您无法将其序列化为JSON,因为JSON仅支持简单类型。而是序列化字符串内容。
class Activity {
String state;
bool visible;
DateTime visibleAfter;
bool firstView;
String menuText; // change to String
当menuText
是字符串而不是窗口小部件时,它将序列化为JSON。您想在任何地方将其用作小部件,只需使用Text(menuText)