Browse Source

Merge pull request 'feature/home' (#14) from feature/home into develop

Reviewed-on: https://git.nwhco.ir/amirreza.chegini/hade_hoda_flutter/pulls/14
pull/15/head
amirreza.chegini 3 days ago
parent
commit
3f34aa06d3
  1. 1
      lib/core/constants/my_constants.dart
  2. 2
      lib/core/routers/my_routes.dart
  3. 2
      lib/core/widgets/about_us_dialog/about_us_dialog.dart
  4. 28
      lib/features/home/data/datasource/home_datasource.dart
  5. 13
      lib/features/home/data/model/home_model.dart
  6. 29
      lib/features/home/data/repository_impl/home_repository_impl.dart
  7. 14
      lib/features/home/domain/entity/home_entity.dart
  8. 8
      lib/features/home/domain/repository/home_repository.dart
  9. 17
      lib/features/home/domain/usecases/get_home_usecase.dart
  10. 28
      lib/features/home/presentation/bloc/home_bloc.dart
  11. 19
      lib/features/home/presentation/ui/home_page.dart
  12. 13
      lib/features/level/data/datasource/level_datasource.dart
  13. 58
      lib/features/level/presentation/bloc/level_bloc.dart
  14. 1
      lib/features/level/presentation/bloc/level_event.dart
  15. 22
      lib/features/level/presentation/ui/level_page.dart
  16. 7
      lib/init_bindings.dart
  17. 3
      lib/l10n/app_en.arb
  18. 6
      lib/l10n/app_localizations.dart
  19. 3
      lib/l10n/app_localizations_en.dart

1
lib/core/constants/my_constants.dart

@ -10,4 +10,5 @@ class MyConstants {
static const String extractCompleted = 'EXTRACT_COMPLETED'; static const String extractCompleted = 'EXTRACT_COMPLETED';
static const String selectLanguage = 'SELECT_LANGUAGE'; static const String selectLanguage = 'SELECT_LANGUAGE';
static const String firstLanguagePage = 'FIRST_LANGUAGE_PAGE'; static const String firstLanguagePage = 'FIRST_LANGUAGE_PAGE';
static const String currentLevel = 'CURRENT_LEVEL';
} }

2
lib/core/routers/my_routes.dart

@ -52,7 +52,7 @@ GoRouter get appPages => GoRouter(
name: Routes.homePage, name: Routes.homePage,
path: Routes.homePage, path: Routes.homePage,
builder: (context, state) => BlocProvider( builder: (context, state) => BlocProvider(
create: (context) => HomeBloc(locator()),
create: (context) => HomeBloc(),
child: const HomePage(), child: const HomePage(),
), ),
), ),

2
lib/core/widgets/about_us_dialog/about_us_dialog.dart

