У меня есть блок, который отвечает за переключение индексов в нижней панели навигации. Он реализован таким образом, что копирует старое состояние и меняет его. Мне нужно заменить copyWith и сделать так, чтобы он не копировал, а создавал новое состояние. Как это можно реализовать и переписать данный блок?
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 {
}
Мне просто нужно переделать его под эти условия. Чтобы заменить copyWith. Я хочу знать, как это делается
Я ответил на него, предполагая, что существует состояние только с одной переменной, вы можете использовать аналогичный метод для создания новых состояний вместо копирования из предыдущего состояния.
Мы используем
emit(state.copyWith(index: event.index))
сказать, что мы копируем все элементы из предыдущего состояния, изменяя index
.
Ваше состояние BottomNavyState
на данный момент имеет только одну переменную. Таким образом, приведенный выше copyWith
действует аналогично использованию создания нового состояния.
Мы не должны пытаться изменить или переопределить метод copyWith
, потому что он не соответствует реальной цели метода.
Вместо этого вы можете использовать
emit(BottomNavyState(index: event.index))
использовать конструктор нового состояния вместо копирования из предыдущего состояния.
Я забыл добавить файл со своим состоянием. Теперь я добавил. Скажите, пожалуйста, что я должен написать в моем классе ChangePageState?
У вас уже есть BottomNavyState
. Таким образом, вы можете излучать то же самое и не нужно ChangePageState
. Я просто предположил, что это было так. Итак, просто замените ChangePageState
на BottomNavyState
, все будет хорошо. (Я также отредактирую ответ). Вы можете просто удалить класс ChangePageState
, так как он нам не понадобится.
Поскольку есть только одна переменная
index
, изменение состояния с помощьюcopyWith
работает почти так же, как использование нового события. В чем проблема с текущим кодом?