在Flutter中修改孩子的父母最终论点的正确方法

时间:2019-01-30 12:35:45

标签: redux flutter viewmodel

我正在为使用Flutter的Dart制作的应用程序使用redux(仍在学习中)。首先,我将解释我的代码,以便您可以更好地理解。

我有这种卡型号:

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个自定义有状态小部件,一个用于类别和状态,另一个用于标题,描述,位置,标签等的文本字段。请参阅{{3} }。

所以我问自己,创建新卡的正确方法是什么?

我已经想到了这两种解决方案:

  1. 为上传页面中的每个卡片属性创建单独的变量(我不喜欢),并将所需的参数传递给我的自定义小部件(但就像某些属性按值传递一样,因此我必须传递voidCallbacks来修改值在上传页面中?)。
  2. 每次我想修改一个值时,创建一个CardModel空变量并使用copyWith函数。但是,如果我将卡片值传递给自定义窗口小部件,它们将无法分配新的卡片(widget.card = widget.card.copyWith(fer:ergrgr);),因为有状态窗口小部件属性是最终属性。所以我最终又通过了voidCallbacks?

我正在尝试编写尽可能干净的代码,但无法弄清楚该怎么做...我的2个解决方案似乎很脏

SideQuestion:使用几种模式有意义吗,例如Redux用于可序列化数据,而scopeModel用于短期数据?

0 个答案:

没有答案