13 changed files with 214 additions and 1 deletions
-
13lib/core/params/language_params.dart
-
13lib/core/routers/my_routes.dart
-
28lib/features/language/data/datasource/language_datasource.dart
-
13lib/features/language/data/model/language_model.dart
-
29lib/features/language/data/repository_impl/language_repository_impl.dart
-
14lib/features/language/domain/entity/language_entity.dart
-
8lib/features/language/domain/repository/language_repository.dart
-
17lib/features/language/domain/usecases/get_language_usecase.dart
-
41lib/features/language/presentation/bloc/language_bloc.dart
-
5lib/features/language/presentation/bloc/language_event.dart
-
15lib/features/language/presentation/bloc/language_state.dart
-
10lib/features/language/presentation/ui/language_page.dart
-
9lib/init_bindings.dart
@ -0,0 +1,13 @@ |
|||
class LanguageParams { |
|||
int? id; |
|||
|
|||
LanguageParams({this.id}); |
|||
|
|||
LanguageParams copyWith({ |
|||
int? id, |
|||
}) { |
|||
return LanguageParams( |
|||
id: id ?? this.id, |
|||
); |
|||
} |
|||
} |
@ -0,0 +1,28 @@ |
|||
import 'package:hadi_hoda_flutter/core/constants/my_api.dart'; |
|||
import 'package:hadi_hoda_flutter/core/network/http_request.dart'; |
|||
import 'package:hadi_hoda_flutter/core/params/language_params.dart'; |
|||
import 'package:hadi_hoda_flutter/core/response/base_response.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/data/model/language_model.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; |
|||
|
|||
abstract class ILanguageDatasource { |
|||
Future<LanguageEntity> getData({required LanguageParams params}); |
|||
} |
|||
|
|||
class LanguageDatasourceImpl implements ILanguageDatasource { |
|||
final IHttpRequest httpRequest; |
|||
|
|||
const LanguageDatasourceImpl(this.httpRequest); |
|||
|
|||
@override |
|||
Future<LanguageEntity> getData({required LanguageParams params}) async { |
|||
final response = await httpRequest.get( |
|||
path: MyApi.baseUrl, |
|||
); |
|||
|
|||
return BaseResponse.getData<LanguageEntity>( |
|||
response?['data'], |
|||
(json) => LanguageModel.fromJson(json), |
|||
); |
|||
} |
|||
} |
@ -0,0 +1,13 @@ |
|||
import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; |
|||
|
|||
class LanguageModel extends LanguageEntity { |
|||
const LanguageModel({ |
|||
super.id, |
|||
}); |
|||
|
|||
factory LanguageModel.fromJson(Map<String, dynamic> json) { |
|||
return LanguageModel( |
|||
id: json['id'], |
|||
); |
|||
} |
|||
} |
@ -0,0 +1,29 @@ |
|||
import 'package:hadi_hoda_flutter/core/params/language_params.dart'; |
|||
import 'package:flutter/foundation.dart'; |
|||
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; |
|||
import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/data/datasource/language_datasource.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/domain/repository/language_repository.dart'; |
|||
|
|||
class LanguageRepositoryImpl implements ILanguageRepository { |
|||
final ILanguageDatasource datasource; |
|||
|
|||
const LanguageRepositoryImpl(this.datasource); |
|||
|
|||
@override |
|||
Future<DataState<LanguageEntity, MyException>> getData({required LanguageParams params}) async { |
|||
try { |
|||
final LanguageEntity 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,14 @@ |
|||
import 'package:equatable/equatable.dart'; |
|||
|
|||
class LanguageEntity extends Equatable { |
|||
final int? id; |
|||
|
|||
const LanguageEntity({ |
|||
this.id, |
|||
}); |
|||
|
|||
@override |
|||
List<Object?> get props => [ |
|||
id, |
|||
]; |
|||
} |
@ -0,0 +1,8 @@ |
|||
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; |
|||
import 'package:hadi_hoda_flutter/core/params/language_params.dart'; |
|||
import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; |
|||
|
|||
abstract class ILanguageRepository { |
|||
Future<DataState<LanguageEntity, MyException>> getData({required LanguageParams params}); |
|||
} |
@ -0,0 +1,17 @@ |
|||
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; |
|||
import 'package:hadi_hoda_flutter/core/params/language_params.dart'; |
|||
import 'package:hadi_hoda_flutter/core/usecase/usecase.dart'; |
|||
import 'package:hadi_hoda_flutter/core/utils/data_state.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/domain/repository/language_repository.dart'; |
|||
|
|||
class GetLanguageUseCase implements UseCase<LanguageEntity, LanguageParams> { |
|||
final ILanguageRepository repository; |
|||
|
|||
const GetLanguageUseCase(this.repository); |
|||
|
|||
@override |
|||
Future<DataState<LanguageEntity, MyException>> call(LanguageParams params) { |
|||
return repository.getData(params: params); |
|||
} |
|||
} |
@ -0,0 +1,41 @@ |
|||
import 'dart:async'; |
|||
import 'package:bloc/bloc.dart'; |
|||
import 'package:hadi_hoda_flutter/core/status/base_status.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/domain/usecases/get_language_usecase.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_event.dart'; |
|||
import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_state.dart'; |
|||
|
|||
class LanguageBloc extends Bloc<LanguageEvent, LanguageState> { |
|||
/// ------------constructor------------ |
|||
LanguageBloc( |
|||
this._getLanguageUseCase, |
|||
) : super(const LanguageState()) { |
|||
on<GetLanguageEvent>(_getLanguageEvent); |
|||
} |
|||
|
|||
/// ------------UseCases------------ |
|||
final GetLanguageUseCase _getLanguageUseCase; |
|||
|
|||
/// ------------Variables------------ |
|||
|
|||
/// ------------Controllers------------ |
|||
|
|||
/// ------------Functions------------ |
|||
|
|||
/// ------------Api Calls------------ |
|||
FutureOr<void> _getLanguageEvent(event, emit) async { |
|||
await _getLanguageUseCase(event.languageParams).then( |
|||
(value) { |
|||
value.fold( |
|||
(data) { |
|||
emit(state.copyWith(getLanguageStatus: BaseComplete<LanguageEntity>(data))); |
|||
}, |
|||
(error) { |
|||
emit(state.copyWith(getLanguageStatus: BaseError(error.errorMessage))); |
|||
}, |
|||
); |
|||
}, |
|||
); |
|||
} |
|||
} |
@ -0,0 +1,5 @@ |
|||
sealed class LanguageEvent { |
|||
const LanguageEvent(); |
|||
} |
|||
|
|||
class GetLanguageEvent extends LanguageEvent {} |
@ -0,0 +1,15 @@ |
|||
import 'package:hadi_hoda_flutter/core/status/base_status.dart'; |
|||
|
|||
class LanguageState { |
|||
final BaseStatus getLanguageStatus; |
|||
|
|||
const LanguageState({this.getLanguageStatus = const BaseInit()}); |
|||
|
|||
LanguageState copyWith({ |
|||
BaseStatus? getLanguageStatus, |
|||
}) { |
|||
return LanguageState( |
|||
getLanguageStatus: getLanguageStatus ?? this.getLanguageStatus, |
|||
); |
|||
} |
|||
} |
@ -0,0 +1,10 @@ |
|||
import 'package:flutter/material.dart'; |
|||
|
|||
class LanguagePage extends StatelessWidget { |
|||
const LanguagePage({super.key}); |
|||
|
|||
@override |
|||
Widget build(BuildContext context) { |
|||
return const Scaffold(); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue