From baf6309d4e58ea4a02d687d3b368f85d5cdbeac7 Mon Sep 17 00:00:00 2001 From: AmirrezaChegini Date: Sat, 18 Oct 2025 11:59:14 +0330 Subject: [PATCH] add: master & home feature --- lib/core/params/master_params.dart | 13 +++ lib/core/routers/my_routes.dart | 4 + ...{home_app_bar.dart => master_app_bar.dart} | 4 +- .../bottom_nav_bar/bottom_nav_bar.dart | 4 +- .../styles/bottom_nav_bar_item.dart | 2 +- .../styles/bottom_nav_bar_profile_item.dart | 2 +- .../presentation/binding/awards_binding.dart | 2 +- .../presentation/binding/home_binding.dart | 2 +- .../controller/home_controller.dart | 27 ------ .../home/presentation/pages/home_page.dart | 36 +++----- .../data/datasource/master_datasource.dart | 28 ++++++ .../master/data/model/master_model.dart | 13 +++ .../master_repository_impl.dart | 29 +++++++ .../domain/entity/bottom_nav_entity.dart | 5 +- .../master/domain/entity/master_entity.dart | 14 +++ .../domain/repository/master_repository.dart | 8 ++ .../presentation/binding/master_binding.dart | 20 +++++ .../controller/master_controller.dart | 85 +++++++++++++++++++ .../master/presentation/ui/master_page.dart | 25 ++++++ .../presentation/binding/profile_binding.dart | 2 +- .../presentation/binding/shop_binding.dart | 2 +- lib/init_bindings.dart | 42 ++++++++- lib/main.dart | 2 +- 23 files changed, 306 insertions(+), 65 deletions(-) create mode 100644 lib/core/params/master_params.dart rename lib/core/widgets/app_bar/{home_app_bar.dart => master_app_bar.dart} (94%) create mode 100644 lib/features/master/data/datasource/master_datasource.dart create mode 100644 lib/features/master/data/model/master_model.dart create mode 100644 lib/features/master/data/repository_impl/master_repository_impl.dart rename lib/features/{home => master}/domain/entity/bottom_nav_entity.dart (51%) create mode 100644 lib/features/master/domain/entity/master_entity.dart create mode 100644 lib/features/master/domain/repository/master_repository.dart create mode 100644 lib/features/master/presentation/binding/master_binding.dart create mode 100644 lib/features/master/presentation/controller/master_controller.dart create mode 100644 lib/features/master/presentation/ui/master_page.dart diff --git a/lib/core/params/master_params.dart b/lib/core/params/master_params.dart new file mode 100644 index 0000000..62509d2 --- /dev/null +++ b/lib/core/params/master_params.dart @@ -0,0 +1,13 @@ +class MasterParams { + int? id; + + MasterParams({this.id}); + + MasterParams copyWith({ + int? id, + }) { + return MasterParams( + id: id ?? this.id, + ); + } +} diff --git a/lib/core/routers/my_routes.dart b/lib/core/routers/my_routes.dart index dd600e2..272cf33 100644 --- a/lib/core/routers/my_routes.dart +++ b/lib/core/routers/my_routes.dart @@ -48,21 +48,25 @@ List get appPages => [ name: Routes.homePage, page: () => const HomePage(), binding: HomeBinding(), + transition: Transition.fadeIn, ), GetPage( name: Routes.shopPage, page: () => const ShopPage(), binding: ShopBinding(), + transition: Transition.fadeIn, ), GetPage( name: Routes.awardsPage, page: () => const AwardsPage(), binding: AwardsBinding(), + transition: Transition.fadeIn, ), GetPage( name: Routes.profilePage, page: () => const ProfilePage(), binding: ProfileBinding(), + transition: Transition.fadeIn, ), ], ), diff --git a/lib/core/widgets/app_bar/home_app_bar.dart b/lib/core/widgets/app_bar/master_app_bar.dart similarity index 94% rename from lib/core/widgets/app_bar/home_app_bar.dart rename to lib/core/widgets/app_bar/master_app_bar.dart index d4158c8..483fdcb 100644 --- a/lib/core/widgets/app_bar/home_app_bar.dart +++ b/lib/core/widgets/app_bar/master_app_bar.dart @@ -6,8 +6,8 @@ import 'package:shia_game_flutter/core/utils/gap.dart'; import 'package:shia_game_flutter/core/widgets/app_bar/styles/app_bar_action.dart'; import 'package:shia_game_flutter/core/widgets/app_bar/styles/app_bar_add_widget.dart'; -class HomeAppBar extends StatelessWidget implements PreferredSizeWidget { - const HomeAppBar({ +class MasterAppBar extends StatelessWidget implements PreferredSizeWidget { + const MasterAppBar({ super.key, }); diff --git a/lib/core/widgets/bottom_nav_bar/bottom_nav_bar.dart b/lib/core/widgets/bottom_nav_bar/bottom_nav_bar.dart index 2f9a46c..307782f 100644 --- a/lib/core/widgets/bottom_nav_bar/bottom_nav_bar.dart +++ b/lib/core/widgets/bottom_nav_bar/bottom_nav_bar.dart @@ -5,9 +5,9 @@ import 'package:shia_game_flutter/common_ui/resources/my_spaces.dart'; import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; import 'package:shia_game_flutter/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_item.dart'; import 'package:shia_game_flutter/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_profile_item.dart'; -import 'package:shia_game_flutter/features/home/presentation/controller/home_controller.dart'; +import 'package:shia_game_flutter/features/master/presentation/controller/master_controller.dart'; -class BottomNavBar extends GetView { +class BottomNavBar extends GetView { const BottomNavBar({super.key}); @override diff --git a/lib/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_item.dart b/lib/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_item.dart index f1c1a30..5ffb738 100644 --- a/lib/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_item.dart +++ b/lib/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_item.dart @@ -3,7 +3,7 @@ import 'package:shia_game_flutter/common_ui/resources/my_spaces.dart'; import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; import 'package:shia_game_flutter/core/utils/gap.dart'; import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; -import 'package:shia_game_flutter/features/home/domain/entity/bottom_nav_entity.dart'; +import 'package:shia_game_flutter/features/master/domain/entity/bottom_nav_entity.dart'; class BottomNavBarItem extends StatelessWidget { const BottomNavBarItem({super.key, required this.bottomNavEntity}); diff --git a/lib/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_profile_item.dart b/lib/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_profile_item.dart index 23b0afe..fe3f58f 100644 --- a/lib/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_profile_item.dart +++ b/lib/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_profile_item.dart @@ -3,7 +3,7 @@ import 'package:shia_game_flutter/common_ui/resources/my_spaces.dart'; import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; import 'package:shia_game_flutter/core/utils/gap.dart'; import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; -import 'package:shia_game_flutter/features/home/domain/entity/bottom_nav_entity.dart'; +import 'package:shia_game_flutter/features/master/domain/entity/bottom_nav_entity.dart'; class BottomNavBarProfileItem extends StatelessWidget { const BottomNavBarProfileItem({super.key, required this.bottomNavEntity}); diff --git a/lib/features/awards/presentation/binding/awards_binding.dart b/lib/features/awards/presentation/binding/awards_binding.dart index 585c409..5609f9c 100644 --- a/lib/features/awards/presentation/binding/awards_binding.dart +++ b/lib/features/awards/presentation/binding/awards_binding.dart @@ -4,7 +4,7 @@ import 'package:get/get.dart'; class AwardsBinding extends Bindings { @override void dependencies() { - Get.put(AwardsController(Get.find())); + Get.put(AwardsController(Get.find()), permanent: true); } Future deleteBindings() async { diff --git a/lib/features/home/presentation/binding/home_binding.dart b/lib/features/home/presentation/binding/home_binding.dart index 3c8ed17..51d91de 100644 --- a/lib/features/home/presentation/binding/home_binding.dart +++ b/lib/features/home/presentation/binding/home_binding.dart @@ -4,6 +4,6 @@ import 'package:get/get.dart'; class HomeBinding extends Bindings { @override void dependencies() { - Get.put(HomeController(Get.find())); + Get.put(HomeController(Get.find()), permanent: true); } } diff --git a/lib/features/home/presentation/controller/home_controller.dart b/lib/features/home/presentation/controller/home_controller.dart index aae9385..ce21b15 100644 --- a/lib/features/home/presentation/controller/home_controller.dart +++ b/lib/features/home/presentation/controller/home_controller.dart @@ -1,10 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; -import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; import 'package:shia_game_flutter/core/params/home_params.dart'; import 'package:shia_game_flutter/core/status/base_status.dart'; -import 'package:shia_game_flutter/core/utils/my_localization.dart'; -import 'package:shia_game_flutter/features/home/domain/entity/bottom_nav_entity.dart'; import 'package:shia_game_flutter/features/home/domain/entity/home_entity.dart'; import 'package:shia_game_flutter/features/home/domain/usecases/get_home_usecase.dart'; @@ -30,27 +27,6 @@ class HomeController extends GetxController with StateMixin { /// ----- Variables ----- final Rx homeParams = Rx(HomeParams()); final Rx homeEntity = Rx(const HomeEntity()); - final List bottomNavList = [ - BottomNavEntity( - icon: MyAssets.iconHome, - title: Get.context?.translate.home, - ), - BottomNavEntity( - icon: MyAssets.iconShop, - title: Get.context?.translate.shop, - ), - BottomNavEntity( - icon: MyAssets.iconAwards, - title: Get.context?.translate.awards, - ), - BottomNavEntity( - icon: MyAssets.iconProfile, - title: Get.context?.translate.profile, - ), - ]; - - final Rx selectedIndex = Rx(0); - /// ------ Controllers ------ final TextEditingController textEditingController = TextEditingController(); @@ -59,9 +35,6 @@ class HomeController extends GetxController with StateMixin { final Rx getHomeStatus = Rx(const BaseInit()); /// ------ Functions ------ - void onChangeBottomNavBar(int index) { - selectedIndex.value = index; - } /// ------ Api Calls ------ Future getHome() async { diff --git a/lib/features/home/presentation/pages/home_page.dart b/lib/features/home/presentation/pages/home_page.dart index 669fd8e..fc404e1 100644 --- a/lib/features/home/presentation/pages/home_page.dart +++ b/lib/features/home/presentation/pages/home_page.dart @@ -2,10 +2,7 @@ import 'package:flutter/material.dart' hide BoxShadow, BoxDecoration; import 'package:get/get.dart'; import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; import 'package:shia_game_flutter/common_ui/resources/my_spaces.dart'; -import 'package:shia_game_flutter/common_ui/theme/my_theme.dart'; import 'package:shia_game_flutter/core/utils/gap.dart'; -import 'package:shia_game_flutter/core/widgets/app_bar/home_app_bar.dart'; -import 'package:shia_game_flutter/core/widgets/bottom_nav_bar/bottom_nav_bar.dart'; import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; import 'package:shia_game_flutter/features/home/presentation/controller/home_controller.dart'; import 'package:shia_game_flutter/features/home/presentation/pages/widgets/home_battle_cast.dart'; @@ -18,25 +15,20 @@ class HomePage extends GetView { @override Widget build(BuildContext context) { - return Scaffold( - backgroundColor: context.backgroundColor, - bottomNavigationBar: BottomNavBar(), - appBar: HomeAppBar(), - body: SingleChildScrollView( - padding: EdgeInsets.symmetric(horizontal: MySpaces.s32), - child: Column( - children: [ - MySpaces.s28.gapHeight, - MyImage(asset: MyAssets.shiaMindGroup), - MySpaces.s40.gapHeight, - HomeMembership(), - HomeBattleLeague(), - MySpaces.s20.gapHeight, - _customWidgets(), - MySpaces.s20.gapHeight, - HomeBattleCast(), - ], - ), + return SingleChildScrollView( + padding: EdgeInsets.symmetric(horizontal: MySpaces.s32), + child: Column( + children: [ + MySpaces.s28.gapHeight, + MyImage(asset: MyAssets.shiaMindGroup), + MySpaces.s40.gapHeight, + HomeMembership(), + HomeBattleLeague(), + MySpaces.s20.gapHeight, + _customWidgets(), + MySpaces.s20.gapHeight, + HomeBattleCast(), + ], ), ); } diff --git a/lib/features/master/data/datasource/master_datasource.dart b/lib/features/master/data/datasource/master_datasource.dart new file mode 100644 index 0000000..b7d83ac --- /dev/null +++ b/lib/features/master/data/datasource/master_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/master_params.dart'; +import 'package:shia_game_flutter/core/response/base_response.dart'; +import 'package:shia_game_flutter/features/master/data/model/master_model.dart'; +import 'package:shia_game_flutter/features/master/domain/entity/master_entity.dart'; + +abstract class IMasterDatasource { + Future getData({required MasterParams params}); +} + +class MasterDatasourceImpl implements IMasterDatasource { + final IHttpRequest httpRequest; + + const MasterDatasourceImpl(this.httpRequest); + + @override + Future getData({required MasterParams params}) async { + final response = await httpRequest.get( + path: MyApi.baseUrl, + ); + + return BaseResponse.getData( + response?['data'], + (json) => MasterModel.fromJson(json), + ); + } +} diff --git a/lib/features/master/data/model/master_model.dart b/lib/features/master/data/model/master_model.dart new file mode 100644 index 0000000..9fe433e --- /dev/null +++ b/lib/features/master/data/model/master_model.dart @@ -0,0 +1,13 @@ +import 'package:shia_game_flutter/features/master/domain/entity/master_entity.dart'; + +class MasterModel extends MasterEntity { + const MasterModel({ + super.id, + }); + + factory MasterModel.fromJson(Map json) { + return MasterModel( + id: json['id'], + ); + } +} diff --git a/lib/features/master/data/repository_impl/master_repository_impl.dart b/lib/features/master/data/repository_impl/master_repository_impl.dart new file mode 100644 index 0000000..059428f --- /dev/null +++ b/lib/features/master/data/repository_impl/master_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/master_params.dart'; +import 'package:shia_game_flutter/core/utils/data_state.dart'; +import 'package:shia_game_flutter/features/master/data/datasource/master_datasource.dart'; +import 'package:shia_game_flutter/features/master/domain/entity/master_entity.dart'; +import 'package:shia_game_flutter/features/master/domain/repository/master_repository.dart'; + +class MasterRepositoryImpl implements IMasterRepository { + final IMasterDatasource datasource; + + const MasterRepositoryImpl(this.datasource); + + @override + Future> getData({required MasterParams params}) async { + try { + final MasterEntity 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/home/domain/entity/bottom_nav_entity.dart b/lib/features/master/domain/entity/bottom_nav_entity.dart similarity index 51% rename from lib/features/home/domain/entity/bottom_nav_entity.dart rename to lib/features/master/domain/entity/bottom_nav_entity.dart index 43aea96..76f20b7 100644 --- a/lib/features/home/domain/entity/bottom_nav_entity.dart +++ b/lib/features/master/domain/entity/bottom_nav_entity.dart @@ -3,9 +3,10 @@ import 'package:equatable/equatable.dart'; class BottomNavEntity extends Equatable { final String? icon; final String? title; + final String? route; - const BottomNavEntity({this.icon, this.title}); + const BottomNavEntity({this.icon, this.title, this.route}); @override - List get props => [icon, title]; + List get props => [icon, title, route]; } diff --git a/lib/features/master/domain/entity/master_entity.dart b/lib/features/master/domain/entity/master_entity.dart new file mode 100644 index 0000000..b4e7f6b --- /dev/null +++ b/lib/features/master/domain/entity/master_entity.dart @@ -0,0 +1,14 @@ +import 'package:equatable/equatable.dart'; + +class MasterEntity extends Equatable { + final int? id; + + const MasterEntity({ + this.id, + }); + + @override + List get props => [ + id, + ]; +} diff --git a/lib/features/master/domain/repository/master_repository.dart b/lib/features/master/domain/repository/master_repository.dart new file mode 100644 index 0000000..ab66cae --- /dev/null +++ b/lib/features/master/domain/repository/master_repository.dart @@ -0,0 +1,8 @@ +import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; +import 'package:shia_game_flutter/core/params/master_params.dart'; +import 'package:shia_game_flutter/core/utils/data_state.dart'; +import 'package:shia_game_flutter/features/master/domain/entity/master_entity.dart'; + +abstract class IMasterRepository { + Future> getData({required MasterParams params}); +} diff --git a/lib/features/master/presentation/binding/master_binding.dart b/lib/features/master/presentation/binding/master_binding.dart new file mode 100644 index 0000000..53c1ba8 --- /dev/null +++ b/lib/features/master/presentation/binding/master_binding.dart @@ -0,0 +1,20 @@ +import 'package:shia_game_flutter/features/master/presentation/controller/master_controller.dart'; +import 'package:get/get.dart'; + +class MasterBinding extends Bindings { + @override + void dependencies() { + Get.put(MasterController(Get.find())); + } + + Future deleteBindings() async { + await Future.wait([ + Get.delete(), + ]); + } + + Future refreshBinding() async { + await deleteBindings(); + dependencies(); + } +} diff --git a/lib/features/master/presentation/controller/master_controller.dart b/lib/features/master/presentation/controller/master_controller.dart new file mode 100644 index 0000000..ba31280 --- /dev/null +++ b/lib/features/master/presentation/controller/master_controller.dart @@ -0,0 +1,85 @@ +import 'package:flutter/cupertino.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/core/params/master_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/core/utils/my_localization.dart'; +import 'package:shia_game_flutter/features/master/domain/entity/bottom_nav_entity.dart'; +import 'package:shia_game_flutter/features/master/domain/entity/master_entity.dart'; +import 'package:shia_game_flutter/features/master/domain/usecases/get_master_usecase.dart'; +import 'package:get/get.dart'; + +class MasterController extends GetxController with StateMixin { + /// ----- Constructor ----- + MasterController(this.getMasterUseCase); + + @override + void onInit() { + super.onInit(); + change('', status: RxStatus.success()); + } + + @override + void onClose() { + textEditingController.dispose(); + super.onClose(); + } + + /// ----- UseCases ----- + final GetMasterUseCase getMasterUseCase; + + /// ----- Variables ----- + final Rx masterParams = Rx(MasterParams()); + final Rx masterEntity = Rx(const MasterEntity()); + final List bottomNavList = [ + BottomNavEntity( + icon: MyAssets.iconHome, + title: Get.context?.translate.home, + route: Routes.homePage, + ), + BottomNavEntity( + icon: MyAssets.iconShop, + title: Get.context?.translate.shop, + route: Routes.shopPage, + ), + BottomNavEntity( + icon: MyAssets.iconAwards, + title: Get.context?.translate.awards, + route: Routes.awardsPage, + ), + BottomNavEntity( + icon: MyAssets.iconProfile, + title: Get.context?.translate.profile, + route: Routes.profilePage, + ), + ]; + final Rx selectedIndex = Rx(0); + + /// ------ Controllers ------ + final TextEditingController textEditingController = TextEditingController(); + + /// ------ Statuses ------ + final Rx getMasterStatus = Rx(const BaseInit()); + + /// ------ Functions ------ + void onChangeBottomNavBar(int index) { + selectedIndex.value = index; + Get.rootDelegate.toNamed(bottomNavList[index].route ?? ''); + } + + /// ------ Api Calls ------ + Future getMaster() async { + change('', status: RxStatus.loading()); + await getMasterUseCase(masterParams.value).then( + (value) => value.fold( + (data) { + masterEntity.value = data; + change('', status: RxStatus.success()); + }, + (error) { + change('', status: RxStatus.error(error.errorMessage)); + }, + ), + ); + } +} diff --git a/lib/features/master/presentation/ui/master_page.dart b/lib/features/master/presentation/ui/master_page.dart new file mode 100644 index 0000000..4866d68 --- /dev/null +++ b/lib/features/master/presentation/ui/master_page.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/theme/my_theme.dart'; +import 'package:shia_game_flutter/core/routers/my_routes.dart'; +import 'package:shia_game_flutter/core/widgets/app_bar/master_app_bar.dart'; +import 'package:shia_game_flutter/core/widgets/bottom_nav_bar/bottom_nav_bar.dart'; +import 'package:shia_game_flutter/features/master/presentation/controller/master_controller.dart'; +import 'package:get/get.dart'; + +class MasterPage extends GetView { + const MasterPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: context.backgroundColor, + appBar: MasterAppBar(), + bottomNavigationBar: BottomNavBar(), + body: GetRouterOutlet( + initialRoute: Routes.homePage, + anchorRoute: Routes.masterPage, + delegate: Get.rootDelegate, + ), + ); + } +} diff --git a/lib/features/profile/presentation/binding/profile_binding.dart b/lib/features/profile/presentation/binding/profile_binding.dart index 67606fe..e10d983 100644 --- a/lib/features/profile/presentation/binding/profile_binding.dart +++ b/lib/features/profile/presentation/binding/profile_binding.dart @@ -4,7 +4,7 @@ import 'package:get/get.dart'; class ProfileBinding extends Bindings { @override void dependencies() { - Get.put(ProfileController(Get.find())); + Get.put(ProfileController(Get.find()), permanent: true); } Future deleteBindings() async { diff --git a/lib/features/shop/presentation/binding/shop_binding.dart b/lib/features/shop/presentation/binding/shop_binding.dart index 64d2565..8044122 100644 --- a/lib/features/shop/presentation/binding/shop_binding.dart +++ b/lib/features/shop/presentation/binding/shop_binding.dart @@ -4,7 +4,7 @@ import 'package:get/get.dart'; class ShopBinding extends Bindings { @override void dependencies() { - Get.put(ShopController(Get.find())); + Get.put(ShopController(Get.find()), permanent: true); } Future deleteBindings() async { diff --git a/lib/init_bindings.dart b/lib/init_bindings.dart index fd2d223..0d703b9 100644 --- a/lib/init_bindings.dart +++ b/lib/init_bindings.dart @@ -1,6 +1,10 @@ import 'package:get/get.dart'; import 'package:shia_game_flutter/core/network/http_request.dart'; import 'package:shia_game_flutter/core/network/http_request_impl.dart'; +import 'package:shia_game_flutter/features/awards/data/datasource/awards_datasource.dart'; +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/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'; @@ -9,10 +13,22 @@ import 'package:shia_game_flutter/features/intro/data/datasource/intro_datasourc import 'package:shia_game_flutter/features/intro/data/repository_impl/intro_repository_impl.dart'; import 'package:shia_game_flutter/features/intro/domain/repository/intro_repository.dart'; import 'package:shia_game_flutter/features/intro/domain/usecases/get_intro_usecase.dart'; +import 'package:shia_game_flutter/features/master/data/datasource/master_datasource.dart'; +import 'package:shia_game_flutter/features/master/data/repository_impl/master_repository_impl.dart'; +import 'package:shia_game_flutter/features/master/domain/repository/master_repository.dart'; +import 'package:shia_game_flutter/features/master/domain/usecases/get_master_usecase.dart'; +import 'package:shia_game_flutter/features/profile/data/datasource/profile_datasource.dart'; +import 'package:shia_game_flutter/features/profile/data/repository_impl/profile_repository_impl.dart'; +import 'package:shia_game_flutter/features/profile/domain/repository/profile_repository.dart'; +import 'package:shia_game_flutter/features/profile/domain/usecases/get_profile_usecase.dart'; import 'package:shia_game_flutter/features/sample/data/datasource/sample_datasource.dart'; 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/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'; +import 'package:shia_game_flutter/features/shop/domain/usecases/get_shop_usecase.dart'; void initBindings() { /// ----- Classes ----- @@ -28,8 +44,28 @@ void initBindings() { Get.lazyPut(() => IntroRepositoryImpl(Get.find())); Get.lazyPut(() => GetIntroUseCase(Get.find())); + /// ----- Master Feature ----- + Get.lazyPut(() => MasterDatasourceImpl(Get.find())); + Get.lazyPut(() => MasterRepositoryImpl(Get.find())); + Get.lazyPut(() => GetMasterUseCase(Get.find())); + /// ----- Home Feature ----- - Get.lazyPut(() => HomeDatasourceImpl(Get.find())); - Get.lazyPut(() => HomeRepositoryImpl(Get.find())); - Get.lazyPut(() => GetHomeUseCase(Get.find())); + Get.lazyPut(() => HomeDatasourceImpl(Get.find()), fenix: true); + Get.lazyPut(() => HomeRepositoryImpl(Get.find()), fenix: true); + Get.lazyPut(() => GetHomeUseCase(Get.find()), fenix: true); + + /// ----- Shop Feature ----- + Get.lazyPut(() => ShopDatasourceImpl(Get.find()), fenix: true); + Get.lazyPut(() => ShopRepositoryImpl(Get.find()), fenix: true); + Get.lazyPut(() => GetShopUseCase(Get.find()), fenix: true); + + /// ----- Awards Feature ----- + Get.lazyPut(() => AwardsDatasourceImpl(Get.find()), fenix: true); + Get.lazyPut(() => AwardsRepositoryImpl(Get.find()), fenix: true); + Get.lazyPut(() => GetAwardsUseCase(Get.find()), fenix: true); + + /// ----- Profile Feature ----- + Get.lazyPut(() => ProfileDatasourceImpl(Get.find()), fenix: true); + Get.lazyPut(() => ProfileRepositoryImpl(Get.find()), fenix: true); + Get.lazyPut(() => GetProfileUseCase(Get.find()), fenix: true); } diff --git a/lib/main.dart b/lib/main.dart index 19bec5b..98bea17 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.homePage, + initialRoute: Routes.masterPage, localizationsDelegates: const [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate,