11 changed files with 221 additions and 0 deletions
-
8lib/core/routers/my_routes.dart
-
29lib/features/battle_league/data/datasource/battle_league_datasource.dart
-
14lib/features/battle_league/data/model/battle_league_model.dart
-
30lib/features/battle_league/data/repository_impl/battle_league_repository_impl.dart
-
15lib/features/battle_league/domain/entity/battle_league_entity.dart
-
9lib/features/battle_league/domain/repository/battle_league_repository.dart
-
18lib/features/battle_league/domain/usecases/get_battle_league_usecase.dart
-
21lib/features/battle_league/presentation/binding/battle_league_binding.dart
-
55lib/features/battle_league/presentation/controller/battle_league_controller.dart
-
13lib/features/battle_league/presentation/ui/battle_league_page.dart
-
9lib/init_bindings.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), |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -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'], |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -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')); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -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, |
||||
|
]; |
||||
|
} |
||||
|
|
||||
@ -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}); |
||||
|
} |
||||
|
|
||||
@ -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); |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -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(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -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)); |
||||
|
}, |
||||
|
), |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -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(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue