我正在制作一个用于浏览Dog API的玩具应用,并且尝试添加一些自定义选项。因此我创建了一个名为Settings
的类,并使用ChangeNotifierProvider
使该应用可以访问。
为了在应用启动时保存设置,我使用了json_serializable
包来生成用于对JSON
格式进行编码和解码的代码。
但是,save
方法始终无法编码,因为它无法编码Brightness
我试图像这样制作自己的可序列化枚举:
@JsonSerializable()
enum _Brightness{
light,
dark,
}
以及类似这样的代码生成器错误:
[SEVERE] json_serializable:json_serializable on lib/main.dart (cached):
Error running JsonSerializableGenerator
The class `_Brightness` has no default constructor.
package:google_play_recreation/main.dart:176:6
╷
176 │ enum _Brightness{
│ ^^^^^^^^^^^
╵
这是我的Settings
班:
@JsonSerializable()
class Settings extends ChangeNotifier{
Settings({file,brightness,primarySwatch}){
_file=file;
_brightness=brightness;
_primarySwatch=primarySwatch;
WidgetsBinding.instance.addObserver(LifecycleEventHandler(
onPaused: save,
));
}
factory Settings.fromJson(Map<String,dynamic>json)=> _$SettingsFromJson(json);
Map<String,dynamic> toJson()=>_$SettingsToJson(this);
File _file;
Brightness _brightness;
Brightness get brightness=>_brightness;
set brightness(value){
_brightness=value;
notifyListeners();
}
Color _primarySwatch;
Color get primarySwatch=>_primarySwatch;
set primarySwatch(value){
_primarySwatch=value;
notifyListeners();
}
///TODO: implement [load] and [save] methods for [Settings]
static Future<Settings> load() async {
var directory = await getApplicationDocumentsDirectory();
var path = directory.path;
var file = await File('$path/settings.json').create();
var rawData = await file.readAsString();
try{
return Settings.fromJson(
jsonDecode(
rawData
)
);
}
catch(e){
return Settings(
file: file,
brightness: Brightness.dark,
primarySwatch: null,
);
}
}
void save() async{
Map jsonMap=toJson();
String jsonString=jsonEncode(jsonMap);
await _file.writeAsString(jsonString);
}
}
我希望代码生成程序包可以为我处理Settings
的序列化,或者至少让我序列化一个枚举,但这似乎并非如此
我的代码:https://gist.github.com/eyalkutz/56a63c6ea3379acec201ca7a6b0c6aaa