Чтобы создать новый экземпляр объекта, используя следующий синтаксис:
MyClass.fromJson(jsonMap)
Для использования со следующим кодом:
// import 'dart:convert';
const jsonString = '{"myString":"Hello"}';
final jsonMap = jsonDecode(jsonString);
final myObject = MyClass.fromJson(jsonMap);
Есть как минимум следующие способы сделать it (с дополнительными примечаниями о характеристиках каждого из них):
Генеративный конструктор
class MyClass {
MyClass(this.myString);
final String myString;
MyClass.fromJson(Map<String, dynamic> json) : this(json['myString']);
}
Есть два типа генеративных конструкторов: именованные и безымянные. MyClass.fromJson()
- именованный конструктор, а MyClass()
- безымянный конструктор. К генеративным конструкторам применяются следующие принципы:
- Генеративные конструкторы могут создавать только экземпляр самого класса.
- Генеративные конструкторы могут использовать список инициализаторов.
- Генеративные конструкторы могут только используйте параметры инициализации или список инициализаторов для установки
final
свойств, то есть не в теле конструктора. - Генеративные конструкторы могут иметь
const
, даже если они не перенаправляют.
Конструктор фабрики
class MyClass {
MyClass(this.myString);
final String myString;
factory MyClass.fromJson(Map<String, dynamic> json) {
return MyClass(json['myString']);
}
}
- Конструкторы фабрики могут возвращать подтип класса.
- Конструкторы фабрики могут использоваться для создания одиночных объектов.
- Конструкторы фабрики могут быть безымянными, как генеративные конструкторы.
- Фабричные конструкторы могут быть
const
, но только при перенаправлении.
Stati c method
class MyClass {
MyClass(this.myString);
final String myString;
static MyClass fromJson(Map<String, dynamic> json) {
return MyClass(json['myString']);
}
}
- Методы Stati c могут использоваться для создания синглтонов.
- Stat i c методы могут использоваться как отрывные.
Дополнительная литература