如何替换 copyWith 以便不复制,而是创建新状态?

How to replace copyWith so as not to copy, but to create a new state?

我有一个负责在 Navogation Bottom 中切换索引的 bloc Bar.It 以复制旧状态并更改它的方式实现。我需要替换 copyWith 并使其不复制而是创建一个新状态。如何在给定的 bloc 中实施和重写?

class BottomNavyBloc extends Bloc<BottomNavyEvent, BottomNavyState> {
  BottomNavyBloc() : super(const BottomNavyState()) {
    on<ChangePageEvent>(
          (event, emit) => emit(
        state.copyWith(index: event.index),
      ),
    );
  }
}

abstract class BottomNavyEvent extends Equatable {
  const BottomNavyEvent();

  @override
  List<Object> get props => [];
}

class ChangePageEvent extends BottomNavyEvent {
  final int index;

  const ChangePageEvent({
    required this.index,
  });

  @override
  List<Object> get props => [index];
}

我的状态:

class BottomNavyState extends Equatable {
  const BottomNavyState({
    this.index = 0,
  });

  final int index;

  @override
  List<Object> get props => [index];
}

class ChangePageState extends BottomNavyState {

}

我们使用

emit(state.copyWith(index: event.index))

表示我们正在通过更改 index.

复制先前状态的所有元素

你的状态 BottomNavyState 目前只有一个变量。因此,上述 copyWith 的行为类似于使用发射新状态。

我们不应尝试更改或重写该方法 copyWith,因为它违背了该方法的实际目的。

相反,您可以使用

emit(BottomNavyState(index: event.index))

使用新的状态构造函数而不是从以前的状态复制。