如何json编码亮度对象

时间:2019-08-31 15:53:57

标签: flutter dart

我正在制作一个用于浏览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

0 个答案:

没有答案