Flutter bloc 状态下 API 调用的负载

Payload of API call in flutter bloc state

提问人:user18084770 提问时间:10/29/2023 最后编辑:user18084770 更新时间:11/6/2023 访问量:15

问:

我使用 flutter clean 架构、MVVM 和 BLOC 状态管理。

我将有效负载模型保存在称为模型视图层中的实体的文件夹中

有效负载示例如下所示:

@unfreezed
class AddTaskPayload with _$AddTaskPayload {
  factory AddTaskPayload({
    String? title,
    String? description,
    DateTime? date,
    TimeOfDay? startingTime,
    TimeOfDay? endingTime,
    TaskPriority? priority,
  }) = _AddTaskPayload;
}

我在视图层中的状态如下所示:

class AddTaskState extends Equatable {
  final ErrorModel? errorModel;
  final AddTaskEntity addTaskPayload;

  const AddTaskState({
    this.errorModel,
    required this.addTaskPayload,
  });

  AddTaskState copyWith({
    ErrorModel? errorModel,
    AddTaskPayload? addTaskPayload,
  }) {
    return AddTaskState(
      errorModel: errorModel,
      addTaskPayload: addTaskPayload ?? this.addTaskPayload,
    );
  }

  @override
  List<Object?> get props => [
        errorModel,
        addTaskPayload,
      ];
}

我有一些问题:

  1. 在状态管理包 Equatable 的情况下,在应用程序 Frozen 中的休息模型的情况下使用是否合适?在集团状态的情况下使用 Freezed 是否有意义?

  2. 我想避免代码重复,这就是为什么我在状态类中添加了最终的 AddTaskEntity addTaskPayload 而不是 AddTaskPayload 中的 6 个字段,可以吗?我有一些疑问,因为更改有效负载中的特定字段将需要双重调用 copyWith,例如:

    emit(state.copyWith(addTaskPayload: state.addTaskPayload.copyWith(date: event.date)));

复制代码并在状态中添加有效负载类中的所有字段是好的做法还是更好?如何以最有效和最正确的方式做到这一点?因为我认为双重copyWith会导致一些性能问题,例如3个有效载荷将处于状态?

  1. Bloc 是 MVC 设计模式的例子吗?我们将 View 作为 UI,将 model 作为保持当前状态的状态类,将控制器作为可以修改状态的 bloc。或者这是一种糟糕的思维方式?
flutter mvvm bloc 干净架构 flutter-bloc

评论


答: 暂无答案