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.
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user