Browse Source

add: awards page

pull/2/head
AmirrezaChegini 1 month ago
parent
commit
ba8d5ed982
  1. 13
      lib/core/params/awards_params.dart
  2. 28
      lib/features/awards/data/datasource/awards_datasource.dart
  3. 13
      lib/features/awards/data/model/awards_model.dart
  4. 29
      lib/features/awards/data/repository_impl/awards_repository_impl.dart
  5. 14
      lib/features/awards/domain/entity/awards_entity.dart
  6. 8
      lib/features/awards/domain/repository/awards_repository.dart
  7. 20
      lib/features/awards/presentation/binding/awards_binding.dart
  8. 54
      lib/features/awards/presentation/controller/awards_controller.dart
  9. 14
      lib/features/awards/presentation/ui/awards_page.dart

13
lib/core/params/awards_params.dart

@ -0,0 +1,13 @@
class AwardsParams {
int? id;
AwardsParams({this.id});
AwardsParams copyWith({
int? id,
}) {
return AwardsParams(
id: id ?? this.id,
);
}
}

28
lib/features/awards/data/datasource/awards_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/awards_params.dart';
import 'package:shia_game_flutter/core/response/base_response.dart';
import 'package:shia_game_flutter/features/awards/data/model/awards_model.dart';
import 'package:shia_game_flutter/features/awards/domain/entity/awards_entity.dart';
abstract class IAwardsDatasource {
Future<AwardsEntity> getData({required AwardsParams params});
}
class AwardsDatasourceImpl implements IAwardsDatasource {
final IHttpRequest httpRequest;
const AwardsDatasourceImpl(this.httpRequest);
@override
Future<AwardsEntity> getData({required AwardsParams params}) async {
final response = await httpRequest.get(
path: MyApi.baseUrl,
);
return BaseResponse.getData<AwardsEntity>(
response?['data'],
(json) => AwardsModel.fromJson(json),
);
}
}

13
lib/features/awards/data/model/awards_model.dart

@ -0,0 +1,13 @@
import 'package:shia_game_flutter/features/awards/domain/entity/awards_entity.dart';
class AwardsModel extends AwardsEntity {
const AwardsModel({
super.id,
});
factory AwardsModel.fromJson(Map<String, dynamic> json) {
return AwardsModel(
id: json['id'],
);
}
}

29
lib/features/awards/data/repository_impl/awards_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/awards_params.dart';
import 'package:shia_game_flutter/core/utils/data_state.dart';
import 'package:shia_game_flutter/features/awards/data/datasource/awards_datasource.dart';
import 'package:shia_game_flutter/features/awards/domain/entity/awards_entity.dart';
import 'package:shia_game_flutter/features/awards/domain/repository/awards_repository.dart';
class AwardsRepositoryImpl implements IAwardsRepository {
final IAwardsDatasource datasource;
const AwardsRepositoryImpl(this.datasource);
@override
Future<DataState<AwardsEntity, MyException>> getData({required AwardsParams params}) async {
try {
final AwardsEntity 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'));
}
}
}
}

14
lib/features/awards/domain/entity/awards_entity.dart

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

8
lib/features/awards/domain/repository/awards_repository.dart

@ -0,0 +1,8 @@
import 'package:shia_game_flutter/core/error_handler/my_exception.dart';
import 'package:shia_game_flutter/core/params/awards_params.dart';
import 'package:shia_game_flutter/core/utils/data_state.dart';
import 'package:shia_game_flutter/features/awards/domain/entity/awards_entity.dart';
abstract class IAwardsRepository {
Future<DataState<AwardsEntity, MyException>> getData({required AwardsParams params});
}

20
lib/features/awards/presentation/binding/awards_binding.dart

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

54
lib/features/awards/presentation/controller/awards_controller.dart

@ -0,0 +1,54 @@
import 'package:flutter/cupertino.dart';
import 'package:shia_game_flutter/core/params/awards_params.dart';
import 'package:shia_game_flutter/core/status/base_status.dart';
import 'package:shia_game_flutter/features/awards/domain/entity/awards_entity.dart';
import 'package:shia_game_flutter/features/awards/domain/usecases/get_awards_usecase.dart';
import 'package:get/get.dart';
class AwardsController extends GetxController with StateMixin {
/// ----- Constructor -----
AwardsController(this.getAwardsUseCase);
@override
void onInit() {
super.onInit();
change('', status: RxStatus.success());
}
@override
void onClose() {
textEditingController.dispose();
super.onClose();
}
/// ----- UseCases -----
final GetAwardsUseCase getAwardsUseCase;
/// ----- Variables -----
final Rx<AwardsParams> awardsParams = Rx(AwardsParams());
final Rx<AwardsEntity> awardsEntity = Rx(const AwardsEntity());
/// ------ Controllers ------
final TextEditingController textEditingController = TextEditingController();
/// ------ Statuses ------
final Rx<BaseStatus> getAwardsStatus = Rx(const BaseInit());
/// ------ Functions ------
/// ------ Api Calls ------
Future<void> getAwards() async {
change('', status: RxStatus.loading());
await getAwardsUseCase(awardsParams.value).then(
(value) => value.fold(
(data) {
awardsEntity.value = data;
change('', status: RxStatus.success());
},
(error) {
change('', status: RxStatus.error(error.errorMessage));
},
),
);
}
}

14
lib/features/awards/presentation/ui/awards_page.dart

@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
import 'package:shia_game_flutter/features/awards/presentation/controller/awards_controller.dart';
import 'package:get/get.dart';
class AwardsPage extends GetView<AwardsController> {
const AwardsPage({super.key});
@override
Widget build(BuildContext context) {
return const Center(
child: Text('Awards Page'),
);
}
}
Loading…
Cancel
Save