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