Here's my code:
abstract class VolumeEven{}
class VolumeUp extends VolumeEven{}
class VolumeDown extends VolumeEven{}
class VolumeMute extends VolumeEven{}
class VolumeBloc extends Bloc<VolumeEven, int> {
late SharedPreferences prefs;
VolumeBloc () : super (0) {
on<VolumeUp> (_onVolumeUp);
on<VolumeDown> (_onVolumeDown);
on<VolumeMute> (_onVolumeMute);
}
Future<int> _getPref() async {
// prefs = await SharedPreferences.getInstance();
return await prefs.getInt('volume') ?? 0;
}
FutureOr<void> _onVolumeUp(VolumeUp event, Emitter<int> emit) async {
prefs = await SharedPreferences.getInstance();
final newVolume = (prefs.getInt('volume') ?? 0) + 5;
emit(newVolume);
prefs.setInt('volume', newVolume);
}
FutureOr<void> _onVolumeDown(VolumeDown event, Emitter<int> emit) async {
prefs = await SharedPreferences.getInstance();
final newVolume = (prefs.getInt('volume') ?? 0) - 5;
emit(newVolume);
prefs.setInt('volume', newVolume);
}
FutureOr<void> _onVolumeMute(VolumeMute event, Emitter<int> emit) async {
prefs = await SharedPreferences.getInstance();
const newVolume = 0;
emit(newVolume);
prefs.setInt('volume', newVolume);
}
}
I can save 'volume' to sharedpreferences and get it when press volumeUp or volumeDown but when restart app the state become 0. It's because on Constructor it set 'super(0)'. How to get value from sharedpreferences in Constructor?
I found my answer: emit saved value in Constructor: