From d744c37ccdf1c39f278acee41ceadb0ece92bc26 Mon Sep 17 00:00:00 2001 From: AmirrezaChegini Date: Wed, 12 Nov 2025 10:14:05 +0330 Subject: [PATCH 1/2] fix: imports and directory feature --- lib/core/routers/my_routes.dart | 10 +++++----- .../data/datasource/battle_league_datasource.dart | 4 ++-- .../data/model/battle_league_model.dart | 2 +- .../repository_impl/battle_league_repository_impl.dart | 6 +++--- .../domain/entity/battle_league_entity.dart | 0 .../domain/repository/battle_league_repository.dart | 2 +- .../domain/usecases/get_battle_league_usecase.dart | 4 ++-- .../presentation/binding/battle_league_binding.dart | 2 +- .../controller/battle_league_controller.dart | 4 ++-- .../presentation/ui/battle_league_finding_page.dart | 6 +++--- .../presentation/ui/battle_league_founded_page.dart | 6 +++--- .../presentation/ui/battle_league_page.dart | 10 +++++----- .../presentation/ui/battle_league_topic_page.dart | 8 ++++---- .../ui/widgets/button/battle_golden_button.dart | 0 .../ui/widgets/button/battle_grey_button.dart | 0 .../ui/widgets/button/battle_purple_button.dart | 0 .../ui/widgets/founded_page/founded_avatar.dart | 0 .../ui/widgets/main_page/battle_league_tab_bar.dart | 0 .../ui/widgets/main_page/filter_ranking_button.dart | 0 .../ui/widgets/main_page/my_ranking_widget.dart | 0 .../ui/widgets/main_page/ranking_region.dart | 0 .../ui/widgets/main_page/ranking_scrollbar.dart | 0 .../ui/widgets/main_page/ranking_time.dart | 0 .../ui/widgets/main_page/ranking_widget.dart | 0 .../ui/widgets/main_page/regional_ranking.dart | 10 +++++----- .../ui/widgets/main_page/time_ranking.dart | 10 +++++----- .../presentation/ui/widgets/rank_title.dart | 0 .../ui/widgets/topic_page/topic_widget.dart | 0 lib/init_bindings.dart | 8 ++++---- 29 files changed, 46 insertions(+), 46 deletions(-) rename lib/features/battle_league/{ => first_part}/data/datasource/battle_league_datasource.dart (79%) rename lib/features/battle_league/{ => first_part}/data/model/battle_league_model.dart (68%) rename lib/features/battle_league/{ => first_part}/data/repository_impl/battle_league_repository_impl.dart (72%) rename lib/features/battle_league/{ => first_part}/domain/entity/battle_league_entity.dart (100%) rename lib/features/battle_league/{ => first_part}/domain/repository/battle_league_repository.dart (75%) rename lib/features/battle_league/{ => first_part}/domain/usecases/get_battle_league_usecase.dart (72%) rename lib/features/battle_league/{ => first_part}/presentation/binding/battle_league_binding.dart (76%) rename lib/features/battle_league/{ => first_part}/presentation/controller/battle_league_controller.dart (89%) rename lib/features/battle_league/{ => first_part}/presentation/ui/battle_league_finding_page.dart (86%) rename lib/features/battle_league/{ => first_part}/presentation/ui/battle_league_founded_page.dart (82%) rename lib/features/battle_league/{ => first_part}/presentation/ui/battle_league_page.dart (78%) rename lib/features/battle_league/{ => first_part}/presentation/ui/battle_league_topic_page.dart (86%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/button/battle_golden_button.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/button/battle_grey_button.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/button/battle_purple_button.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/founded_page/founded_avatar.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/battle_league_tab_bar.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/filter_ranking_button.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/my_ranking_widget.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/ranking_region.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/ranking_scrollbar.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/ranking_time.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/ranking_widget.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/regional_ranking.dart (78%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/main_page/time_ranking.dart (79%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/rank_title.dart (100%) rename lib/features/battle_league/{ => first_part}/presentation/ui/widgets/topic_page/topic_widget.dart (100%) diff --git a/lib/core/routers/my_routes.dart b/lib/core/routers/my_routes.dart index 3116ea5..76ac69b 100644 --- a/lib/core/routers/my_routes.dart +++ b/lib/core/routers/my_routes.dart @@ -1,7 +1,10 @@ import 'package:shia_game_flutter/features/awards/presentation/binding/awards_binding.dart'; import 'package:shia_game_flutter/features/awards/presentation/ui/awards_page.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/battle_league_finding_page.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/battle_league_founded_page.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/binding/battle_league_binding.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_finding_page.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_founded_page.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_page.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_topic_page.dart'; import 'package:shia_game_flutter/features/home/presentation/binding/home_binding.dart'; import 'package:shia_game_flutter/features/home/presentation/pages/home_page.dart'; import 'package:shia_game_flutter/features/intro/presentation/binding/intro_binding.dart'; @@ -12,12 +15,9 @@ import 'package:shia_game_flutter/features/profile/presentation/binding/profile_ import 'package:shia_game_flutter/features/profile/presentation/ui/profile_page.dart'; import 'package:shia_game_flutter/features/sample/presentation/binding/sample_binding.dart'; import 'package:shia_game_flutter/features/sample/presentation/ui/sample_page.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/binding/battle_league_binding.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/battle_league_page.dart'; import 'package:get/get.dart'; import 'package:shia_game_flutter/features/shop/presentation/binding/shop_binding.dart'; import 'package:shia_game_flutter/features/shop/presentation/ui/shop_page.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/battle_league_topic_page.dart'; class Routes { static const Routes _i = Routes._internal(); diff --git a/lib/features/battle_league/data/datasource/battle_league_datasource.dart b/lib/features/battle_league/first_part/data/datasource/battle_league_datasource.dart similarity index 79% rename from lib/features/battle_league/data/datasource/battle_league_datasource.dart rename to lib/features/battle_league/first_part/data/datasource/battle_league_datasource.dart index dce5a9c..3e47fc6 100644 --- a/lib/features/battle_league/data/datasource/battle_league_datasource.dart +++ b/lib/features/battle_league/first_part/data/datasource/battle_league_datasource.dart @@ -2,8 +2,8 @@ import 'package:shia_game_flutter/core/constants/my_api.dart'; import 'package:shia_game_flutter/core/network/http_request.dart'; import 'package:shia_game_flutter/core/params/sample_params.dart'; import 'package:shia_game_flutter/core/response/base_response.dart'; -import 'package:shia_game_flutter/features/battle_league/data/model/battle_league_model.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/entity/battle_league_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/data/model/battle_league_model.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/entity/battle_league_entity.dart'; abstract class IBattleLeagueDatasource { Future getData({required SampleParams params}); diff --git a/lib/features/battle_league/data/model/battle_league_model.dart b/lib/features/battle_league/first_part/data/model/battle_league_model.dart similarity index 68% rename from lib/features/battle_league/data/model/battle_league_model.dart rename to lib/features/battle_league/first_part/data/model/battle_league_model.dart index ad9329c..a0dc921 100644 --- a/lib/features/battle_league/data/model/battle_league_model.dart +++ b/lib/features/battle_league/first_part/data/model/battle_league_model.dart @@ -1,4 +1,4 @@ -import 'package:shia_game_flutter/features/battle_league/domain/entity/battle_league_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/entity/battle_league_entity.dart'; class BattleLeagueModel extends BattleLeagueEntity { const BattleLeagueModel({ diff --git a/lib/features/battle_league/data/repository_impl/battle_league_repository_impl.dart b/lib/features/battle_league/first_part/data/repository_impl/battle_league_repository_impl.dart similarity index 72% rename from lib/features/battle_league/data/repository_impl/battle_league_repository_impl.dart rename to lib/features/battle_league/first_part/data/repository_impl/battle_league_repository_impl.dart index 20d6668..36d681f 100644 --- a/lib/features/battle_league/data/repository_impl/battle_league_repository_impl.dart +++ b/lib/features/battle_league/first_part/data/repository_impl/battle_league_repository_impl.dart @@ -2,9 +2,9 @@ import 'package:flutter/foundation.dart'; import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; import 'package:shia_game_flutter/core/params/sample_params.dart'; import 'package:shia_game_flutter/core/utils/data_state.dart'; -import 'package:shia_game_flutter/features/battle_league/data/datasource/battle_league_datasource.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/entity/battle_league_entity.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/repository/battle_league_repository.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/data/datasource/battle_league_datasource.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/entity/battle_league_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/repository/battle_league_repository.dart'; class BattleLeagueRepositoryImpl implements IBattleLeagueRepository { final IBattleLeagueDatasource datasource; diff --git a/lib/features/battle_league/domain/entity/battle_league_entity.dart b/lib/features/battle_league/first_part/domain/entity/battle_league_entity.dart similarity index 100% rename from lib/features/battle_league/domain/entity/battle_league_entity.dart rename to lib/features/battle_league/first_part/domain/entity/battle_league_entity.dart diff --git a/lib/features/battle_league/domain/repository/battle_league_repository.dart b/lib/features/battle_league/first_part/domain/repository/battle_league_repository.dart similarity index 75% rename from lib/features/battle_league/domain/repository/battle_league_repository.dart rename to lib/features/battle_league/first_part/domain/repository/battle_league_repository.dart index 9d7cc47..6fde6dd 100644 --- a/lib/features/battle_league/domain/repository/battle_league_repository.dart +++ b/lib/features/battle_league/first_part/domain/repository/battle_league_repository.dart @@ -1,7 +1,7 @@ import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; import 'package:shia_game_flutter/core/params/sample_params.dart'; import 'package:shia_game_flutter/core/utils/data_state.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/entity/battle_league_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/entity/battle_league_entity.dart'; abstract class IBattleLeagueRepository { Future> getData({required SampleParams params}); diff --git a/lib/features/battle_league/domain/usecases/get_battle_league_usecase.dart b/lib/features/battle_league/first_part/domain/usecases/get_battle_league_usecase.dart similarity index 72% rename from lib/features/battle_league/domain/usecases/get_battle_league_usecase.dart rename to lib/features/battle_league/first_part/domain/usecases/get_battle_league_usecase.dart index f69f6e7..0c201a7 100644 --- a/lib/features/battle_league/domain/usecases/get_battle_league_usecase.dart +++ b/lib/features/battle_league/first_part/domain/usecases/get_battle_league_usecase.dart @@ -2,8 +2,8 @@ import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; import 'package:shia_game_flutter/core/params/sample_params.dart'; import 'package:shia_game_flutter/core/usecase/usecase.dart'; import 'package:shia_game_flutter/core/utils/data_state.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/entity/battle_league_entity.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/repository/battle_league_repository.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/entity/battle_league_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/repository/battle_league_repository.dart'; class GetBattleLeagueUseCase implements UseCase { final IBattleLeagueRepository repository; diff --git a/lib/features/battle_league/presentation/binding/battle_league_binding.dart b/lib/features/battle_league/first_part/presentation/binding/battle_league_binding.dart similarity index 76% rename from lib/features/battle_league/presentation/binding/battle_league_binding.dart rename to lib/features/battle_league/first_part/presentation/binding/battle_league_binding.dart index 7ab12a7..c836af8 100644 --- a/lib/features/battle_league/presentation/binding/battle_league_binding.dart +++ b/lib/features/battle_league/first_part/presentation/binding/battle_league_binding.dart @@ -1,4 +1,4 @@ -import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/controller/battle_league_controller.dart'; import 'package:get/get.dart'; class BattleLeagueBinding extends Bindings { diff --git a/lib/features/battle_league/presentation/controller/battle_league_controller.dart b/lib/features/battle_league/first_part/presentation/controller/battle_league_controller.dart similarity index 89% rename from lib/features/battle_league/presentation/controller/battle_league_controller.dart rename to lib/features/battle_league/first_part/presentation/controller/battle_league_controller.dart index fd49a0f..20a645b 100644 --- a/lib/features/battle_league/presentation/controller/battle_league_controller.dart +++ b/lib/features/battle_league/first_part/presentation/controller/battle_league_controller.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:shia_game_flutter/core/params/sample_params.dart'; import 'package:shia_game_flutter/core/routers/my_routes.dart'; import 'package:shia_game_flutter/core/status/base_status.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/entity/battle_league_entity.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/usecases/get_battle_league_usecase.dart'; import 'package:get/get.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/entity/battle_league_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/usecases/get_battle_league_usecase.dart'; class BattleLeagueController extends GetxController with StateMixin, GetSingleTickerProviderStateMixin { diff --git a/lib/features/battle_league/presentation/ui/battle_league_finding_page.dart b/lib/features/battle_league/first_part/presentation/ui/battle_league_finding_page.dart similarity index 86% rename from lib/features/battle_league/presentation/ui/battle_league_finding_page.dart rename to lib/features/battle_league/first_part/presentation/ui/battle_league_finding_page.dart index 47fbe38..3e61da9 100644 --- a/lib/features/battle_league/presentation/ui/battle_league_finding_page.dart +++ b/lib/features/battle_league/first_part/presentation/ui/battle_league_finding_page.dart @@ -7,9 +7,9 @@ import 'package:shia_game_flutter/core/utils/gap.dart'; import 'package:shia_game_flutter/core/utils/my_localization.dart'; import 'package:shia_game_flutter/core/utils/screen_size.dart'; import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/button/battle_purple_button.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/rank_title.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/controller/battle_league_controller.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/button/battle_purple_button.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/rank_title.dart'; class BattleLeagueFindingPage extends GetView { const BattleLeagueFindingPage({super.key}); diff --git a/lib/features/battle_league/presentation/ui/battle_league_founded_page.dart b/lib/features/battle_league/first_part/presentation/ui/battle_league_founded_page.dart similarity index 82% rename from lib/features/battle_league/presentation/ui/battle_league_founded_page.dart rename to lib/features/battle_league/first_part/presentation/ui/battle_league_founded_page.dart index c809007..5a9f4fa 100644 --- a/lib/features/battle_league/presentation/ui/battle_league_founded_page.dart +++ b/lib/features/battle_league/first_part/presentation/ui/battle_league_founded_page.dart @@ -6,9 +6,9 @@ import 'package:shia_game_flutter/core/utils/gap.dart'; import 'package:shia_game_flutter/core/utils/screen_size.dart'; import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; import 'package:shia_game_flutter/core/widgets/loading/my_linear_loading.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/founded_page/founded_avatar.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/rank_title.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/controller/battle_league_controller.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/founded_page/founded_avatar.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/rank_title.dart'; class BattleLeagueFoundedPage extends GetView { const BattleLeagueFoundedPage({super.key}); diff --git a/lib/features/battle_league/presentation/ui/battle_league_page.dart b/lib/features/battle_league/first_part/presentation/ui/battle_league_page.dart similarity index 78% rename from lib/features/battle_league/presentation/ui/battle_league_page.dart rename to lib/features/battle_league/first_part/presentation/ui/battle_league_page.dart index caa64f2..a409cdc 100644 --- a/lib/features/battle_league/presentation/ui/battle_league_page.dart +++ b/lib/features/battle_league/first_part/presentation/ui/battle_league_page.dart @@ -6,11 +6,11 @@ import 'package:shia_game_flutter/core/utils/my_localization.dart'; import 'package:shia_game_flutter/core/utils/screen_size.dart'; import 'package:shia_game_flutter/core/widgets/app_bar/enums/app_bar_type.dart'; import 'package:shia_game_flutter/core/widgets/app_bar/my_app_bar.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/battle_league_tab_bar.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/regional_ranking.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/time_ranking.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/controller/battle_league_controller.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/button/battle_golden_button.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/battle_league_tab_bar.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/regional_ranking.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/time_ranking.dart'; class BattleLeaguePage extends GetView { const BattleLeaguePage({super.key}); diff --git a/lib/features/battle_league/presentation/ui/battle_league_topic_page.dart b/lib/features/battle_league/first_part/presentation/ui/battle_league_topic_page.dart similarity index 86% rename from lib/features/battle_league/presentation/ui/battle_league_topic_page.dart rename to lib/features/battle_league/first_part/presentation/ui/battle_league_topic_page.dart index cb76ea9..755ed82 100644 --- a/lib/features/battle_league/presentation/ui/battle_league_topic_page.dart +++ b/lib/features/battle_league/first_part/presentation/ui/battle_league_topic_page.dart @@ -8,10 +8,10 @@ import 'package:shia_game_flutter/core/utils/my_localization.dart'; import 'package:shia_game_flutter/core/utils/screen_size.dart'; import 'package:shia_game_flutter/core/widgets/app_bar/enums/app_bar_type.dart'; import 'package:shia_game_flutter/core/widgets/app_bar/my_app_bar.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/button/battle_grey_button.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/topic_page/topic_widget.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/controller/battle_league_controller.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/button/battle_golden_button.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/button/battle_grey_button.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/topic_page/topic_widget.dart'; class BattleLeagueTopicPage extends GetView { const BattleLeagueTopicPage({super.key}); diff --git a/lib/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/button/battle_golden_button.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/button/battle_golden_button.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/button/battle_grey_button.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/button/battle_grey_button.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/button/battle_grey_button.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/button/battle_grey_button.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/button/battle_purple_button.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/button/battle_purple_button.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/button/battle_purple_button.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/button/battle_purple_button.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/founded_page/founded_avatar.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/founded_page/founded_avatar.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/founded_page/founded_avatar.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/founded_page/founded_avatar.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/battle_league_tab_bar.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/battle_league_tab_bar.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/main_page/battle_league_tab_bar.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/battle_league_tab_bar.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/filter_ranking_button.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/filter_ranking_button.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/main_page/filter_ranking_button.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/filter_ranking_button.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/my_ranking_widget.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/my_ranking_widget.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/main_page/my_ranking_widget.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/my_ranking_widget.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/ranking_region.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_region.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/main_page/ranking_region.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_region.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/ranking_scrollbar.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_scrollbar.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/main_page/ranking_scrollbar.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_scrollbar.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/ranking_time.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_time.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/main_page/ranking_time.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_time.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/ranking_widget.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_widget.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/main_page/ranking_widget.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_widget.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/regional_ranking.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/regional_ranking.dart similarity index 78% rename from lib/features/battle_league/presentation/ui/widgets/main_page/regional_ranking.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/regional_ranking.dart index 39b9954..59be5a7 100644 --- a/lib/features/battle_league/presentation/ui/widgets/main_page/regional_ranking.dart +++ b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/regional_ranking.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:shia_game_flutter/core/utils/gap.dart'; import 'package:shia_game_flutter/core/utils/my_localization.dart'; import 'package:shia_game_flutter/core/utils/screen_size.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/filter_ranking_button.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/my_ranking_widget.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_region.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_scrollbar.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_widget.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/filter_ranking_button.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/my_ranking_widget.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_region.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_scrollbar.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_widget.dart'; class RegionalRanking extends StatefulWidget { const RegionalRanking({super.key}); diff --git a/lib/features/battle_league/presentation/ui/widgets/main_page/time_ranking.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/time_ranking.dart similarity index 79% rename from lib/features/battle_league/presentation/ui/widgets/main_page/time_ranking.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/main_page/time_ranking.dart index fae3447..2bd1995 100644 --- a/lib/features/battle_league/presentation/ui/widgets/main_page/time_ranking.dart +++ b/lib/features/battle_league/first_part/presentation/ui/widgets/main_page/time_ranking.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:shia_game_flutter/core/utils/gap.dart'; import 'package:shia_game_flutter/core/utils/my_localization.dart'; import 'package:shia_game_flutter/core/utils/screen_size.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/filter_ranking_button.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/my_ranking_widget.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_scrollbar.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_widget.dart'; -import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_time.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/filter_ranking_button.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/my_ranking_widget.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_scrollbar.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_time.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/widgets/main_page/ranking_widget.dart'; class TimeRanking extends StatefulWidget { const TimeRanking({super.key}); diff --git a/lib/features/battle_league/presentation/ui/widgets/rank_title.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/rank_title.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/rank_title.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/rank_title.dart diff --git a/lib/features/battle_league/presentation/ui/widgets/topic_page/topic_widget.dart b/lib/features/battle_league/first_part/presentation/ui/widgets/topic_page/topic_widget.dart similarity index 100% rename from lib/features/battle_league/presentation/ui/widgets/topic_page/topic_widget.dart rename to lib/features/battle_league/first_part/presentation/ui/widgets/topic_page/topic_widget.dart diff --git a/lib/init_bindings.dart b/lib/init_bindings.dart index fc3a664..fc1df7e 100644 --- a/lib/init_bindings.dart +++ b/lib/init_bindings.dart @@ -5,6 +5,10 @@ import 'package:shia_game_flutter/features/awards/data/datasource/awards_datasou import 'package:shia_game_flutter/features/awards/data/repository_impl/awards_repository_impl.dart'; import 'package:shia_game_flutter/features/awards/domain/repository/awards_repository.dart'; import 'package:shia_game_flutter/features/awards/domain/usecases/get_awards_usecase.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/data/datasource/battle_league_datasource.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/data/repository_impl/battle_league_repository_impl.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/repository/battle_league_repository.dart'; +import 'package:shia_game_flutter/features/battle_league/first_part/domain/usecases/get_battle_league_usecase.dart'; import 'package:shia_game_flutter/features/home/data/datasource/home_datasource.dart'; import 'package:shia_game_flutter/features/home/data/repository_impl/home_repository_impl.dart'; import 'package:shia_game_flutter/features/home/domain/repository/home_repository.dart'; @@ -25,10 +29,6 @@ import 'package:shia_game_flutter/features/sample/data/datasource/sample_datasou import 'package:shia_game_flutter/features/sample/data/repository_impl/sample_repository_impl.dart'; import 'package:shia_game_flutter/features/sample/domain/repository/sample_repository.dart'; import 'package:shia_game_flutter/features/sample/domain/usecases/get_sample_usecase.dart'; -import 'package:shia_game_flutter/features/battle_league/data/datasource/battle_league_datasource.dart'; -import 'package:shia_game_flutter/features/battle_league/data/repository_impl/battle_league_repository_impl.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/repository/battle_league_repository.dart'; -import 'package:shia_game_flutter/features/battle_league/domain/usecases/get_battle_league_usecase.dart'; import 'package:shia_game_flutter/features/shop/data/datasource/shop_datasource.dart'; import 'package:shia_game_flutter/features/shop/data/repository_impl/shop_repository_impl.dart'; import 'package:shia_game_flutter/features/shop/domain/repository/shop_repository.dart'; -- 2.30.2 From 7e3e6e54cf40f313dd8d0b202bd48bd123b90e41 Mon Sep 17 00:00:00 2001 From: AmirrezaChegini Date: Wed, 12 Nov 2025 13:16:09 +0330 Subject: [PATCH 2/2] add: question page --- assets/svg/close.svg | 4 ++ assets/svg/done.svg | 3 ++ assets/svg/polygon.svg | 3 ++ assets/svg/timer.svg | 38 +++++++++++++ lib/common_ui/resources/my_assets.dart | 4 ++ lib/core/params/bl_question_params.dart | 13 +++++ lib/core/routers/my_routes.dart | 8 +++ lib/core/widgets/stepper/my_stepper.dart | 41 ++++++++++++++ .../stepper/styles/my_step_correct_item.dart | 27 ++++++++++ .../stepper/styles/my_step_current_item.dart | 34 ++++++++++++ .../stepper/styles/my_step_default_item.dart | 17 ++++++ .../stepper/styles/my_step_wrong_item.dart | 27 ++++++++++ lib/core/widgets/text/gradient_text.dart | 10 ++-- .../datasource/bl_question_datasource.dart | 28 ++++++++++ .../data/model/bl_question_model.dart | 13 +++++ .../bl_question_repository_impl.dart | 29 ++++++++++ .../domain/entity/bl_question_entity.dart | 14 +++++ .../repository/bl_question_repository.dart | 8 +++ .../usecases/get_bl_question_usecase.dart | 19 +++++++ .../binding/bl_question_binding.dart | 20 +++++++ .../controller/bl_question_controller.dart | 54 +++++++++++++++++++ .../presentation/ui/bl_question_page.dart | 34 ++++++++++++ .../battle_league_question_avatar.dart | 42 +++++++++++++++ .../ui/widgets/question_board.dart | 34 ++++++++++++ .../widgets/question_timer_ready_widget.dart | 43 +++++++++++++++ lib/init_bindings.dart | 9 ++++ lib/main.dart | 2 +- 27 files changed, 574 insertions(+), 4 deletions(-) create mode 100644 assets/svg/close.svg create mode 100644 assets/svg/done.svg create mode 100644 assets/svg/polygon.svg create mode 100644 assets/svg/timer.svg create mode 100644 lib/core/params/bl_question_params.dart create mode 100644 lib/core/widgets/stepper/my_stepper.dart create mode 100644 lib/core/widgets/stepper/styles/my_step_correct_item.dart create mode 100644 lib/core/widgets/stepper/styles/my_step_current_item.dart create mode 100644 lib/core/widgets/stepper/styles/my_step_default_item.dart create mode 100644 lib/core/widgets/stepper/styles/my_step_wrong_item.dart create mode 100644 lib/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart create mode 100644 lib/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart create mode 100644 lib/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart create mode 100644 lib/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart create mode 100644 lib/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart create mode 100644 lib/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart create mode 100644 lib/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart create mode 100644 lib/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart create mode 100644 lib/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart create mode 100644 lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart create mode 100644 lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart create mode 100644 lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart diff --git a/assets/svg/close.svg b/assets/svg/close.svg new file mode 100644 index 0000000..6d8fa28 --- /dev/null +++ b/assets/svg/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/done.svg b/assets/svg/done.svg new file mode 100644 index 0000000..dcf1527 --- /dev/null +++ b/assets/svg/done.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/polygon.svg b/assets/svg/polygon.svg new file mode 100644 index 0000000..a5ad9f3 --- /dev/null +++ b/assets/svg/polygon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/timer.svg b/assets/svg/timer.svg new file mode 100644 index 0000000..2c3297d --- /dev/null +++ b/assets/svg/timer.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/common_ui/resources/my_assets.dart b/lib/common_ui/resources/my_assets.dart index 7e76912..5bd452a 100644 --- a/lib/common_ui/resources/my_assets.dart +++ b/lib/common_ui/resources/my_assets.dart @@ -70,6 +70,10 @@ class MyAssets { static const String iconRandom = 'assets/svg/icon_random.svg'; static const String magnifier = 'assets/svg/magnifier.svg'; static const String iconIran = 'assets/svg/icon_iran.svg'; + static const String polygon = 'assets/svg/polygon.svg'; + static const String close = 'assets/svg/close.svg'; + static const String doneWhite = 'assets/svg/done.svg'; + static const String timer = 'assets/svg/timer.svg'; /// ----- Audios ----- static const String sampleAudio = 'assets/audios/sample.mp3'; diff --git a/lib/core/params/bl_question_params.dart b/lib/core/params/bl_question_params.dart new file mode 100644 index 0000000..aea905b --- /dev/null +++ b/lib/core/params/bl_question_params.dart @@ -0,0 +1,13 @@ +class BLQuestionParams { + int? id; + + BLQuestionParams({this.id}); + + BLQuestionParams copyWith({ + int? id, + }) { + return BLQuestionParams( + id: id ?? this.id, + ); + } +} diff --git a/lib/core/routers/my_routes.dart b/lib/core/routers/my_routes.dart index 76ac69b..e3dfcf1 100644 --- a/lib/core/routers/my_routes.dart +++ b/lib/core/routers/my_routes.dart @@ -5,6 +5,8 @@ import 'package:shia_game_flutter/features/battle_league/first_part/presentation import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_founded_page.dart'; import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_page.dart'; import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_topic_page.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart'; import 'package:shia_game_flutter/features/home/presentation/binding/home_binding.dart'; import 'package:shia_game_flutter/features/home/presentation/pages/home_page.dart'; import 'package:shia_game_flutter/features/intro/presentation/binding/intro_binding.dart'; @@ -37,6 +39,7 @@ class Routes { static const String battleLeagueTopicPage = '/battle_league_topic_page'; static const String battleLeagueFindingPage = '/battle_league_finding_page'; static const String battleLeagueFoundedPage = '/battle_league_founded_page'; + static const String battleLeagueQuestionPage = '/battle_league_question_page'; } final List appPages = [ @@ -97,4 +100,9 @@ final List appPages = [ page: () => const BattleLeagueFoundedPage(), binding: BattleLeagueBinding(), ), + GetPage( + name: Routes.battleLeagueQuestionPage, + page: () => const BLQuestionPage(), + binding: BLQuestionBinding(), + ), ]; diff --git a/lib/core/widgets/stepper/my_stepper.dart b/lib/core/widgets/stepper/my_stepper.dart new file mode 100644 index 0000000..7564628 --- /dev/null +++ b/lib/core/widgets/stepper/my_stepper.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/core/utils/screen_size.dart'; +import 'package:shia_game_flutter/core/widgets/stepper/styles/my_step_default_item.dart'; + +class MyStepper extends StatelessWidget { + const MyStepper({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + height: 30.h, + width: context.widthScreen, + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: 16.w), + decoration: const ShapeDecoration( + shape: StadiumBorder(), + color: Color(0XFF3A1570), + ), + child: Stack( + alignment: Alignment.center, + children: [ + Container( + height: 3.h, + width: context.widthScreen, + decoration: const ShapeDecoration( + shape: StadiumBorder(), + color: Color(0XFF2B0D57), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: List.generate( + 10, + (index) => const MyStepDefaultItem(), + ), + ), + ], + ), + ); + } +} diff --git a/lib/core/widgets/stepper/styles/my_step_correct_item.dart b/lib/core/widgets/stepper/styles/my_step_correct_item.dart new file mode 100644 index 0000000..61ee6d1 --- /dev/null +++ b/lib/core/widgets/stepper/styles/my_step_correct_item.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_colors.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; + +class MyStepCorrectItem extends StatelessWidget { + const MyStepCorrectItem({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + height: 16, + width: 16, + padding: const EdgeInsets.all(3), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: const Color(0XFF0BA310), + border: Border.all( + width: 1, + color: const Color(0XFF3DE543), + strokeAlign: BorderSide.strokeAlignInside, + ), + ), + child: const MyImage(asset: MyAssets.done, color: MyColors.white), + ); + } +} diff --git a/lib/core/widgets/stepper/styles/my_step_current_item.dart b/lib/core/widgets/stepper/styles/my_step_current_item.dart new file mode 100644 index 0000000..cd6d12a --- /dev/null +++ b/lib/core/widgets/stepper/styles/my_step_current_item.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_colors.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; + +class MyStepCurrentItem extends StatelessWidget { + const MyStepCurrentItem({super.key}); + + @override + Widget build(BuildContext context) { + return Stack( + clipBehavior: Clip.none, + alignment: Alignment.center, + children: [ + Container( + width: 16, + height: 16, + padding: const EdgeInsets.all(4), + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Color(0XFF2B0D57), + ), + child: Container( + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: MyColors.white, + ), + ), + ), + const Positioned(top: -12, child: MyImage(asset: MyAssets.polygon)), + ], + ); + } +} diff --git a/lib/core/widgets/stepper/styles/my_step_default_item.dart b/lib/core/widgets/stepper/styles/my_step_default_item.dart new file mode 100644 index 0000000..9d8b49c --- /dev/null +++ b/lib/core/widgets/stepper/styles/my_step_default_item.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +class MyStepDefaultItem extends StatelessWidget { + const MyStepDefaultItem({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + width: 8, + height: 8, + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Color(0XFFA86CFF), + ), + ); + } +} diff --git a/lib/core/widgets/stepper/styles/my_step_wrong_item.dart b/lib/core/widgets/stepper/styles/my_step_wrong_item.dart new file mode 100644 index 0000000..b4ed4aa --- /dev/null +++ b/lib/core/widgets/stepper/styles/my_step_wrong_item.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_colors.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; + +class MyStepWrongItem extends StatelessWidget { + const MyStepWrongItem({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + height: 16, + width: 16, + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: const Color(0XFFA30B0B), + border: Border.all( + width: 1, + color: const Color(0XFFE53D3D), + strokeAlign: BorderSide.strokeAlignInside, + ), + ), + child: const MyImage(asset: MyAssets.close, color: MyColors.white), + ); + } +} diff --git a/lib/core/widgets/text/gradient_text.dart b/lib/core/widgets/text/gradient_text.dart index 8d8b2f6..f8cc5fc 100644 --- a/lib/core/widgets/text/gradient_text.dart +++ b/lib/core/widgets/text/gradient_text.dart @@ -16,6 +16,8 @@ class GradientText extends StatelessWidget { this.offset = Offset.zero, this.textAlign, this.textStyle, + this.begin, + this.end, }); final String? text; @@ -28,20 +30,22 @@ class GradientText extends StatelessWidget { final Offset offset; final TextAlign? textAlign; final TextStyle? textStyle; + final AlignmentGeometry? begin; + final AlignmentGeometry? end; @override Widget build(BuildContext context) { return ShaderMask( blendMode: BlendMode.modulate, shaderCallback: (bounds) => LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, + begin: begin ?? Alignment.topCenter, + end: end ?? Alignment.bottomCenter, colors: gradientColor ?? [ context.primaryColor, context.primaryColor, color, ], - ).createShader(bounds), + ).createShader(bounds, textDirection: Directionality.of(context)), child: Text( text ?? '', textAlign: textAlign, diff --git a/lib/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart b/lib/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart new file mode 100644 index 0000000..bd224d8 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart @@ -0,0 +1,28 @@ +import 'package:shia_game_flutter/core/constants/my_api.dart'; +import 'package:shia_game_flutter/core/network/http_request.dart'; +import 'package:shia_game_flutter/core/params/bl_question_params.dart'; +import 'package:shia_game_flutter/core/response/base_response.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; + +abstract class IBLQuestionDatasource { + Future getData({required BLQuestionParams params}); +} + +class BLQuestionDatasourceImpl implements IBLQuestionDatasource { + final IHttpRequest httpRequest; + + const BLQuestionDatasourceImpl(this.httpRequest); + + @override + Future getData({required BLQuestionParams params}) async { + final response = await httpRequest.get( + path: MyApi.baseUrl, + ); + + return BaseResponse.getData( + response?['data'], + (json) => BLQuestionModel.fromJson(json), + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart b/lib/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart new file mode 100644 index 0000000..99ffc46 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart @@ -0,0 +1,13 @@ +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; + +class BLQuestionModel extends BLQuestionEntity { + const BLQuestionModel({ + super.id, + }); + + factory BLQuestionModel.fromJson(Map json) { + return BLQuestionModel( + id: json['id'], + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart b/lib/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart new file mode 100644 index 0000000..d3291f9 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart @@ -0,0 +1,29 @@ +import 'package:flutter/foundation.dart'; +import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; +import 'package:shia_game_flutter/core/params/bl_question_params.dart'; +import 'package:shia_game_flutter/core/utils/data_state.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart'; + +class BLQuestionRepositoryImpl implements IBLQuestionRepository { + final IBLQuestionDatasource datasource; + + const BLQuestionRepositoryImpl(this.datasource); + + @override + Future> getData({required BLQuestionParams params}) async { + try { + final BLQuestionEntity response = await datasource.getData(params: params); + return DataState.success(response); + } on MyException catch (e) { + return DataState.error(e); + } catch (e) { + if (kDebugMode) { + rethrow; + } else { + return DataState.error(MyException(errorMessage: '$e')); + } + } + } +} diff --git a/lib/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart b/lib/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart new file mode 100644 index 0000000..7818664 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart @@ -0,0 +1,14 @@ +import 'package:equatable/equatable.dart'; + +class BLQuestionEntity extends Equatable { + final int? id; + + const BLQuestionEntity({ + this.id, + }); + + @override + List get props => [ + id, + ]; +} diff --git a/lib/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart b/lib/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart new file mode 100644 index 0000000..bc1ce21 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart @@ -0,0 +1,8 @@ +import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; +import 'package:shia_game_flutter/core/params/bl_question_params.dart'; +import 'package:shia_game_flutter/core/utils/data_state.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; + +abstract class IBLQuestionRepository { + Future> getData({required BLQuestionParams params}); +} diff --git a/lib/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart b/lib/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart new file mode 100644 index 0000000..6e4c11e --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart @@ -0,0 +1,19 @@ +import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; +import 'package:shia_game_flutter/core/params/bl_question_params.dart'; +import 'package:shia_game_flutter/core/usecase/usecase.dart'; +import 'package:shia_game_flutter/core/utils/data_state.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart'; + +class GetBLQuestionUseCase implements UseCase { + final IBLQuestionRepository repository; + + const GetBLQuestionUseCase(this.repository); + + @override + Future> call(BLQuestionParams params) { + return repository.getData(params: params); + } +} + + diff --git a/lib/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart b/lib/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart new file mode 100644 index 0000000..38440b7 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart @@ -0,0 +1,20 @@ +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart'; +import 'package:get/get.dart'; + +class BLQuestionBinding extends Bindings { + @override + void dependencies() { + Get.put(BLQuestionController(Get.find())); + } + + Future deleteBindings() async { + await Future.wait([ + Get.delete(), + ]); + } + + Future refreshBinding() async { + await deleteBindings(); + dependencies(); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart b/lib/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart new file mode 100644 index 0000000..d6a42e0 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart @@ -0,0 +1,54 @@ +import 'package:flutter/cupertino.dart'; +import 'package:shia_game_flutter/core/params/bl_question_params.dart'; +import 'package:shia_game_flutter/core/status/base_status.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart'; +import 'package:get/get.dart'; + +class BLQuestionController extends GetxController with StateMixin { + /// ----- Constructor ----- + BLQuestionController(this.getBLQuestionUseCase); + + @override + void onInit() { + super.onInit(); + change('', status: RxStatus.success()); + } + + @override + void onClose() { + textEditingController.dispose(); + super.onClose(); + } + + /// ----- UseCases ----- + final GetBLQuestionUseCase getBLQuestionUseCase; + + /// ----- Variables ----- + final Rx bLQuestionParams = Rx(BLQuestionParams()); + final Rx bLQuestionEntity = Rx(const BLQuestionEntity()); + + /// ------ Controllers ------ + final TextEditingController textEditingController = TextEditingController(); + + /// ------ Statuses ------ + final Rx getBLQuestionStatus = Rx(const BaseInit()); + + /// ------ Functions ------ + + /// ------ Api Calls ------ + Future getBLQuestion() async { + change('', status: RxStatus.loading()); + await getBLQuestionUseCase(bLQuestionParams.value).then( + (value) => value.fold( + (data) { + bLQuestionEntity.value = data; + change('', status: RxStatus.success()); + }, + (error) { + change('', status: RxStatus.error(error.errorMessage)); + }, + ), + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart b/lib/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart new file mode 100644 index 0000000..df10388 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:shia_game_flutter/core/widgets/stepper/my_stepper.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart'; + +class BLQuestionPage extends GetView { + const BLQuestionPage({super.key}); + + @override + Widget build(BuildContext context) { + return const Scaffold( + body: DecoratedBox( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Color(0XFF390F72), Color(0XFF160C30)], + ), + ), + child: SafeArea( + child: Column( + children: [ + QuestionBoard(), + MyStepper(), + QuestionTimerReadyWidget(), + ], + ), + ), + ), + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart new file mode 100644 index 0000000..e8a32a7 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_colors.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; +import 'package:shia_game_flutter/core/utils/screen_size.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; + +class BattleLeagueQuestionAvatar extends StatelessWidget { + const BattleLeagueQuestionAvatar({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + spacing: 12.h, + children: [ + Stack( + alignment: Alignment.center, + clipBehavior: Clip.none, + children: [ + Container( + height: 48, + width: 48, + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all(width: 2, color: MyColors.white), + ), + child: const CircleAvatar( + foregroundImage: AssetImage(MyAssets.character1), + ), + ), + const Positioned( + bottom: -7, + child: MyImage(asset: MyAssets.iconIran), + ), + ], + ), + Text('Jack William', style: Lexend.bold.copyWith(fontSize: 10.sp)), + ], + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart new file mode 100644 index 0000000..1d9c398 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; +import 'package:shia_game_flutter/core/utils/screen_size.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart'; + +class QuestionBoard extends StatelessWidget { + const QuestionBoard({super.key}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 30.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const BattleLeagueQuestionAvatar(), + Column( + children: [ + Text('6 - 4', style: Lexend.bold.copyWith(fontSize: 30.sp)), + Text( + 'Question 5', + style: Lexend.regular.copyWith( + fontSize: 10.sp, + color: const Color(0XFF9273C0), + ), + ), + ], + ), + const BattleLeagueQuestionAvatar(), + ], + ), + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart new file mode 100644 index 0000000..4979219 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; +import 'package:shia_game_flutter/core/utils/screen_size.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; +import 'package:shia_game_flutter/core/widgets/text/gradient_text.dart'; + +class QuestionTimerReadyWidget extends StatelessWidget { + const QuestionTimerReadyWidget({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + spacing: 12.h, + children: [ + Stack( + alignment: Alignment.center, + children: [ + const MyImage(asset: MyAssets.timer), + Positioned( + left: 28.w, + top: 26.h, + child: Text( + '5', + style: Lexend.extraBold.copyWith( + fontSize: 48.sp, + color: const Color(0XFFF3EBFF), + ), + ), + ), + ], + ), + GradientText( + text: 'Be Ready', + begin: AlignmentDirectional.topStart, + end: AlignmentDirectional.bottomEnd, + gradientColor: [const Color(0XFFE0CCFF), const Color(0XFF7860A1)], + textStyle: Lexend.semiBold.copyWith(fontSize: 16.sp), + ), + ], + ); + } +} diff --git a/lib/init_bindings.dart b/lib/init_bindings.dart index fc1df7e..8cf4318 100644 --- a/lib/init_bindings.dart +++ b/lib/init_bindings.dart @@ -9,6 +9,10 @@ import 'package:shia_game_flutter/features/battle_league/first_part/data/datasou import 'package:shia_game_flutter/features/battle_league/first_part/data/repository_impl/battle_league_repository_impl.dart'; import 'package:shia_game_flutter/features/battle_league/first_part/domain/repository/battle_league_repository.dart'; import 'package:shia_game_flutter/features/battle_league/first_part/domain/usecases/get_battle_league_usecase.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart'; import 'package:shia_game_flutter/features/home/data/datasource/home_datasource.dart'; import 'package:shia_game_flutter/features/home/data/repository_impl/home_repository_impl.dart'; import 'package:shia_game_flutter/features/home/domain/repository/home_repository.dart'; @@ -77,4 +81,9 @@ void initBindings() { Get.lazyPut(() => BattleLeagueDatasourceImpl(Get.find()), fenix: true); Get.lazyPut(() => BattleLeagueRepositoryImpl(Get.find()), fenix: true); Get.lazyPut(() => GetBattleLeagueUseCase(Get.find()), fenix: true); + + /// ----- BattleLeagueQuestion Feature ----- + Get.lazyPut(() => BLQuestionDatasourceImpl(Get.find()), fenix: true); + Get.lazyPut(() => BLQuestionRepositoryImpl(Get.find()), fenix: true); + Get.lazyPut(() => GetBLQuestionUseCase(Get.find()), fenix: true); } diff --git a/lib/main.dart b/lib/main.dart index dedefa7..5285cf3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -31,7 +31,7 @@ class MainApp extends StatelessWidget { fallbackLocale: const Locale('en', 'US'), supportedLocales: const [Locale('en', 'US')], getPages: appPages, - initialRoute: Routes.introPage, + initialRoute: Routes.battleLeagueQuestionPage, localizationsDelegates: const [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, -- 2.30.2