Ana Sayfa Sınav Partnerim Projeler Hakkımda Laboratuvar İletişim
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();
  }
}