@ -58,7 +58,7 @@ class AboutUsDialog extends StatelessWidget {
), ),
MyImage( MyImage(
image: MyAssets.newHorizon, image: MyAssets.newHorizon,
size: 70,
size: 45,
), ),
MyImage( MyImage(
image: MyAssets.khadijeLogo, image: MyAssets.khadijeLogo,

28
lib/features/home/data/datasource/home_datasource.dart

@ -1,28 +0,0 @@
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/home_params.dart';
import 'package:hadi_hoda_flutter/core/response/base_response.dart';
import 'package:hadi_hoda_flutter/features/home/data/model/home_model.dart';
import 'package:hadi_hoda_flutter/features/home/domain/entity/home_entity.dart';
abstract class IHomeDatasource {
Future<HomeEntity> getData({required HomeParams params});
}
class HomeDatasourceImpl implements IHomeDatasource {
final IHttpRequest httpRequest;
const HomeDatasourceImpl(this.httpRequest);
@override
Future<HomeEntity> getData({required HomeParams params}) async {
final response = await httpRequest.get(
path: MyApi.baseUrl,
);
return BaseResponse.getData<HomeEntity>(
response?['data'],
(json) => HomeModel.fromJson(json),
);
}
}

13
lib/features/home/data/model/home_model.dart

@ -1,13 +0,0 @@
import 'package:hadi_hoda_flutter/features/home/domain/entity/home_entity.dart';
class HomeModel extends HomeEntity {
const HomeModel({
super.id,
});
factory HomeModel.fromJson(Map<String, dynamic> json) {
return HomeModel(
id: json['id'],
);
}
}

29
lib/features/home/data/repository_impl/home_repository_impl.dart

@ -1,29 +0,0 @@
import 'package:hadi_hoda_flutter/core/params/home_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/home/data/datasource/home_datasource.dart';
import 'package:hadi_hoda_flutter/features/home/domain/entity/home_entity.dart';
import 'package:hadi_hoda_flutter/features/home/domain/repository/home_repository.dart';
class HomeRepositoryImpl implements IHomeRepository {
final IHomeDatasource datasource;
const HomeRepositoryImpl(this.datasource);
@override
Future<DataState<HomeEntity, MyException>> getData({required HomeParams params}) async {
try {
final HomeEntity 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/home/domain/entity/home_entity.dart

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

8
lib/features/home/domain/repository/home_repository.dart

@ -1,8 +0,0 @@
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart';
import 'package:hadi_hoda_flutter/core/params/home_params.dart';
import 'package:hadi_hoda_flutter/core/utils/data_state.dart';
import 'package:hadi_hoda_flutter/features/home/domain/entity/home_entity.dart';
abstract class IHomeRepository {
Future<DataState<HomeEntity, MyException>> getData({required HomeParams params});
}

17
lib/features/home/domain/usecases/get_home_usecase.dart

@ -1,17 +0,0 @@
import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart';
import 'package:hadi_hoda_flutter/core/params/home_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/home/domain/entity/home_entity.dart';
import 'package:hadi_hoda_flutter/features/home/domain/repository/home_repository.dart';
class GetHomeUseCase implements UseCase<HomeEntity, HomeParams> {
final IHomeRepository repository;
const GetHomeUseCase(this.repository);
@override
Future<DataState<HomeEntity, MyException>> call(HomeParams params) {
return repository.getData(params: params);
}
}

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

@ -3,22 +3,17 @@ import 'package:bloc/bloc.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; import 'package:hadi_hoda_flutter/core/routers/my_routes.dart';
import 'package:hadi_hoda_flutter/core/status/base_status.dart';
import 'package:hadi_hoda_flutter/features/home/domain/entity/home_entity.dart';
import 'package:hadi_hoda_flutter/features/home/domain/usecases/get_home_usecase.dart';
import 'package:hadi_hoda_flutter/core/widgets/about_us_dialog/about_us_dialog.dart';
import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_event.dart'; import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_event.dart';
import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_state.dart'; import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_state.dart';
class HomeBloc extends Bloc<HomeEvent, HomeState> { class HomeBloc extends Bloc<HomeEvent, HomeState> {
/// ------------constructor------------ /// ------------constructor------------
HomeBloc(
this._getHomeUseCase,
) : super(const HomeState()) {
HomeBloc() : super(const HomeState()) {
on<GetHomeEvent>(_getHomeEvent); on<GetHomeEvent>(_getHomeEvent);
} }
/// ------------UseCases------------ /// ------------UseCases------------
final GetHomeUseCase _getHomeUseCase;
/// ------------Variables------------ /// ------------Variables------------
@ -33,19 +28,10 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
context.pushNamed(Routes.languagePage); context.pushNamed(Routes.languagePage);
} }
/// ------------Api Calls------------
FutureOr<void> _getHomeEvent(event, emit) async {
await _getHomeUseCase(event.homeParams).then(
(value) {
value.fold(
(data) {
emit(state.copyWith(getHomeStatus: BaseComplete<HomeEntity>(data)));
},
(error) {
emit(state.copyWith(getHomeStatus: BaseError(error.errorMessage)));
},
);
},
);
void showAboutUs(BuildContext context){
showAboutUsDialog(context: context);
} }
/// ------------Api Calls------------
FutureOr<void> _getHomeEvent(event, emit) async {}
} }

19
lib/features/home/presentation/ui/home_page.dart

@ -4,7 +4,10 @@ import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart';
import 'package:hadi_hoda_flutter/core/utils/check_platform.dart'; import 'package:hadi_hoda_flutter/core/utils/check_platform.dart';
import 'package:hadi_hoda_flutter/core/utils/my_image.dart'; import 'package:hadi_hoda_flutter/core/utils/my_image.dart';
import 'package:hadi_hoda_flutter/core/utils/my_localization.dart';
import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; import 'package:hadi_hoda_flutter/core/utils/screen_size.dart';
import 'package:hadi_hoda_flutter/core/widgets/button/enum/button_type.dart';
import 'package:hadi_hoda_flutter/core/widgets/button/my_button.dart';
import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_bloc.dart'; import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_bloc.dart';
class HomePage extends StatelessWidget { class HomePage extends StatelessWidget {
@ -77,17 +80,17 @@ class HomePage extends StatelessWidget {
size: checkSize(context: context, tablet: 120), size: checkSize(context: context, tablet: 120),
), ),
), ),
MyButton(
onTap: () => context.read<HomeBloc>().goToLevelPage(context),
type: ButtonType.type2,
title: context.translate.start,
),
InkWell( InkWell(
onTap: () => context.read<HomeBloc>().showAboutUs(context),
child: MyImage( child: MyImage(
image: MyAssets.button,
size: checkSize(context: context, mobile: 90, tablet: 160),
image: MyAssets.theme,
size: checkSize(context: context, tablet: 120),
), ),
onTap: () =>
BlocProvider.of<HomeBloc>(context).goToLevelPage(context),
),
MyImage(
image: MyAssets.theme,
size: checkSize(context: context, tablet: 120),
), ),
], ],
), ),

