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:
amirrezaghabeli
2025-11-11 12:58:05 +03:30
parent a03e66f66b
commit abf1cc3f7d
14 changed files with 1092 additions and 166 deletions
+10
View File
@@ -19,8 +19,10 @@ import 'package:tm_app/data/services/your_tenders_service.dart';
import 'package:tm_app/view_models/final_completion_of_documents_view_model.dart';
import '../../data/repositories/auth_repository.dart';
import '../../data/repositories/board_repositories.dart';
import '../../data/repositories/profile_repository.dart';
import '../../data/services/auth_service.dart';
import '../../data/services/board_service.dart';
import '../../data/services/profile_service.dart';
import '../../data/services/tenders_service.dart';
import '../../view_models/auth_view_model.dart';
@@ -86,6 +88,10 @@ List<SingleChildWidget> get apiClients {
create: (context) => NotificationsService(networkManager: context.read()),
lazy: true,
),
Provider(
create: (context) => BoardService(networkManager: context.read()),
lazy: true,
),
];
}
@@ -137,6 +143,10 @@ List<SingleChildWidget> get repositories {
NotificationsRepository(notificationsService: context.read()),
lazy: true,
),
Provider(
create: (context) => BoardRepository(boardService: context.read()),
lazy: true,
),
];
}
+29
View File
@@ -0,0 +1,29 @@
enum TaskStatus { toDo, inProgress, done }
extension TaskStatusExtension on TaskStatus {
// تبدیل enum به string
String get value => name;
// تبدیل string به enum
static TaskStatus fromString(String? status) {
if (status == null) {
return TaskStatus.toDo;
}
return TaskStatus.values.firstWhere(
(e) => e.name == status,
orElse: () => TaskStatus.toDo,
);
}
String get displayNameEn {
switch (this) {
case TaskStatus.toDo:
return 'To Do';
case TaskStatus.inProgress:
return 'In Progress';
case TaskStatus.done:
return 'Done';
}
}
}
@@ -0,0 +1,12 @@
import '../../data/services/model/board_response/board_response.dart';
import '../enums/task_status.dart';
extension BoardDataExtension on BoardData {
// تبدیل status string به TaskStatus enum
TaskStatus get statusEnum => TaskStatusExtension.fromString(status);
// کپی BoardData با status جدید
BoardData copyWithStatus(TaskStatus newStatus) {
return copyWith(status: newStatus.value);
}
}
+16
View File
@@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../data/repositories/board_repositories.dart';
import '../../view_models/board_view_model.dart';
/// Lazy BoardViewModel provider
/// Wraps screens that need BoardViewModel
Widget boardProvider({required Widget child}) {
return ChangeNotifierProvider(
create:
(context) =>
BoardViewModel(boardRepository: context.read<BoardRepository>()),
child: child,
);
}
+3 -2
View File
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tm_app/views/board/board_screen.dart';
import 'package:tm_app/views/board/pages/board_screen.dart';
import 'package:tm_app/views/completion_of_documents/pages/complectopn_of_documents_screen.dart';
import 'package:tm_app/views/detail/pages/detail_screen.dart';
import 'package:tm_app/views/forget_password_create/pages/forgot_password_create_screen.dart';
@@ -18,6 +18,7 @@ import '../../views/profile/pages/profile_screen.dart';
import '../../views/splash/pages/splash_screen.dart';
import '../../views/tenders/pages/tenders_screen.dart';
import '../../views/your_tenders/pages/your_tenders_screen.dart';
import '../providers/board_provider.dart';
import '../providers/final_completion_provider.dart';
import '../providers/forgot_password_provider.dart';
import '../providers/home_provider.dart';
@@ -272,7 +273,7 @@ class BoardRouteData extends GoRouteData with _$BoardRouteData {
@override
Widget build(BuildContext context, GoRouterState state) {
return const BoardScreen();
return boardProvider(child: const BoardScreen());
}
}