Состояние Flutter Blo c не обновляется должным образом - PullRequest
1 голос
/ 10 января 2020

У меня проблема с тем, что мое состояние не обновляется, и я не могу найти проблему в своем коде.

В основном я обновляю свое состояние следующим образом:

Blo c

  @override
  WorkoutState get initialState => WorkoutsLoaded(
      workouts: ["Workout1", "Workout2", "Workout3"], selectedWorkoutIndex: 0);

  @override
  Stream<WorkoutState> mapEventToState(WorkoutEvent event) async* {
    if (event is UpdateWorkoutPageIndex) {
      yield* _mapUpdateWorkoutPageIndexToState(event);
    }

    if (event is IncreaseWorkoutPageIndex) {
      yield* _mapIncreaseWorkoutPageIndexToState(event);
    }

    if (event is DecreaseWorkoutPageIndex) {
      yield* _mapDecreaseWorkoutPageIndexToState(event);
    }
  }

  Stream<WorkoutState> _mapUpdateWorkoutPageIndexToState(
      UpdateWorkoutPageIndex event) async* {
    print("_mapUpdateWorkoutPageIndexToState : " + this.state.toString());
    yield WorkoutsLoaded(
        workouts: ["Workout0", "Workout2", "Workout3"],
        selectedWorkoutIndex: event.pageIndex);
    print("_mapUpdateWorkoutPageIndexToState End : " + this.state.toString());
  }

Событие

class UpdateWorkoutPageIndex extends WorkoutEvent {
  final int pageIndex;

  const UpdateWorkoutPageIndex({@required this.pageIndex});

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

  @override
  String toString() => "UpdateWorkoutPageIndex { pageIndex: $pageIndex }";
}

Состояние

class WorkoutsUninitialised extends WorkoutState {}

class WorkoutsLoaded extends WorkoutState {
  final List<String> workouts;
  final int selectedWorkoutIndex;

  const WorkoutsLoaded({
    this.workouts,
    this.selectedWorkoutIndex,
  });

  @override
  String toString() {
    return "WorkoutsLoaded : " + this.workouts.toString() + " - " + this.selectedWorkoutIndex.toString();
  }
}

Состояние не меняется, даже если event.pageIndex отличается.

Я могу предоставить дополнительный код при необходимости, но в настоящее время я не уверен, какой код может понадобиться для решения моей проблемы.

1 Ответ

1 голос
/ 11 января 2020

, если ваш WorkoutEvent Class расширяется equatable, тогда вам нужно добавить эту строку

    List<Object> get props => [pageIndex]; 

к вашему UpdateWorkoutPageIndex классу

Цель состоит в том, чтобы [Список] реквизиты (свойства) будут использоваться для определения того, равны ли два [Equatables]. Следовательно, состояние будет обновлено.

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