13
lib/features/level/data/datasource/level_datasource.dart

@ -1,7 +1,9 @@
import 'package:hadi_hoda_flutter/core/constants/my_constants.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/error_handler/my_exception.dart';
import 'package:hadi_hoda_flutter/core/params/level_params.dart'; import 'package:hadi_hoda_flutter/core/params/level_params.dart';
import 'package:hadi_hoda_flutter/core/utils/local_storage.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/total_data_entity.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
abstract class ILevelDatasource { abstract class ILevelDatasource {
@ -10,14 +12,19 @@ abstract class ILevelDatasource {
/// Local /// Local
class LocalLevelDatasourceImpl implements ILevelDatasource { class LocalLevelDatasourceImpl implements ILevelDatasource {
const LocalLevelDatasourceImpl(); const LocalLevelDatasourceImpl();
@override @override
Future<List<LevelEntity>> getLevels({required LevelParams params}) async { Future<List<LevelEntity>> getLevels({required LevelParams params}) async {
try { try {
final Box<LevelEntity> levelBox = Hive.box(MyConstants.levelBox);
return levelBox.values.toList();
final String selectedLanguage = LocalStorage.readData(
key: MyConstants.selectLanguage);
final Box<TotalDataEntity> levelBox = Hive.box(MyConstants.levelBox);
final TotalDataEntity findData = levelBox.values.singleWhere((e) =>
e.code == selectedLanguage,
orElse: () => TotalDataEntity(),
);
return findData.levels ?? [];
} catch (_) { } catch (_) {
throw MyException(errorMessage: 'Operation Failed'); throw MyException(errorMessage: 'Operation Failed');
} }

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

@ -2,14 +2,17 @@ import 'dart:async';
import 'package:bloc/bloc.dart'; import 'package:bloc/bloc.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hadi_hoda_flutter/core/constants/my_constants.dart';
import 'package:hadi_hoda_flutter/core/params/level_params.dart'; import 'package:hadi_hoda_flutter/core/params/level_params.dart';
import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; import 'package:hadi_hoda_flutter/core/routers/my_routes.dart';
import 'package:hadi_hoda_flutter/core/status/base_status.dart'; import 'package:hadi_hoda_flutter/core/status/base_status.dart';
import 'package:hadi_hoda_flutter/core/utils/local_storage.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_location.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/level_location.dart';
import 'package:hadi_hoda_flutter/features/level/domain/usecases/get_levels_usecase.dart'; import 'package:hadi_hoda_flutter/features/level/domain/usecases/get_levels_usecase.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_event.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_event.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart';
class LevelBloc extends Bloc<LevelEvent, LevelState> { class LevelBloc extends Bloc<LevelEvent, LevelState> {
/// ------------constructor------------ /// ------------constructor------------
@ -17,6 +20,7 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
this._getLeveslUseCase, this._getLeveslUseCase,
) : super(const LevelState()) { ) : super(const LevelState()) {
on<GetLevelListEvent>(_getLevelListEvent); on<GetLevelListEvent>(_getLevelListEvent);
on<StartScrollEvent>(_startScrollEvent);
} }
@override @override
@ -63,7 +67,6 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
final ScrollController scrollController = ScrollController(); final ScrollController scrollController = ScrollController();
/// ------------Functions------------ /// ------------Functions------------
void goToQuestionPage(BuildContext context, LevelEntity level){ void goToQuestionPage(BuildContext context, LevelEntity level){
context.pushNamed( context.pushNamed(
Routes.questionPage, Routes.questionPage,
@ -73,6 +76,25 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
); );
} }
void goToHomePage(BuildContext context){
context.pop();
}
LevelType getLevelType(int index) {
final int currentLevel = int.parse(LocalStorage
.readData(key: MyConstants.currentLevel)
.isEmpty ? '1' : LocalStorage
.readData(key: MyConstants.currentLevel));
if (index < currentLevel) {
return LevelType.finished;
} else if (index == currentLevel) {
return LevelType.current;
} else {
return LevelType.unFinished;
}
}
/// ------------Api Calls------------ /// ------------Api Calls------------
FutureOr<void> _getLevelListEvent(GetLevelListEvent event, FutureOr<void> _getLevelListEvent(GetLevelListEvent event,
Emitter<LevelState> emit) async { Emitter<LevelState> emit) async {
@ -87,15 +109,37 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
getLevelStatus: const BaseComplete(''), getLevelStatus: const BaseComplete(''),
chooseLevel: data.first, chooseLevel: data.first,
)); ));
await Future.delayed(Duration(milliseconds: 500));
scrollController.animateTo(
scrollController.position.maxScrollExtent,
duration: Duration(seconds: 1),
curve: Curves.easeInOut,
);
add(StartScrollEvent());
}, },
(error) {}, (error) {},
); );
}); });
} }
FutureOr<void> _startScrollEvent(
StartScrollEvent event,
Emitter<LevelState> emit,
) async {
final int currentLevel = int.parse(LocalStorage
.readData(key: MyConstants.currentLevel)
.isEmpty ? '1' : LocalStorage
.readData(key: MyConstants.currentLevel));
await Future.delayed(const Duration(seconds: 1));
if (scrollController.hasClients) {
if(currentLevel < 9){
scrollController.animateTo(
scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 500), // Note: 500 seconds is very long.
curve: Curves.easeInOut,
);
} else if( currentLevel > 8 && currentLevel < 14){
scrollController.animateTo(
scrollController.position.maxScrollExtent / 2,
duration: const Duration(milliseconds: 500), // Note: 500 seconds is very long.
curve: Curves.easeInOut,
);
}
}
}
} }

