import 'package:flutter/material.dart'; import '../core/enums/task_status.dart'; import '../core/utils/result.dart'; import '../data/repositories/board_repositories.dart'; import '../data/services/model/board_response/board_response.dart'; class BoardViewModel with ChangeNotifier { final BoardRepository _boardRepository; BoardViewModel({required BoardRepository boardRepository}) : _boardRepository = boardRepository; bool _isLoading = false; String? _errorMessage; List _boardData = []; bool get isLoading => _isLoading; String? get errorMessage => _errorMessage; List get boardData => _boardData; bool get hasData => _boardData.isNotEmpty; Future getBoard() async { _isLoading = true; notifyListeners(); final result = await _boardRepository.getBoard(); switch (result) { case Ok(): // تبدیل به لیست قابل تغییر _boardData = List.from(result.value.data ?? []); break; case Error(): _errorMessage = result.error.toString(); break; } _isLoading = false; notifyListeners(); } // update task status void updateTaskStatus(String taskId, String newStatus) { final taskIndex = _boardData.indexWhere((task) => task.id == taskId); if (taskIndex != -1) { _boardData[taskIndex] = _boardData[taskIndex].copyWith(status: newStatus); notifyListeners(); } } bool isValidMove(TaskStatus currentStatus, TaskStatus targetStatus) { if (currentStatus == TaskStatus.toDo) { return targetStatus == TaskStatus.inProgress; } else if (currentStatus == TaskStatus.inProgress) { return targetStatus == TaskStatus.toDo || targetStatus == TaskStatus.done; } else if (currentStatus == TaskStatus.done) { return targetStatus == TaskStatus.inProgress; } return false; } List getTasksByStatus(TaskStatus status) { return boardData.where((task) => task.status == status.value).toList(); } void _updateTaskStatus(BoardData task, TaskStatus newStatus) { if (task.status == newStatus.value) { return; } final oldStatus = task.status; // update task status in ViewModel updateTaskStatus(task.id!, newStatus.value); // _showStatusChangeMessage(context, task, oldStatus, newStatus); } }