Flutter 块状态无法正确更新

Tob*_*asW 2 dart flutter bloc

我遇到一个问题,我的状态没有更新,并且我在代码中找不到问题。

基本上我正在像这样更新我的状态:

集团

  @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());
  }
Run Code Online (Sandbox Code Playgroud)

事件

class UpdateWorkoutPageIndex extends WorkoutEvent {
  final int pageIndex;

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

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

  @override
  String toString() => "UpdateWorkoutPageIndex { pageIndex: $pageIndex }";
}
Run Code Online (Sandbox Code Playgroud)

状态

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

即使 event.pageIndex 不同,状态也不会改变。

如果需要,我可以提供更多代码,但目前我不确定需要什么代码来解决我的问题。

小智 5

如果您的WorkoutEvent Classextends equatable,那么您需要添加这一行

    List<Object> get props => [pageIndex]; 
Run Code Online (Sandbox Code Playgroud)

到你的UpdateWorkoutPageIndex班级

目的是使用props(属性)的[List]来判断两个[Equatables]是否相等。因此,状态将被更新。

  • 我在国家班里也错过了同样的事情。添加它并且它有效! (2认同)