Browse Source

add: intro feature

pull/9/head
AmirrezaChegini 1 week ago
parent
commit
67fdfcf17c
  1. 1
      lib/core/params/no_params.dart
  2. 13
      lib/core/routers/my_routes.dart
  3. 14
      lib/features/intro/data/datasource/intro_datasource.dart
  4. 28
      lib/features/intro/data/repository_impl/intro_repository_impl.dart
  5. 7
      lib/features/intro/domain/repository/intro_repository.dart
  6. 16
      lib/features/intro/domain/usecases/save_levels_usecase.dart
  7. 37
      lib/features/intro/presentation/bloc/intro_bloc.dart
  8. 5
      lib/features/intro/presentation/bloc/intro_event.dart
  9. 15
      lib/features/intro/presentation/bloc/intro_state.dart
  10. 10
      lib/features/intro/presentation/ui/intro_page.dart

1
lib/core/params/no_params.dart

@ -0,0 +1 @@
class NoParams {}

13
lib/core/routers/my_routes.dart

@ -3,6 +3,8 @@ import 'package:go_router/go_router.dart';
import 'package:hadi_hoda_flutter/core/utils/context_provider.dart';
import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_bloc.dart';
import 'package:hadi_hoda_flutter/features/home/presentation/ui/home_page.dart';
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_bloc.dart';
import 'package:hadi_hoda_flutter/features/intro/presentation/ui/intro_page.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_bloc.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_event.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/level_page.dart';
@ -15,15 +17,24 @@ class Routes {
const Routes._internal();
factory Routes() => _i;
static const String introPage = '/intro_page';
static const String homePage = '/home_page';
static const String questionPage = '/question_page';
static const String levelPage = '/level_page';
}
GoRouter get appPages => GoRouter(
initialLocation: Routes.homePage,
initialLocation: Routes.introPage,
navigatorKey: ContextProvider.navigatorKey,
routes: [
GoRoute(
name: Routes.introPage,
path: Routes.introPage,
builder: (context, state) => BlocProvider(
create: (context) => IntroBloc(locator()),
child: const IntroPage(),
),
),
GoRoute(
name: Routes.homePage,
path: Routes.homePage,

14
lib/features/intro/data/datasource/intro_datasource.dart

@ -0,0 +1,14 @@
import 'package:hadi_hoda_flutter/core/network/http_request.dart';
abstract class IIntroDatasource {
Future<void> saveLevels();
}
class IntroDatasourceImpl implements IIntroDatasource {
final IHttpRequest httpRequest;
const IntroDatasourceImpl(this.httpRequest);
@override
Future<void> saveLevels() async {}
}

28
lib/features/intro/data/repository_impl/intro_repository_impl.dart

@ -0,0 +1,28 @@
import 'package:flutter/foundation.dart';
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart';
import 'package:hadi_hoda_flutter/core/params/no_params.dart';
import 'package:hadi_hoda_flutter/core/utils/data_state.dart';
import 'package:hadi_hoda_flutter/features/intro/data/datasource/intro_datasource.dart';
import 'package:hadi_hoda_flutter/features/intro/domain/repository/intro_repository.dart';
class IntroRepositoryImpl implements IIntroRepository {
final IIntroDatasource datasource;
const IntroRepositoryImpl(this.datasource);
@override
Future<DataState<NoParams, MyException>> saveLevels() async {
try {
await datasource.saveLevels();
return DataState.success(NoParams());
} on MyException catch (e) {
return DataState.error(e);
} catch (e) {
if (kDebugMode) {
rethrow;
} else {
return DataState.error(MyException(errorMessage: '$e'));
}
}
}
}

7
lib/features/intro/domain/repository/intro_repository.dart

@ -0,0 +1,7 @@
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart';
import 'package:hadi_hoda_flutter/core/params/no_params.dart';
import 'package:hadi_hoda_flutter/core/utils/data_state.dart';
abstract class IIntroRepository {
Future<DataState<NoParams, MyException>> saveLevels();
}

16
lib/features/intro/domain/usecases/save_levels_usecase.dart

@ -0,0 +1,16 @@
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart';
import 'package:hadi_hoda_flutter/core/params/no_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/intro/domain/repository/intro_repository.dart';
class SaveLevelsUseCase implements UseCase<NoParams, NoParams> {
final IIntroRepository repository;
const SaveLevelsUseCase(this.repository);
@override
Future<DataState<NoParams, MyException>> call(NoParams params) {
return repository.saveLevels();
}
}

37
lib/features/intro/presentation/bloc/intro_bloc.dart

@ -0,0 +1,37 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:hadi_hoda_flutter/core/params/no_params.dart';
import 'package:hadi_hoda_flutter/features/intro/domain/usecases/save_levels_usecase.dart';
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_event.dart';
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_state.dart';
class IntroBloc extends Bloc<IntroEvent, IntroState> {
/// ------------constructor------------
IntroBloc(
this._saveLevelsUseCase,
) : super(const IntroState()) {
on<SaveLevelsEvent>(_saveLevelsEvent);
}
/// ------------UseCases------------
final SaveLevelsUseCase _saveLevelsUseCase;
/// ------------Variables------------
/// ------------Controllers------------
/// ------------Functions------------
/// ------------Api Calls------------
FutureOr<void> _saveLevelsEvent(SaveLevelsEvent event,
Emitter<IntroState> emit) async {
await _saveLevelsUseCase(NoParams()).then(
(value) {
value.fold(
(data) {},
(error) {},
);
},
);
}
}

5
lib/features/intro/presentation/bloc/intro_event.dart

@ -0,0 +1,5 @@
sealed class IntroEvent {
const IntroEvent();
}
class SaveLevelsEvent extends IntroEvent {}

15
lib/features/intro/presentation/bloc/intro_state.dart

@ -0,0 +1,15 @@
import 'package:hadi_hoda_flutter/core/status/base_status.dart';
class IntroState {
final BaseStatus getIntroStatus;
const IntroState({this.getIntroStatus = const BaseInit()});
IntroState copyWith({
BaseStatus? getIntroStatus,
}) {
return IntroState(
getIntroStatus: getIntroStatus ?? this.getIntroStatus,
);
}
}

10
lib/features/intro/presentation/ui/intro_page.dart

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class IntroPage extends StatelessWidget {
const IntroPage({super.key});
@override
Widget build(BuildContext context) {
return const Scaffold();
}
}
Loading…
Cancel
Save