2つのモデルを1つのモデルに統合する方法
ゴール
TodoモデルとTodoDetailモデルを1つに統合した
UnityTodoモデルを作成したい
Todoモデル
@freezed
class Todo with _$Todo {
const factory Todo({
required int id,
required String title,
}) = _Todo;
factory Todo.fromJson(Map<String, dynamic> json) => _$TodoFromJson(json);
}
TodoDetailモデル
@freezed
class TodoDetail with _$TodoDetail {
const factory TodoDetail({
required String fileName,
}) = _TodoDetail;
factory TodoDetail.fromJson(Map<String, dynamic> json) =>
_$TodoDetailFromJson(json);
}
UnityTodoモデル(統合モデル)
import 'package:freezed_annotation/freezed_annotation.dart';
part 'unity_todo.freezed.dart';
@freezed
class UnityTodo with _$UnityTodo {
const factory UnityTodo({
required int id,
required String title,
required String fileName,
}) = _UnityTodo;
factory UnityTodo.fromModel({ //👈ここ
required Todo todo,
required TodoDetail todoDetail,
}) {
return UnityTodo(
id: todo.id,
title: todo.title,
fileName: todoDetail.fileName,
);
}
}
使い方
class HomeScreenNotifier extends StateNotifier<HomeScreenState> {
HomeScreenNotifier() : super(const HomeScreenState());
void method() {
for (final todo in todos) {
final unityTodo = UnityTodo.fromModel(
todo: todo,
todoDetail: todoDetail,
);
logger.i('unityTodo: $unityTodo');
}
}
}
この記事が気に入ったらサポートをしてみませんか?