Files
tm_app/lib/view_models/board_view_model.dart
T
amirrezaghabeli abf1cc3f7d Add board service and repository, update routes and assets
- Introduced BoardService and BoardRepository for managing board-related data.
- Updated app routes to reflect the new board screen structure.
- Added new board-related assets to the asset manager.
- Refactored BoardScreen navigation to utilize the new provider structure.
2025-11-11 12:58:05 +03:30

78 lines
2.3 KiB
Dart

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> _boardData = [];
bool get isLoading => _isLoading;
String? get errorMessage => _errorMessage;
List<BoardData> get boardData => _boardData;
bool get hasData => _boardData.isNotEmpty;
Future<void> getBoard() async {
_isLoading = true;
notifyListeners();
final result = await _boardRepository.getBoard();
switch (result) {
case Ok<BoardResponse>():
// تبدیل به لیست قابل تغییر
_boardData = List.from(result.value.data ?? []);
break;
case Error<BoardResponse>():
_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<BoardData> 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);
}
}