Правильный способ изменить последний аргумент родителей от ребенка во Флаттере - PullRequest
0 голосов
/ 30 января 2019

Я использую избыточность (все еще узнаю об этом) для своего приложения, созданного в 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 решения:

  1. Создание отдельных переменных (которые мне не нравятся) для каждого атрибута карты на странице загрузки и передача необходимых аргументов в мои пользовательские виджеты (но, как некоторыеатрибуты передаются по значению, поэтому я должен передать voidCallbacks, чтобы изменить значение на странице загрузки?).
  2. Создать пустую переменную CardModel и использовать функцию copyWith каждый раз, когда я хочу изменить значение.Но затем, если я передам значение карты своим пользовательским виджетам, они не смогут назначить новую карту (widget.card = widget.card.copyWith (fer: ergrgr);), потому что атрибуты виджетов с сохранением состояния являются окончательными.Поэтому я снова передаю voidCallbacks?

Я пытаюсь кодировать как можно более чистым, но не могу понять, как мне это сделать ... Мои 2 решения кажутся грязными

SideQuestion: Имеет ли смысл использовать несколько шаблонов, например Redux для сериализуемых данных и scopeModel для краткосрочных данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...