Browse Source

add: save levels from json into database

pull/9/head
AmirrezaChegini 1 week ago
parent
commit
9df330cd1b
  1. 11
      lib/core/utils/my_scroll_behavior.dart
  2. 2
      lib/features/home/presentation/bloc/home_bloc.dart
  3. 29
      lib/features/intro/data/datasource/intro_datasource.dart
  4. 11
      lib/features/intro/presentation/bloc/intro_bloc.dart
  5. 17
      lib/features/intro/presentation/ui/intro_page.dart
  6. 4
      lib/features/level/presentation/bloc/level_bloc.dart
  7. 11
      lib/init_bindings.dart
  8. 2
      lib/main.dart

11
lib/core/utils/my_scroll_behavior.dart

@ -1,11 +0,0 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
class MyScrollBehavior extends ScrollBehavior {
@override
Set<PointerDeviceKind> get dragDevices => {
PointerDeviceKind.touch,
PointerDeviceKind.mouse,
PointerDeviceKind.trackpad,
};
}

2
lib/features/home/presentation/bloc/home_bloc.dart

@ -26,7 +26,7 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
/// ------------Functions------------
void goToLevelPage(BuildContext context){
context.go(Routes.levelPage);
context.pushNamed(Routes.levelPage);
}
/// ------------Api Calls------------

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

@ -1,4 +1,13 @@
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:hadi_hoda_flutter/core/constants/my_constants.dart';
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart';
import 'package:hadi_hoda_flutter/core/network/http_request.dart';
import 'package:hadi_hoda_flutter/core/response/base_response.dart';
import 'package:hadi_hoda_flutter/features/level/data/model/level_model.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hive/hive.dart';
abstract class IIntroDatasource {
Future<void> saveLevels();
@ -10,5 +19,23 @@ class IntroDatasourceImpl implements IIntroDatasource {
const IntroDatasourceImpl(this.httpRequest);
@override
Future<void> saveLevels() async {}
Future<void> saveLevels() async {
try {
final Box<LevelEntity> levelBox = Hive.box(MyConstants.levelBox);
if (levelBox.isEmpty) {
final String levelAssets = await rootBundle.loadString(
'assets/json/levels.json',
);
final dynamic response = jsonDecode(levelAssets);
final List<LevelEntity> levelList = BaseResponse.getDataList<LevelEntity>(
response?['result'],
(json) => LevelModel.fromJson(json),
);
await levelBox.addAll(levelList);
}
} catch (e) {
throw MyException(errorMessage: '$e');
}
}
}

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

@ -1,6 +1,9 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:go_router/go_router.dart';
import 'package:hadi_hoda_flutter/core/params/no_params.dart';
import 'package:hadi_hoda_flutter/core/routers/my_routes.dart';
import 'package:hadi_hoda_flutter/core/utils/context_provider.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';
@ -28,7 +31,13 @@ class IntroBloc extends Bloc<IntroEvent, IntroState> {
await _saveLevelsUseCase(NoParams()).then(
(value) {
value.fold(
(data) {},
(data) async {
await Future.delayed(
Duration(seconds: 1), () {
ContextProvider.context!.goNamed(Routes.homePage);
},
);
},
(error) {},
);
},

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

@ -1,12 +1,27 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart';
import 'package:hadi_hoda_flutter/core/utils/my_image.dart';
import 'package:hadi_hoda_flutter/core/utils/screen_size.dart';
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_bloc.dart';
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_event.dart';
import 'package:hadi_hoda_flutter/features/intro/presentation/ui/widgets/intro_loading_widget.dart';
class IntroPage extends StatelessWidget {
class IntroPage extends StatefulWidget {
const IntroPage({super.key});
@override
State<IntroPage> createState() => _IntroPageState();
}
class _IntroPageState extends State<IntroPage> {
@override
void initState() {
super.initState();
context.read<IntroBloc>().add(SaveLevelsEvent());
}
@override
Widget build(BuildContext context) {
return Scaffold(

4
lib/features/level/presentation/bloc/level_bloc.dart

@ -60,7 +60,9 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
value.fold(
(data) {
bottom8LevelList.addAll(data.take(8));
top12LevelList.addAll(data.sublist(8, 20));
if(data.length > 8){
top12LevelList.addAll(data.sublist(8, data.length));
}
emit(state.copyWith(getLevelStatus: const BaseComplete('')));
},
(error) {},

11
lib/init_bindings.dart

@ -7,6 +7,10 @@ import 'package:hadi_hoda_flutter/features/home/data/datasource/home_datasource.
import 'package:hadi_hoda_flutter/features/home/data/repository_impl/home_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/home/domain/repository/home_repository.dart';
import 'package:hadi_hoda_flutter/features/home/domain/usecases/get_home_usecase.dart';
import 'package:hadi_hoda_flutter/features/intro/data/datasource/intro_datasource.dart';
import 'package:hadi_hoda_flutter/features/intro/data/repository_impl/intro_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/intro/domain/repository/intro_repository.dart';
import 'package:hadi_hoda_flutter/features/intro/domain/usecases/save_levels_usecase.dart';
import 'package:hadi_hoda_flutter/features/level/data/datasource/level_datasource.dart';
import 'package:hadi_hoda_flutter/features/level/data/repository_impl/level_repository_impl.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
@ -38,6 +42,11 @@ void initBindings() {
locator.registerLazySingleton<ISampleRepository>(() => SampleRepositoryImpl(locator()));
locator.registerLazySingleton<GetSampleUseCase>(() => GetSampleUseCase(locator()));
/// Intro Feature
locator.registerLazySingleton<IIntroDatasource>(() => IntroDatasourceImpl(locator()));
locator.registerLazySingleton<IIntroRepository>(() => IntroRepositoryImpl(locator()));
locator.registerLazySingleton<SaveLevelsUseCase>(() => SaveLevelsUseCase(locator()));
/// Home Feature
locator.registerLazySingleton<IHomeDatasource>(() => HomeDatasourceImpl(locator()));
locator.registerLazySingleton<IHomeRepository>(() => HomeRepositoryImpl(locator()));
@ -49,7 +58,7 @@ void initBindings() {
locator.registerLazySingleton<GetQuestionUseCase>(() => GetQuestionUseCase(locator()));
/// Level Feature
locator.registerLazySingleton<ILevelDatasource>(() => LevelDatasourceImpl(locator()));
locator.registerLazySingleton<ILevelDatasource>(() => LocalLevelDatasourceImpl());
locator.registerLazySingleton<ILevelRepository>(() => LevelRepositoryImpl(locator()));
locator.registerLazySingleton<GetLevelUseCase>(() => GetLevelUseCase(locator()));
}

2
lib/main.dart

@ -7,7 +7,6 @@ import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:hadi_hoda_flutter/common_ui/theme/my_theme.dart';
import 'package:hadi_hoda_flutter/core/auth_storage/auth_storage.dart';
import 'package:hadi_hoda_flutter/core/routers/my_routes.dart';
import 'package:hadi_hoda_flutter/core/utils/my_scroll_behavior.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
@ -31,7 +30,6 @@ class MainApp extends StatelessWidget {
themeMode: ThemeService.getTheme(),
locale: const Locale('en', 'US'),
supportedLocales: const [Locale('en', 'US')],
scrollBehavior: MyScrollBehavior(),
routerConfig: appPages,
localizationsDelegates: const [
AppLocalizations.delegate,

Loading…
Cancel
Save