我正在学习flutter_bloc
,并在https://bloclibrary.dev/#/fluttertimertutorial?id=flutter-timer-tutorial上做了计时器示例
然而,计时器总是重置为60秒,所以我想能够设置一个自定义的初始持续时间。
我的方法:
- 将字段
initialDuration
添加到TimerState和所有子类构造函数 - 将
TimerNewDuration
事件添加到timer_event.dart - 更新timer_bloc.dart以在每个状态处理程序中使用以下
emit
行处理此问题:
constructor: super(TimerInitial(_defaultDuration)) # i.e. 60 seconds
_onNewDuration: emit(TimerInitial(event.duration))
_onStarted: emit(TimerRunInProgress(event.duration, state.initialDuration))
_onReset: emit(TimerInitial(state.initialDuration))
_onPaused: emit(TimerRunPause(state.duration, state.initialDuration))
_onTicked: emit(event.duration > 0
? TimerRunInProgress(event.duration, state.initialDuration)
: TimerRunComplete(state.initialDuration));
字符串
.等等。然而,这有点麻烦:计时器状态和初始持续时间并不真正相关(除了更新初始持续时间应该重置计时器),所以我必须通过BLoC中的每个事件处理程序传递这个值。
如果添加更多的状态值,这显然会变得非常混乱。
有没有更习惯的方法来处理这种情况?任何github的例子将不胜感激。
1条答案
按热度按时间jv2fixgn1#
你可以在copyWith(...)方法中使用一个状态:
字符串
那么你的代码应该是这样的:
型
p.s. TimerState可以被密封,对于状态complete可以使用状态:
型