1
lib/features/level/presentation/bloc/level_event.dart

@ -5,6 +5,7 @@ sealed class LevelEvent {
} }
class GetLevelListEvent extends LevelEvent {} class GetLevelListEvent extends LevelEvent {}
class StartScrollEvent extends LevelEvent {}
class ChooseLevelEvent extends LevelEvent { class ChooseLevelEvent extends LevelEvent {
final LevelEntity level; final LevelEntity level;
const ChooseLevelEvent(this.level); const ChooseLevelEvent(this.level);

22
lib/features/level/presentation/ui/level_page.dart

@ -26,7 +26,7 @@ class LevelPage extends StatelessWidget {
alignment: Alignment.center, alignment: Alignment.center,
children: [ children: [
_background(), _background(),
// _topPath(context),
_topPath(context),
_bottomPath(context), _bottomPath(context),
], ],
), ),
@ -47,7 +47,7 @@ class LevelPage extends StatelessWidget {
return Positioned( return Positioned(
bottom: MediaQuery bottom: MediaQuery
.viewPaddingOf(context) .viewPaddingOf(context)
.bottom + 10,
.bottom + MySpaces.s10,
right: MySpaces.s16, right: MySpaces.s16,
left: MySpaces.s16, left: MySpaces.s16,
child: HintLevelWidget( child: HintLevelWidget(
@ -71,8 +71,11 @@ class LevelPage extends StatelessWidget {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
MyImage(
image: MyAssets.homeButton,
InkWell(
onTap: () => context.read<LevelBloc>().goToHomePage(context),
child: MyImage(
image: MyAssets.homeButton,
),
), ),
MyImage( MyImage(
image: MyAssets.musicOn, image: MyAssets.musicOn,
@ -107,9 +110,8 @@ class LevelPage extends StatelessWidget {
child: LevelWidget( child: LevelWidget(
index: context.read<LevelBloc>().topLocationList[index].index ?? 0, index: context.read<LevelBloc>().topLocationList[index].index ?? 0,
level: context.read<LevelBloc>().top12LevelList[index], level: context.read<LevelBloc>().top12LevelList[index],
onTap: (LevelEntity level) {
},
type: context.read<LevelBloc>().getLevelType(index + 9),
onTap: (LevelEntity level) {},
), ),
), ),
), ),
@ -141,10 +143,8 @@ class LevelPage extends StatelessWidget {
child: LevelWidget( child: LevelWidget(
index: context.read<LevelBloc>().bottomLocationList[index].index ?? 0, index: context.read<LevelBloc>().bottomLocationList[index].index ?? 0,
level: context.read<LevelBloc>().bottom8LevelList[index], level: context.read<LevelBloc>().bottom8LevelList[index],
type: index == 0 ? LevelType.current : LevelType.unFinished,
onTap: (LevelEntity level) {
},
type: context.read<LevelBloc>().getLevelType(index + 1),
onTap: (LevelEntity level) {},
), ),
), ),
), ),

7
lib/init_bindings.dart

@ -3,10 +3,6 @@ import 'dart:io';
import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; import 'package:hadi_hoda_flutter/core/constants/my_constants.dart';
import 'package:hadi_hoda_flutter/core/network/http_request.dart'; import 'package:hadi_hoda_flutter/core/network/http_request.dart';
import 'package:hadi_hoda_flutter/core/network/http_request_impl.dart'; import 'package:hadi_hoda_flutter/core/network/http_request_impl.dart';
import 'package:hadi_hoda_flutter/features/home/data/datasource/home_datasource.dart';
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/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/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/repository/intro_repository.dart';
@ -55,9 +51,6 @@ void initBindings() {
/// Language Feature /// Language Feature
/// Home Feature /// Home Feature
locator.registerLazySingleton<IHomeDatasource>(() => HomeDatasourceImpl(locator()));
locator.registerLazySingleton<IHomeRepository>(() => HomeRepositoryImpl(locator()));
locator.registerLazySingleton<GetHomeUseCase>(() => GetHomeUseCase(locator()));
/// Question Feature /// Question Feature
locator.registerLazySingleton<IQuestionDatasource>(() => QuestionDatasourceImpl(locator())); locator.registerLazySingleton<IQuestionDatasource>(() => QuestionDatasourceImpl(locator()));

3
lib/l10n/app_en.arb

@ -8,5 +8,6 @@
"downloading_data": "Downloading initial data", "downloading_data": "Downloading initial data",
"lost_connection": "Lost connection!", "lost_connection": "Lost connection!",
"try_again": "Try Again", "try_again": "Try Again",
"connected_to_internet": "You must be connected to the internet to download the initial game data."
"connected_to_internet": "You must be connected to the internet to download the initial game data.",
"start": "Start"
} }

6
lib/l10n/app_localizations.dart

@ -153,6 +153,12 @@ abstract class AppLocalizations {
/// In en, this message translates to: /// In en, this message translates to:
/// **'You must be connected to the internet to download the initial game data.'** /// **'You must be connected to the internet to download the initial game data.'**
String get connected_to_internet; String get connected_to_internet;
/// No description provided for @start.
///
/// In en, this message translates to:
/// **'Start'**
String get start;
} }
class _AppLocalizationsDelegate class _AppLocalizationsDelegate

3
lib/l10n/app_localizations_en.dart

@ -39,4 +39,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get connected_to_internet => String get connected_to_internet =>
'You must be connected to the internet to download the initial game data.'; 'You must be connected to the internet to download the initial game data.';
@override
String get start => 'Start';
} }
Loading…
Cancel
Save