【问题标题】:Undefined name state for flutter bloc颤振块的未定义名称状态
【发布时间】:2022-01-25 19:35:26
【问题描述】:

我正在尝试将 flutter_bloc v8 用于计数器应用程序,但我无法访问状态的值来更新它。它告诉我的状态是未定义的。我知道我们可以通过使用 Cubit 来简化它,但我想看看它如何与普通 bloc 一起工作。

counter_state.dart

abstract class CounterState {}

class CounterValue extends CounterState {
  int value;
  CounterValue(this.value);
}

class CounterLoading extends CounterState {}

counter_bloc.dart

class CounterBloc extends Bloc<CounterEvent, CounterState> {
  CounterBloc() : super(CounterValue(0)) {
    on<IncrementEvent>((event, emit) => _increment(emit));
    on<DecrementEvent>((event, emit) => _decrement(emit));
  }
}

void _increment(Emitter<CounterState> emit) {
  emit(CounterValue(state.value + 1));
}

void _decrement(Emitter<CounterState> emit) {
  emit(CounterValue(state.value + 1));
}

【问题讨论】:

    标签: flutter bloc flutter-bloc


    【解决方案1】:

    状态不可访问,因为您在 CounterBloc 之外定义了函数。

    试试这个:

    class CounterBloc extends Bloc<CounterEvent, CounterState> {
      CounterBloc() : super(CounterValue(0)) {
        on<IncrementEvent>((event, emit) => _increment(emit));
        on<DecrementEvent>((event, emit) => _decrement(emit));
      }
    
      void _increment(Emitter<CounterState> emit) {
        emit(CounterValue(state.value + 1));
      }
    
      void _decrement(Emitter<CounterState> emit) {
        emit(CounterValue(state.value + 1));
      }
    }
    
    
    

    【讨论】:

    • 啊,是的。我没有注意到。谢谢,但现在我在 state.value 上得到“没有为类型 'CounterState' 定义 getter 'value'”
    • 您应该将状态转换为CountrValue。如果有帮助,请接受答案。谢谢
    • 我已经接受了答案,但是很抱歉,我们如何投射状态?
    • state.value 替换为(state as CountrValue).value。接受请不要投票:)
    • void _increment(Emitter&lt;CounterState&gt; emit) { emit(CounterValue((state as CounterValue).value + 1)); } 它对我有用。
    猜你喜欢
    • 1970-01-01
    • 2021-05-01
    • 2021-01-17
    • 1970-01-01
    • 2021-03-28
    • 2021-11-06
    • 1970-01-01
    • 2021-11-30
    • 2021-08-12
    相关资源
    最近更新 更多