Я использую избыточность (все еще узнаю об этом) для своего приложения, созданного в Dart with Flutter.Во-первых, я собираюсь объяснить свой код, чтобы вы могли лучше понять.
У меня есть эта модель карты:
class CardModel {
final List images;
final int id;
final AppType category;
final bool status;
final String title;
final String description;
final String location;
final List<String> tags;
// int userId;
CardModel(
{this.images,
@required this.id,
@required this.status,
@required this.category,
@required this.title,
@required this.description,
@required this.location,
@required this.tags});
CardModel copyWith({List images,
int id,
bool status,
AppType category,
String title,
String description,
String location,
List<String> tags}){
return CardModel(
id: id ?? this.id,
images: images ?? this.images,
status: status ?? this.status,
category: category ?? this.category,
title: title ?? this.title,
description: description ?? this.description,
location: location ?? this.location,
tags: tags ?? this.tags,
);
}
}
Она неизменна, потому что в моем AppState есть экземпляры этого класса.
У меня есть следующее действие:
class AddCard {
final CardModel card;
AddCard({this.card});
}
Во-вторых, у меня есть страница загрузки, на которой у меня есть 2 пользовательских виджета с состоянием, один для категорий и статуса, а другой с текстовыми полями дляназвание, описание, местоположение, теги и т. д. См. изображение .
Поэтому я спрашиваю себя, как правильно создать новую карту?
Я думал, что эти 2 решения:
- Создание отдельных переменных (которые мне не нравятся) для каждого атрибута карты на странице загрузки и передача необходимых аргументов в мои пользовательские виджеты (но, как некоторыеатрибуты передаются по значению, поэтому я должен передать voidCallbacks, чтобы изменить значение на странице загрузки?).
- Создать пустую переменную CardModel и использовать функцию copyWith каждый раз, когда я хочу изменить значение.Но затем, если я передам значение карты своим пользовательским виджетам, они не смогут назначить новую карту (widget.card = widget.card.copyWith (fer: ergrgr);), потому что атрибуты виджетов с сохранением состояния являются окончательными.Поэтому я снова передаю voidCallbacks?
Я пытаюсь кодировать как можно более чистым, но не могу понять, как мне это сделать ... Мои 2 решения кажутся грязными
SideQuestion: Имеет ли смысл использовать несколько шаблонов, например Redux для сериализуемых данных и scopeModel для краткосрочных данных?