Remove TaskStatus enum and related extensions, refactor BoardService and BoardResponse models for improved API integration, and update BoardViewModel to handle card movements between columns. Adjust UI components to reflect these changes and enhance error handling for card operations.

This commit is contained in:
AmirReza Jamali
2026-05-26 10:41:34 +03:30
parent 4b1260a437
commit 02057988dc
10 changed files with 542 additions and 1012 deletions
+39 -65
View File
@@ -1,5 +1,6 @@
import '../../../core/network/network_manager.dart';
import '../../core/config/app_config.dart';
import 'dart:convert';
import '../../core/network/network_manager.dart';
import '../../core/utils/result.dart';
import 'model/board_response/board_response.dart';
@@ -9,72 +10,45 @@ class BoardService {
final NetworkManager _networkManager;
static const _basePath = '/admin/v1/kanban/kanban';
Future<Result<BoardResponse>> getBoard() async {
final uri = '${AppConfig.apiBaseUrl}/api/v1/board';
await Future.delayed(const Duration(seconds: 2));
return _networkManager.makeRequest(
'$_basePath/boards/default',
(json) => BoardResponse.fromJson(json),
method: 'GET',
);
}
// final result = await _networkManager.makeRequest(
// uri,
// (json) => BoardResponse.fromJson(json),
// method: 'GET',
// );
// return result;
return Result.ok(
BoardResponse(
success: true,
message: 'Board data fetched successfully',
data: tasks,
error: null,
),
Future<Result<MoveCardResponse>> moveCard({
required String cardId,
required String columnId,
required int newOrder,
}) async {
final body = jsonEncode({
'card_id': cardId,
'column_id': columnId,
'new_order': newOrder,
});
return _networkManager.makeRequest(
'$_basePath/cards/move',
(json) => MoveCardResponse.fromJson(json),
method: 'PUT',
data: body,
);
}
}
List<BoardData> tasks = [
BoardData(
id: '1',
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
deadline: DateTime(2025, 6, 15),
assignedTo: 'Pratyush Tewari',
isReady: false,
status: 'toDo',
),
BoardData(
id: '2',
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
deadline: DateTime(2025, 6, 15),
assignedTo: 'Pratyush Tewari',
isReady: true,
status: 'toDo',
),
BoardData(
id: '3',
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
deadline: DateTime(2025, 6, 15),
assignedTo: 'Pratyush Tewari',
isReady: false,
status: 'inProgress',
),
BoardData(
id: '4',
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
deadline: DateTime(2025, 6, 15),
assignedTo: 'Pratyush Tewari',
isReady: true,
status: 'inProgress',
),
BoardData(
id: '5',
description:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua',
deadline: DateTime(2025, 6, 15),
assignedTo: 'Pratyush Tewari',
isReady: false,
status: 'done',
),
];
class MoveCardResponse {
MoveCardResponse({required this.success, required this.message});
final bool? success;
final String? message;
factory MoveCardResponse.fromJson(Map<String, dynamic> json) {
return MoveCardResponse(
success: json['success'] as bool?,
message: json['message'] as String?,
);
}
}