Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 我在bloc(cubit)的帮助下在颤振中创建异步计数器应用程序,每次计数器返回0时,我都会发出一个加载状态_Flutter_Bloc_Cubit - Fatal编程技术网

Flutter 我在bloc(cubit)的帮助下在颤振中创建异步计数器应用程序,每次计数器返回0时,我都会发出一个加载状态

Flutter 我在bloc(cubit)的帮助下在颤振中创建异步计数器应用程序,每次计数器返回0时,我都会发出一个加载状态,flutter,bloc,cubit,Flutter,Bloc,Cubit,我正在使用BLoC(cubit)在颤振中创建一个异步计数器应用程序。当我发出加载状态时,计数器不是递增的,而是返回到0。如何解决这个问题 代码: 导入'dart:async'; 导入“包:bloc/bloc.dart”; 导入“package:meta/meta.dart”; “反州飞镖”部分; 类CounterCubit扩展了Cubit{ 计数器立方体():超级(计数器(计数器:0)); 无效增量(){ 打印('before counterload()${state.counter}'); 发

我正在使用BLoC(cubit)在颤振中创建一个异步计数器应用程序。当我发出加载状态时,计数器不是递增的,而是返回到0。如何解决这个问题

代码:

导入'dart:async';
导入“包:bloc/bloc.dart”;
导入“package:meta/meta.dart”;
“反州飞镖”部分;
类CounterCubit扩展了Cubit{
计数器立方体():超级(计数器(计数器:0));
无效增量(){
打印('before counterload()${state.counter}');
发射(反加载());
打印('after counterload()${state.counter}');
计时器(持续时间(秒数:2),(){
发射(反向加载());
打印('enter code here previous state${state.counter}');
发射(计数器(计数器:state.Counter+1));
打印('next state${state.counter}');
});
}
}
“反立方镖”的一部分;
@不变的
抽象类反状态{
最终整数计数器=0;
}
类计数器扩展计数器状态{
最终整数计数器;
计数器({this.Counter});
}
类反加载扩展了反状态{
反负荷();
}
类计数器加载扩展计数器状态{
反向加载();
}

问题在于,您的其他状态不包含具有
计数器值的构造函数。因此,使用抽象类-0中的默认值。为了保持状态,您应该在所有状态中设置计数器值。以下是返工状态代码:

@immutable
abstract class CounterState {
  final int counter;
  
  CounterState({this.counter = 0});
}

class Counter extends CounterState {
  // you do not need the counter property here, it is defined in the base class    
    
  Counter({required int counter}) : super(counter: counter);
}

class CounterLoading extends CounterState {
  CounterLoading({required int counter}) : super(counter: counter);
}

class CounterLoaded extends CounterState {
  CounterLoaded({required int counter}) : super(counter: counter);
}
并相应地调整你的肘:

class CounterCubit extends Cubit<CounterState> {
  CounterCubit() : super(Counter(counter: 0));

  void increment() {
    print('before CounterLoading() ${state.counter}');
    emit(CounterLoading(counter: state.counter));
    print('after CounterLoading() ${state.counter}');

    Timer(Duration(seconds: 2), () {
      emit(CounterLoaded(counter: state.counter));
      print('enter code hereprevious  state ${state.counter}');
      emit(Counter(counter: state.counter + 1));
      print('next state ${state.counter}');
    });
  }
}
类计数器立方扩展立方{
计数器立方体():超级(计数器(计数器:0));
无效增量(){
打印('before counterload()${state.counter}');
emit(反加载(计数器:state.counter));
打印('after counterload()${state.counter}');
计时器(持续时间(秒数:2),(){
emit(计数器:state.counter));
打印('enter code here previous state${state.counter}');
发射(计数器(计数器:state.Counter+1));
打印('next state${state.counter}');
});
}
}

理解。但正如您所看到的,有很多代码重复,有没有最简单的方法?是否每次都需要对每个状态进行超级调用?我重构了状态代码以避免重复。如果您想要有单独的状态(加载、加载、计数器),这是一种方法。但是,从您想要实现的目标来看,只有一个计数器状态和计数器属性就足够了。如果in-state将有多个字段,大约10个字段,那么假设我应该为每个字段编写超级调用,以不释放当前状态?如果所有状态共享必须维护的相同属性(属性)-是,因为您需要调用
super()
来访问基本构造函数。
class CounterCubit extends Cubit<CounterState> {
  CounterCubit() : super(Counter(counter: 0));

  void increment() {
    print('before CounterLoading() ${state.counter}');
    emit(CounterLoading(counter: state.counter));
    print('after CounterLoading() ${state.counter}');

    Timer(Duration(seconds: 2), () {
      emit(CounterLoaded(counter: state.counter));
      print('enter code hereprevious  state ${state.counter}');
      emit(Counter(counter: state.counter + 1));
      print('next state ${state.counter}');
    });
  }
}