Browse Source

add: based feature

pull/6/head
AmirrezaChegini 4 weeks ago
parent
commit
bb200df46e
  1. 8
      lib/core/routers/my_routes.dart
  2. 29
      lib/features/battle_league/data/datasource/battle_league_datasource.dart
  3. 14
      lib/features/battle_league/data/model/battle_league_model.dart
  4. 30
      lib/features/battle_league/data/repository_impl/battle_league_repository_impl.dart
  5. 15
      lib/features/battle_league/domain/entity/battle_league_entity.dart
  6. 9
      lib/features/battle_league/domain/repository/battle_league_repository.dart
  7. 18
      lib/features/battle_league/domain/usecases/get_battle_league_usecase.dart
  8. 21
      lib/features/battle_league/presentation/binding/battle_league_binding.dart
  9. 55
      lib/features/battle_league/presentation/controller/battle_league_controller.dart
  10. 13
      lib/features/battle_league/presentation/ui/battle_league_page.dart
  11. 9
      lib/init_bindings.dart

8
lib/core/routers/my_routes.dart

@ -10,6 +10,8 @@ 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';
@ -26,6 +28,7 @@ class Routes {
static const String shopPage = '/shop_page';
static const String awardsPage = '/awards_page';
static const String profilePage = '/profile_page';
static const String battleLeaguePage = '/battle_league_page';
}
List<GetPage> get appPages => [
@ -66,4 +69,9 @@ List<GetPage> get appPages => [
),
],
),
GetPage(
name: Routes.battleLeaguePage,
page: () => const BattleLeaguePage(),
binding: BattleLeagueBinding(),
),
];

29
lib/features/battle_league/data/datasource/battle_league_datasource.dart

@ -0,0 +1,29 @@
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';
abstract class IBattleLeagueDatasource {
Future<BattleLeagueEntity> getData({required SampleParams params});
}
class BattleLeagueDatasourceImpl implements IBattleLeagueDatasource {
final IHttpRequest httpRequest;
const BattleLeagueDatasourceImpl(this.httpRequest);
@override
Future<BattleLeagueEntity> getData({required SampleParams params}) async {
final response = await httpRequest.get(
path: MyApi.baseUrl,
);
return BaseResponse.getData<BattleLeagueEntity>(
response?['data'],
(json) => BattleLeagueModel.fromJson(json),
);
}
}

14
lib/features/battle_league/data/model/battle_league_model.dart

@ -0,0 +1,14 @@
import 'package:shia_game_flutter/features/battle_league/domain/entity/battle_league_entity.dart';
class BattleLeagueModel extends BattleLeagueEntity {
const BattleLeagueModel({
super.id,
});
factory BattleLeagueModel.fromJson(Map<String, dynamic> json) {
return BattleLeagueModel(
id: json['id'],
);
}
}

30
lib/features/battle_league/data/repository_impl/battle_league_repository_impl.dart

@ -0,0 +1,30 @@
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';
class BattleLeagueRepositoryImpl implements IBattleLeagueRepository {
final IBattleLeagueDatasource datasource;
const BattleLeagueRepositoryImpl(this.datasource);
@override
Future<DataState<BattleLeagueEntity, MyException>> getData({required SampleParams params}) async {
try {
final BattleLeagueEntity 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'));
}
}
}
}

15
lib/features/battle_league/domain/entity/battle_league_entity.dart

@ -0,0 +1,15 @@
import 'package:equatable/equatable.dart';
class BattleLeagueEntity extends Equatable {
final int? id;
const BattleLeagueEntity({
this.id,
});
@override
List<Object?> get props => [
id,
];
}

9
lib/features/battle_league/domain/repository/battle_league_repository.dart

@ -0,0 +1,9 @@
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';
abstract class IBattleLeagueRepository {
Future<DataState<BattleLeagueEntity, MyException>> getData({required SampleParams params});
}

18
lib/features/battle_league/domain/usecases/get_battle_league_usecase.dart

@ -0,0 +1,18 @@
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';
class GetBattleLeagueUseCase implements UseCase<BattleLeagueEntity, SampleParams> {
final IBattleLeagueRepository repository;
const GetBattleLeagueUseCase(this.repository);
@override
Future<DataState<BattleLeagueEntity, MyException>> call(SampleParams params) {
return repository.getData(params: params);
}
}

21
lib/features/battle_league/presentation/binding/battle_league_binding.dart

@ -0,0 +1,21 @@
import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart';
import 'package:get/get.dart';
class BattleLeagueBinding extends Bindings {
@override
void dependencies() {
Get.put<BattleLeagueController>(BattleLeagueController(Get.find()));
}
Future<void> deleteBindings() async {
await Future.wait([
Get.delete<BattleLeagueController>(),
]);
}
Future<void> refreshBinding() async {
await deleteBindings();
dependencies();
}
}

55
lib/features/battle_league/presentation/controller/battle_league_controller.dart

@ -0,0 +1,55 @@
import 'package:flutter/cupertino.dart';
import 'package:shia_game_flutter/core/params/sample_params.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';
class BattleLeagueController extends GetxController with StateMixin {
/// ----- Constructor -----
BattleLeagueController(this.getBattleLeagueUseCase);
@override
void onInit() {
super.onInit();
change('', status: RxStatus.success());
}
@override
void onClose() {
textEditingController.dispose();
super.onClose();
}
/// ----- UseCases -----
final GetBattleLeagueUseCase getBattleLeagueUseCase;
/// ----- Variables -----
final Rx<SampleParams> battleLeagueParams = Rx(SampleParams());
final Rx<BattleLeagueEntity> battleLeagueEntity = Rx(const BattleLeagueEntity());
/// ------ Controllers ------
final TextEditingController textEditingController = TextEditingController();
/// ------ Statuses ------
final Rx<BaseStatus> getBattleLeagueStatus = Rx(const BaseInit());
/// ------ Functions ------
/// ------ Api Calls ------
Future<void> getBattleLeague() async {
change('', status: RxStatus.loading());
await getBattleLeagueUseCase(battleLeagueParams.value).then(
(value) => value.fold(
(data) {
battleLeagueEntity.value = data;
change('', status: RxStatus.success());
},
(error) {
change('', status: RxStatus.error(error.errorMessage));
},
),
);
}
}

13
lib/features/battle_league/presentation/ui/battle_league_page.dart

@ -0,0 +1,13 @@
import 'package:flutter/material.dart';
import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart';
import 'package:get/get.dart';
class BattleLeaguePage extends GetView<BattleLeagueController> {
const BattleLeaguePage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold();
}
}

9
lib/init_bindings.dart

@ -25,6 +25,10 @@ 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';
@ -68,4 +72,9 @@ void initBindings() {
Get.lazyPut<IProfileDatasource>(() => ProfileDatasourceImpl(Get.find()), fenix: true);
Get.lazyPut<IProfileRepository>(() => ProfileRepositoryImpl(Get.find()), fenix: true);
Get.lazyPut<GetProfileUseCase>(() => GetProfileUseCase(Get.find()), fenix: true);
/// ----- BattleLeague Feature -----
Get.lazyPut<IBattleLeagueDatasource>(() => BattleLeagueDatasourceImpl(Get.find()));
Get.lazyPut<IBattleLeagueRepository>(() => BattleLeagueRepositoryImpl(Get.find()));
Get.lazyPut<GetBattleLeagueUseCase>(() => GetBattleLeagueUseCase(Get.find()));
}
Loading…
Cancel
Save