abf1cc3f7d
- 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.
78 lines
2.3 KiB
Dart
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);
|
|
}
|
|
}
|