MOBİL MİMARİ & DART DÖKÜMÜ
Flutter Riverpod StateNotifier Mimarisi
Sınav Partnerim'de kullanılan Clean Architecture ve Riverpod tabanlı senkron çalışma oturumu durum yönetimi.
● RIVERPOD STATE: RUNNING
24:59
StateNotifier<PomodoroState>
Dart Kaynak Kodu
import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
enum SessionStatus { initial, running, paused, completed }
class PomodoroState {
final int remainingSeconds;
final SessionStatus status;
const PomodoroState({
required this.remainingSeconds,
required this.status,
});
factory PomodoroState.initial() => const PomodoroState(
remainingSeconds: 25 * 60,
status: SessionStatus.initial,
);
PomodoroState copyWith({int? remainingSeconds, SessionStatus? status}) {
return PomodoroState(
remainingSeconds: remainingSeconds ?? this.remainingSeconds,
status: status ?? this.status,
);
}
}
class PomodoroSessionNotifier extends StateNotifier {
Timer? _timer;
PomodoroSessionNotifier() : super(PomodoroState.initial());
void startSession() {
_timer?.cancel();
state = state.copyWith(status: SessionStatus.running);
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
if (state.remainingSeconds > 0) {
state = state.copyWith(remainingSeconds: state.remainingSeconds - 1);
} else {
timer.cancel();
state = state.copyWith(status: SessionStatus.completed);
}
});
}
void pauseSession() {
_timer?.cancel();
state = state.copyWith(status: SessionStatus.paused);
}
void resetSession() {
_timer?.cancel();
state = PomodoroState.initial();
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
}