Здравствуйте, прежде чем мы начнем, эта статья является продолжением предыдущего поста, посвященного flutter mvvm с использованием provider, injectable и freeze.
MVVM Часть 1
MVVM часть 2
Код проекта здесь…
Эта статья будет посвящена тому, как реализовать заморозку шаг за шагом.
Итак, как использовать заморозку.
Во-первых… в вашем pubspec.yaml
в секции dependencies
нужно установить (пожалуйста, не обращайте внимания на версию, используйте последнюю)
dependencies:
flutter:
sdk: flutter
freezed: ^2.1.0+1
freezed_annotation: ^2.1.0
и в разделах dev_dependencies
, которые вы должны установить
dev_dependencies:
build_runner: ^2.2.0 //Generating implementation code
flutter_test:
sdk: flutter
json_serializable: ^6.3.1 //Make serializable object(to/from) json
и вот пример кода
import 'package:freezed_annotation/freezed_annotation.dart';
part 'task_model.freezed.dart';
part 'task_model.g.dart';
@freezed
class TaskModel with _$TaskModel {
factory TaskModel({
required final String title,
required final String description,
@Default(false) bool isDone,
}) = _TaskModel;
factory TaskModel.fromJson(Map<String, dynamic> json) =>
_$TaskModelFromJson(json);
}
Теперь давайте разобьем его на части,
Посмотрите, как построен класс
@freezed
//This _$TaskModel is not autoGenerated you have to construct
//it manually using this format _${{ClassName}}
class TaskModel with _$TaskModel {
//for this section, you just have to follow these line
/* using this format
factory {{ClassName}}({
Declare all the fields here..
}) = _{{ClassName}}
*/
factory TaskModel({
required final String title,
required final String description,
@Default(false) bool isDone,
}) = _TaskModel;
//Allow your object to be serializable. can do mutation
//fromJson or toJson.
factory TaskModel.fromJson(Map<String, dynamic> json) =>
_$TaskModelFromJson(json);
//this Factory fromJson method is not autogenerated
// so you have to declare it manually with thisFormat
// factory {{ClassName}}.fromJson(Map<String, dynamic> json) =>
// _${{ClassName}}FromJson(json);
}
до этого момента… ваш код будет везде КРАСНЫМ… хаха не волнуйтесь посмотрите на импорт
Посмотрите на импорт
Чтобы иметь возможность использовать @freezed
или @unfreezed
вы должны импортировать это
import 'package:freezed_annotation/freezed_annotation.dart';
и затем вы должны импортировать следующее
part 'task_model.freezed.dart';
//this import can be very depend on the class name
//so the format will be
//part '{{className}}.freezed.dart';
этот импорт позволит вам иметь immutable
или mutable
способность этой модели.
переходим к следующему.
Вы должны импортировать следующее
part 'task_model.g.dart';
//this import are important because it makes your object are serializable.
//see the fromJson method in code above. without this import it will not run
до этого момента… ваш код будет везде КРАСНЫМ… хаха не волнуйтесь посмотрите на генерацию кода…
Давайте сгенерируем код.
Прежде чем мы начнем, убедитесь, что вы уже настроили свой pubspec.yaml, как уже упоминалось в первом разделе этой статьи.
Теперь попросим бегунок сборки создать класс реализации нашей модели…
убедитесь, что вы уже выполнили flutter pub get для установки pubspec.yaml
затем выполните эту команду
flutter pub run build_runner build --delete-conflicting-outputs
и после ее выполнения она должна сгенерировать файл реализации следующим образом.
..
и вот так… теперь вы можете взглянуть на свой класс модели, там больше не будет красного цвета.
хаха спасибо!!!.