Руководство по тестированию макроса JsonCodable в Dart
![](/static/storage/230564408245602596733493918850272607749.png)
Версия Dart 3.5.0-152
представляет предварительную версию первого макроса — JsonCodable. Функция макросов похожа на генерацию кода, за исключением того, что она выполняется мгновенно и обрабатывается языком Dart. JsonCodable доступен на канале разработки Dart или главном канале Flutter. В будущем пользователи смогут создавать свои собственные макросы. Макросы — очень мощный инструмент для задач генерации кода, таких как сериализация JSON, прежде чем они будут выполнены внешними инструментами, такими как JsonSerializable.
Макрос JsonCodable
Многие из вас создавали приложения, которым необходимо вызывать внешнюю службу для получения данных. Часто эти данные возвращаются в формате JSON. Чтобы взаимодействовать с данными или показывать их пользователям, вам следует сопоставить их с объектами Dart. Этот процесс от JSON до объекта является сериализацией, обратным является десериализация. Как упоминалось выше, традиционно это делалось с использованием чего-то вроде JsonSerializable или других приложений, однако теперь мы можем использовать макрос JsonCodable.
Настройка
Измените канал сборки Flutter:
flutter channel master
Убедитесь, что вы находитесь на правильном канале (master):
flutter channel
![Flutter канал](/static/storage/24442131762918501291952793321583569800.webp)
Убедитесь, что вы используете правильную версию (3.5.0-152
или выше):
![Flutter версия](/static/storage/25279339252080410435513349889593195992.webp)
Создайте тестовый проект:
flutter create json_codable_test
- Откройте тестовое приложение и добавьте макросы в качестве экспериментальной функции в анализатор
analysis_options.yaml
.
analyzer:
enable-experiment:
- macros
![Добавьте макросы в analysis_options.yaml](/static/storage/254847444458035685950132906407997250279.webp)
- Добавьте пакет
json
в свойpubspec.yaml
.
![Пакет json в pubspec.yaml](/static/storage/152494761935884989211658078215271526628.webp)
- Создайте простой пример класса, например
Person
.
import 'package:json/json.dart';
@JsonCodable()
class Person {
String name;
int age;
Person(this.name, this.age);
}
![Класс Person с аннотацией JsonCodable](/static/storage/31849736624440429910887775132511880188.webp)
- Вызовите функции
fromJson
иtoJson
изmain
.
main() {
Person person = Person.fromJson({
"age": 30,
"name": "John Doe",
"email": "",
});
print(person.toJson());
}
Запустите тестовое приложение Flutter с включенными макросами:
flutter run --enable-experiment=macros
Пример
![Пример использования JsonCodable с кодом Visual Studio](/static/storage/145641324821219605308483770113290496487.gif)
Заключение
Если немного поэкспериментировать с этой функцией, то генерация кода станет проще и менее утомительной. При использовании сторонних инструментов вам всегда придется беспокоиться о том, синхронизированы ли они и верны ли их версии. Но здесь я могу доверить Dart генерацию кода. Очевидно, что эта функция находится в состоянии предварительной версии, и в нее могут вноситься изменения, поэтому я бы не стал использовать ее ни в одном критическом приложении, но она вселяет во меня надежду на будущее макросов Dart.