Browse Source

add: login guest

pull/17/head
AmirrezaChegini 2 weeks ago
parent
commit
5290cd2b00
  1. 10
      ios/Podfile.lock
  2. 12
      lib/core/constants/my_api.dart
  3. 2
      lib/core/network/interceptors/token_interceptor.dart
  4. 8
      lib/core/params/awards_params.dart
  5. 8
      lib/core/params/bl_question_params.dart
  6. 14
      lib/core/params/home_params.dart
  7. 8
      lib/core/params/intro_params.dart
  8. 8
      lib/core/params/master_params.dart
  9. 8
      lib/core/params/profile_params.dart
  10. 8
      lib/core/params/sample_params.dart
  11. 8
      lib/core/params/shop_params.dart
  12. 8
      lib/core/params/topic_params.dart
  13. 10
      lib/core/status/base_status.dart
  14. 66
      lib/core/widgets/container/my_container.dart
  15. 20
      lib/core/widgets/input/my_input.dart
  16. 11
      lib/core/widgets/loading/my_loading.dart
  17. 19
      lib/features/home/data/datasource/home_datasource.dart
  18. 23
      lib/features/home/data/model/guest_player_model.dart
  19. 13
      lib/features/home/data/model/home_model.dart
  20. 10
      lib/features/home/data/repository_impl/home_repository_impl.dart
  21. 26
      lib/features/home/domain/entity/guest_player_entity.dart
  22. 14
      lib/features/home/domain/entity/home_entity.dart
  23. 4
      lib/features/home/domain/repository/home_repository.dart
  24. 10
      lib/features/home/domain/usecases/login_guest_usecase.dart
  25. 65
      lib/features/home/presentation/controller/home_controller.dart
  26. 16
      lib/features/home/presentation/pages/home_page.dart
  27. 80
      lib/features/home/presentation/pages/widgets/home_username_dialog.dart
  28. 10
      lib/init_bindings.dart
  29. 4
      lib/l10n/app_en.arb
  30. 12
      lib/l10n/app_localizations.dart
  31. 6
      lib/l10n/app_localizations_en.dart
  32. 2
      lib/main.dart

10
ios/Podfile.lock

@ -1,22 +1,22 @@
PODS:
- Flutter (1.0.0)
- path_provider_foundation (0.0.1):
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
DEPENDENCIES:
- Flutter (from `Flutter`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
EXTERNAL SOURCES:
Flutter:
:path: Flutter
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
SPEC CHECKSUMS:
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e

12
lib/core/constants/my_api.dart

@ -7,5 +7,15 @@ class MyApi {
static const String contentType = 'application/json';
static const String defaultError = 'An unexpected error has occurred.';
static const String baseUrl = 'https://api.BASE_URL.com';
static const String baseUrl = 'https://shiamind.newhorizonco.uk';
/// Backend
static const String backend = '/backend/api';
/// Topics
static const String topics = '$backend/topics/';
/// Tokens
static const String guestToken = '$backend/player/guest-token/';
static const String centrifugoToken = '$backend/player/centrifugo-connect/';
}

2
lib/core/network/interceptors/token_interceptor.dart

@ -4,7 +4,7 @@ import 'package:shia_game_flutter/core/auth_storage/auth_storage.dart';
class TokenInterceptor extends Interceptor {
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
options.headers['Authorization'] = 'Bearer ${AuthStorage.token}';
options.headers['X-Player-Token'] = AuthStorage.token;
handler.next(options);
}
}

8
lib/core/params/awards_params.dart

@ -2,12 +2,4 @@ class AwardsParams {
int? id;
AwardsParams({this.id});
AwardsParams copyWith({
int? id,
}) {
return AwardsParams(
id: id ?? this.id,
);
}
}

8
lib/core/params/bl_question_params.dart

@ -2,12 +2,4 @@ class BLQuestionParams {
int? id;
BLQuestionParams({this.id});
BLQuestionParams copyWith({
int? id,
}) {
return BLQuestionParams(
id: id ?? this.id,
);
}
}

14
lib/core/params/home_params.dart

@ -1,13 +1,9 @@
class HomeParams {
int? id;
String? username;
HomeParams({this.id});
HomeParams({this.username});
HomeParams copyWith({
int? id,
}) {
return HomeParams(
id: id ?? this.id,
);
}
Map<String, dynamic> get toGuestJson => {
if (username != null) 'username': username,
};
}

8
lib/core/params/intro_params.dart

@ -2,12 +2,4 @@ class IntroParams {
int? id;
IntroParams({this.id});
IntroParams copyWith({
int? id,
}) {
return IntroParams(
id: id ?? this.id,
);
}
}

8
lib/core/params/master_params.dart

@ -2,12 +2,4 @@ class MasterParams {
int? id;
MasterParams({this.id});
MasterParams copyWith({
int? id,
}) {
return MasterParams(
id: id ?? this.id,
);
}
}

8
lib/core/params/profile_params.dart

@ -2,12 +2,4 @@ class ProfileParams {
int? id;
ProfileParams({this.id});
ProfileParams copyWith({
int? id,
}) {
return ProfileParams(
id: id ?? this.id,
);
}
}

8
lib/core/params/sample_params.dart

@ -2,12 +2,4 @@ class SampleParams {
int? id;
SampleParams({this.id});
SampleParams copyWith({
int? id,
}) {
return SampleParams(
id: id ?? this.id,
);
}
}

8
lib/core/params/shop_params.dart

@ -2,12 +2,4 @@ class ShopParams {
int? id;
ShopParams({this.id});
ShopParams copyWith({
int? id,
}) {
return ShopParams(
id: id ?? this.id,
);
}
}

8
lib/core/params/topic_params.dart

@ -2,12 +2,4 @@ class TopicParams {
int? id;
TopicParams({this.id});
TopicParams copyWith({
int? id,
}) {
return TopicParams(
id: id ?? this.id,
);
}
}

10
lib/core/status/base_status.dart

@ -18,14 +18,10 @@ class BaseNotAuth extends BaseStatus {
const BaseNotAuth();
}
class BaseComplete<T> extends BaseStatus {
final T data;
const BaseComplete(this.data);
class BaseComplete extends BaseStatus {
const BaseComplete();
}
class BaseError extends BaseStatus {
final String errorMessage;
const BaseError(this.errorMessage);
const BaseError();
}

66
lib/core/widgets/container/my_container.dart

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:shia_game_flutter/common_ui/theme/my_theme.dart';
import 'package:shia_game_flutter/core/widgets/loading/my_loading.dart';
class MyContainer extends StatelessWidget {
const MyContainer({
@ -7,6 +8,7 @@ class MyContainer extends StatelessWidget {
this.width,
this.height,
this.padding,
this.margin,
this.boxShape,
this.borderGradient,
this.borderRadius,
@ -17,12 +19,13 @@ class MyContainer extends StatelessWidget {
this.gradient,
this.borderColor,
this.onTap,
this.inset,
this.loading = false,
});
final double? width;
final double? height;
final EdgeInsetsGeometry? padding;
final EdgeInsetsGeometry? margin;
final BoxShape? boxShape;
final Gradient? borderGradient;
final Gradient? gradient;
@ -33,44 +36,47 @@ class MyContainer extends StatelessWidget {
final Widget? child;
final DecorationImage? image;
final VoidCallback? onTap;
final bool? inset;
final bool loading;
@override
Widget build(BuildContext context) {
return Material(
color: context.noColor,
borderRadius: boxShape == BoxShape.circle
? const BorderRadius.all(Radius.circular(100))
: borderRadius,
shadowColor: boxShadow?.first.color,
elevation: boxShadow?.first.blurRadius ?? 0,
child: InkWell(
onTap: onTap,
customBorder: RoundedRectangleBorder(
borderRadius: boxShape == BoxShape.circle
? const BorderRadius.all(Radius.circular(100))
: borderRadius ?? BorderRadius.zero,
),
child: Ink(
padding: const EdgeInsets.all(1),
width: width,
height: height,
decoration: BoxDecoration(
shape: boxShape ?? BoxShape.rectangle,
gradient: borderGradient,
borderRadius: borderRadius,
color: borderColor,
return Padding(
padding: margin ?? EdgeInsets.zero,
child: Material(
color: context.noColor,
borderRadius: boxShape == BoxShape.circle
? const BorderRadius.all(Radius.circular(100))
: borderRadius,
shadowColor: boxShadow?.first.color,
elevation: boxShadow?.first.blurRadius ?? 0,
child: InkWell(
onTap: loading ? null : onTap,
customBorder: RoundedRectangleBorder(
borderRadius: boxShape == BoxShape.circle
? const BorderRadius.all(Radius.circular(100))
: borderRadius ?? BorderRadius.zero,
),
child: Ink(
padding: padding,
padding: const EdgeInsets.all(1),
width: width,
height: height,
decoration: BoxDecoration(
shape: boxShape ?? BoxShape.rectangle,
gradient: gradient,
gradient: borderGradient,
borderRadius: borderRadius,
color: color,
image: image,
color: borderColor,
),
child: Ink(
padding: padding,
decoration: BoxDecoration(
shape: boxShape ?? BoxShape.rectangle,
gradient: gradient,
borderRadius: borderRadius,
color: color,
image: image,
),
child: Center(child: loading ? const MyLoading() : child),
),
child: Center(child: child),
),
),
),

20
lib/core/widgets/input/my_input.dart

@ -14,7 +14,7 @@ class MyInput extends StatelessWidget {
this.validator,
this.onChanged,
this.onTap,
this.onEditingComplete,
this.onFieldSubmitted,
this.onTapOutside,
this.enabled,
this.readOnly,
@ -28,11 +28,11 @@ class MyInput extends StatelessWidget {
final bool? obscureText;
final TextInputType? keyboardType;
final TextInputAction? action;
final String? Function(String?)? validator;
final void Function(String)? onChanged;
final String? Function(String? value)? validator;
final void Function(String value)? onChanged;
final void Function()? onTap;
final void Function()? onEditingComplete;
final void Function(PointerDownEvent)? onTapOutside;
final void Function(String value)? onFieldSubmitted;
final void Function(PointerDownEvent event)? onTapOutside;
final bool? enabled;
final bool? readOnly;
final int? maxLines;
@ -52,16 +52,16 @@ class MyInput extends StatelessWidget {
TextFormField(
controller: controller,
obscureText: obscureText ?? false,
keyboardType: keyboardType,
textInputAction: action,
keyboardType: keyboardType ?? TextInputType.text,
textInputAction: action ?? TextInputAction.done,
validator: validator,
onChanged: onChanged,
onTap: onTap,
onEditingComplete: onEditingComplete,
onFieldSubmitted: onFieldSubmitted,
enabled: enabled,
readOnly: readOnly ?? false,
maxLines: maxLines,
minLines: minLines,
maxLines: maxLines ?? 1,
minLines: minLines ?? 1,
style: Lexend.extraBold.copyWith(fontSize: 12),
cursorColor: context.primaryColor,
decoration: InputDecoration(

11
lib/core/widgets/loading/my_loading.dart

@ -0,0 +1,11 @@
import 'package:flutter/cupertino.dart';
import 'package:shia_game_flutter/common_ui/resources/my_colors.dart';
class MyLoading extends StatelessWidget {
const MyLoading({super.key});
@override
Widget build(BuildContext context) {
return const CupertinoActivityIndicator(color: MyColors.white);
}
}

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

@ -2,11 +2,11 @@ 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/home_params.dart';
import 'package:shia_game_flutter/core/response/base_response.dart';
import 'package:shia_game_flutter/features/home/data/model/home_model.dart';
import 'package:shia_game_flutter/features/home/domain/entity/home_entity.dart';
import 'package:shia_game_flutter/features/home/data/model/guest_player_model.dart';
import 'package:shia_game_flutter/features/home/domain/entity/guest_player_entity.dart';
abstract class IHomeDatasource {
Future<HomeEntity> getData({required HomeParams params});
Future<GuestPlayerEntity> loginGuest({required HomeParams params});
}
class HomeDatasourceImpl implements IHomeDatasource {
@ -15,14 +15,15 @@ class HomeDatasourceImpl implements IHomeDatasource {
const HomeDatasourceImpl(this.httpRequest);
@override
Future<HomeEntity> getData({required HomeParams params}) async {
final response = await httpRequest.get(
path: MyApi.baseUrl,
Future<GuestPlayerEntity> loginGuest({required HomeParams params}) async {
final response = await httpRequest.post(
path: MyApi.guestToken,
data: params.toGuestJson,
);
return BaseResponse.getData<HomeEntity>(
response?['data'],
(json) => HomeModel.fromJson(json),
return BaseResponse.getData<GuestPlayerEntity>(
response,
(json) => GuestPlayerModel.fromJson(json),
);
}
}

23
lib/features/home/data/model/guest_player_model.dart

@ -0,0 +1,23 @@
import 'package:shia_game_flutter/features/home/domain/entity/guest_player_entity.dart';
class GuestPlayerModel extends GuestPlayerEntity {
const GuestPlayerModel({
super.playerID,
super.playerToken,
super.username,
super.isGuest,
super.createdAt,
});
factory GuestPlayerModel.fromJson(Map<String, dynamic> json) {
return GuestPlayerModel(
playerID: json['player_id'],
playerToken: json['player_token'],
username: json['username'],
isGuest: json['is_guest'],
createdAt: json['created_at'] == null
? null
: DateTime.parse(json['created_at']),
);
}
}

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

@ -1,13 +0,0 @@
import 'package:shia_game_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'],
);
}
}

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

@ -3,7 +3,7 @@ import 'package:shia_game_flutter/core/error_handler/my_exception.dart';
import 'package:shia_game_flutter/core/params/home_params.dart';
import 'package:shia_game_flutter/core/utils/data_state.dart';
import 'package:shia_game_flutter/features/home/data/datasource/home_datasource.dart';
import 'package:shia_game_flutter/features/home/domain/entity/home_entity.dart';
import 'package:shia_game_flutter/features/home/domain/entity/guest_player_entity.dart';
import 'package:shia_game_flutter/features/home/domain/repository/home_repository.dart';
class HomeRepositoryImpl implements IHomeRepository {
@ -12,9 +12,13 @@ class HomeRepositoryImpl implements IHomeRepository {
const HomeRepositoryImpl(this.datasource);
@override
Future<DataState<HomeEntity, MyException>> getData({required HomeParams params}) async {
Future<DataState<GuestPlayerEntity, MyException>> loginGuest({
required HomeParams params,
}) async {
try {
final HomeEntity response = await datasource.getData(params: params);
final GuestPlayerEntity response = await datasource.loginGuest(
params: params,
);
return DataState.success(response);
} on MyException catch (e) {
return DataState.error(e);

26
lib/features/home/domain/entity/guest_player_entity.dart

@ -0,0 +1,26 @@
import 'package:equatable/equatable.dart';
class GuestPlayerEntity extends Equatable {
final String? playerID;
final String? playerToken;
final String? username;
final bool? isGuest;
final DateTime? createdAt;
const GuestPlayerEntity({
this.playerID,
this.playerToken,
this.username,
this.isGuest,
this.createdAt,
});
@override
List<Object?> get props => [
playerID,
playerToken,
username,
isGuest,
createdAt,
];
}

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,
];
}

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

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

10
lib/features/home/domain/usecases/get_home_usecase.dart → lib/features/home/domain/usecases/login_guest_usecase.dart

@ -2,16 +2,16 @@ import 'package:shia_game_flutter/core/error_handler/my_exception.dart';
import 'package:shia_game_flutter/core/params/home_params.dart';
import 'package:shia_game_flutter/core/usecase/usecase.dart';
import 'package:shia_game_flutter/core/utils/data_state.dart';
import 'package:shia_game_flutter/features/home/domain/entity/home_entity.dart';
import 'package:shia_game_flutter/features/home/domain/entity/guest_player_entity.dart';
import 'package:shia_game_flutter/features/home/domain/repository/home_repository.dart';
class GetHomeUseCase implements UseCase<HomeEntity, HomeParams> {
class LoginGuestUseCase implements UseCase<GuestPlayerEntity, HomeParams> {
final IHomeRepository repository;
const GetHomeUseCase(this.repository);
const LoginGuestUseCase(this.repository);
@override
Future<DataState<HomeEntity, MyException>> call(HomeParams params) {
return repository.getData(params: params);
Future<DataState<GuestPlayerEntity, MyException>> call(HomeParams params) {
return repository.loginGuest(params: params);
}
}

65
lib/features/home/presentation/controller/home_controller.dart

@ -1,58 +1,75 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:shia_game_flutter/common_ui/resources/my_colors.dart';
import 'package:shia_game_flutter/core/auth_storage/auth_storage.dart';
import 'package:shia_game_flutter/core/params/home_params.dart';
import 'package:shia_game_flutter/core/routers/my_routes.dart';
import 'package:shia_game_flutter/core/status/base_status.dart';
import 'package:shia_game_flutter/features/home/domain/entity/home_entity.dart';
import 'package:shia_game_flutter/features/home/domain/usecases/get_home_usecase.dart';
import 'package:shia_game_flutter/features/home/presentation/pages/widgets/home_username_dialog.dart';
import 'package:shia_game_flutter/features/home/domain/entity/guest_player_entity.dart';
import 'package:shia_game_flutter/features/home/domain/usecases/login_guest_usecase.dart';
class HomeController extends GetxController with StateMixin {
class HomeController extends GetxController {
/// ----- Constructor -----
HomeController(this.getHomeUseCase);
HomeController(this._loginGuestUseCase);
@override
void onInit() {
super.onInit();
change('', status: RxStatus.success());
showUsernameDialog();
}
@override
void onClose() {
textEditingController.dispose();
usernameController.dispose();
super.onClose();
}
/// ----- UseCases -----
final GetHomeUseCase getHomeUseCase;
final LoginGuestUseCase _loginGuestUseCase;
/// ----- Variables -----
final Rx<HomeParams> homeParams = Rx(HomeParams());
final Rx<HomeEntity> homeEntity = Rx(const HomeEntity());
final HomeParams homeParams = HomeParams();
final Rx<GuestPlayerEntity> guestEntity = Rx(const GuestPlayerEntity());
/// ------ Controllers ------
final TextEditingController textEditingController = TextEditingController();
final TextEditingController usernameController = TextEditingController();
/// ------ Statuses ------
final Rx<BaseStatus> getHomeStatus = Rx(const BaseInit());
final Rx<BaseStatus> loginGuestStatus = Rx(const BaseInit());
/// ------ Functions ------
void goToBattleLeaguePage() {
Get.toNamed(Routes.battleLeaguePage);
}
/// ------ Api Calls ------
Future<void> getHome() async {
change('', status: RxStatus.loading());
await getHomeUseCase(homeParams.value).then(
(value) => value.fold(
(data) {
homeEntity.value = data;
change('', status: RxStatus.success());
},
(error) {
change('', status: RxStatus.error(error.errorMessage));
},
),
Future<void> showUsernameDialog() async {
await Future.delayed(const Duration(seconds: 1));
Get.dialog(
const UsernameDialog(),
useSafeArea: false,
barrierColor: MyColors.black.withValues(alpha: 0.7),
barrierDismissible: false,
);
}
/// ------ Api Calls ------
Future<void> loginGuest() async {
if (homeParams.username?.isNotEmpty ?? false) {
loginGuestStatus.value = const BaseLoading();
await _loginGuestUseCase(homeParams).then(
(value) => value.fold(
(data) async {
guestEntity.value = data;
await AuthStorage.saveData(newTokenParams: data.playerToken ?? '');
Get.back();
loginGuestStatus.value = const BaseComplete();
},
(error) {
loginGuestStatus.value = const BaseError();
},
),
);
}
}
}

16
lib/features/home/presentation/pages/home_page.dart

@ -21,12 +21,10 @@ class HomePage extends GetView<HomeController> {
return MyBackground(
child: Column(
children: [
const MyImage(asset: MyAssets.shiaMindGroup),
_image(),
40.h.gapHeight,
const HomeMembership(),
HomeBattleLeague(
onTap: controller.goToBattleLeaguePage,
),
_homeBattleLeague(),
20.h.gapHeight,
_customWidgets(context),
20.h.gapHeight,
@ -36,6 +34,16 @@ class HomePage extends GetView<HomeController> {
);
}
MyImage _image() {
return const MyImage(asset: MyAssets.shiaMindGroup);
}
HomeBattleLeague _homeBattleLeague() {
return HomeBattleLeague(
onTap: controller.goToBattleLeaguePage,
);
}
Widget _customWidgets(BuildContext context) {
return Row(
spacing: 20,

80
lib/features/home/presentation/pages/widgets/home_username_dialog.dart

@ -0,0 +1,80 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart';
import 'package:shia_game_flutter/core/status/base_status.dart';
import 'package:shia_game_flutter/core/utils/my_localization.dart';
import 'package:shia_game_flutter/core/utils/screen_size.dart';
import 'package:shia_game_flutter/core/widgets/container/my_container.dart';
import 'package:shia_game_flutter/core/widgets/input/my_input.dart';
import 'package:shia_game_flutter/core/widgets/text/gradient_text.dart';
import 'package:shia_game_flutter/features/home/presentation/controller/home_controller.dart';
class UsernameDialog extends GetView<HomeController> {
const UsernameDialog({super.key});
@override
Widget build(BuildContext context) {
return MyContainer(
padding: const EdgeInsets.only(left: 30, right: 30, bottom: 30, top: 13),
margin: EdgeInsets.symmetric(horizontal: 30.w, vertical: 290.h),
borderGradient: const LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Color(0XFF6013DA), Color(0XFF4908B0)],
),
gradient: const RadialGradient(
radius: 1,
colors: [Color(0XFF4F09BF), Color(0XFF350D73)],
),
borderRadius: const BorderRadius.all(Radius.circular(40)),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
context.translate.welcome,
style: Lexend.extraBold.copyWith(
fontSize: 18,
color: const Color(0XFFBAA3DD),
),
),
MyInput(
controller: controller.usernameController,
labelText: context.translate.username,
onFieldSubmitted: (value) {
controller.loginGuest();
},
onChanged: (value) {
controller.homeParams.username = value;
},
),
Obx(
() => MyContainer(
onTap: controller.loginGuest,
height: 41.h,
loading: controller.loginGuestStatus.value is BaseLoading,
borderRadius: const BorderRadius.all(Radius.circular(12)),
gradient: const RadialGradient(
radius: 4,
center: Alignment(-0.3, 0),
colors: [Color(0XFF6A36BF), Color(0XFF562A9E)],
),
borderGradient: LinearGradient(
begin: AlignmentDirectional.topStart,
end: AlignmentDirectional.bottomEnd,
colors: [
const Color(0XFF7F4CD4),
const Color(0XFF7F4CD4).withValues(alpha: 0),
],
),
child: GradientText(
text: context.translate.done,
color: const Color(0XFFB69CDE),
),
),
),
],
),
);
}
}

10
lib/init_bindings.dart

@ -16,7 +16,7 @@ import 'package:shia_game_flutter/features/battle_league/question_part/bl_questi
import 'package:shia_game_flutter/features/home/data/datasource/home_datasource.dart';
import 'package:shia_game_flutter/features/home/data/repository_impl/home_repository_impl.dart';
import 'package:shia_game_flutter/features/home/domain/repository/home_repository.dart';
import 'package:shia_game_flutter/features/home/domain/usecases/get_home_usecase.dart';
import 'package:shia_game_flutter/features/home/domain/usecases/login_guest_usecase.dart';
import 'package:shia_game_flutter/features/intro/data/datasource/intro_datasource.dart';
import 'package:shia_game_flutter/features/intro/data/repository_impl/intro_repository_impl.dart';
import 'package:shia_game_flutter/features/intro/domain/repository/intro_repository.dart';
@ -53,14 +53,14 @@ void initBindings() {
Get.lazyPut<GetIntroUseCase>(() => GetIntroUseCase(Get.find()));
/// ----- Master Feature -----
Get.lazyPut<IMasterDatasource>(() => MasterDatasourceImpl(Get.find()));
Get.lazyPut<IMasterRepository>(() => MasterRepositoryImpl(Get.find()));
Get.lazyPut<GetMasterUseCase>(() => GetMasterUseCase(Get.find()));
Get.lazyPut<IMasterDatasource>(() => MasterDatasourceImpl(Get.find()), fenix: true);
Get.lazyPut<IMasterRepository>(() => MasterRepositoryImpl(Get.find()), fenix: true);
Get.lazyPut<GetMasterUseCase>(() => GetMasterUseCase(Get.find()), fenix: true);
/// ----- Home Feature -----
Get.lazyPut<IHomeDatasource>(() => HomeDatasourceImpl(Get.find()), fenix: true);
Get.lazyPut<IHomeRepository>(() => HomeRepositoryImpl(Get.find()), fenix: true);
Get.lazyPut<GetHomeUseCase>(() => GetHomeUseCase(Get.find()), fenix: true);
Get.lazyPut<LoginGuestUseCase>(() => LoginGuestUseCase(Get.find()), fenix: true);
/// ----- Shop Feature -----
Get.lazyPut<IShopDatasource>(() => ShopDatasourceImpl(Get.find()), fenix: true);

4
lib/l10n/app_en.arb

@ -49,5 +49,7 @@
"quiz_league": "Quiz league",
"your_place": "Your place",
"finding_player": "Finding player ...",
"find_hint": "The fastest player to answer the question correctly gets the point."
"find_hint": "The fastest player to answer the question correctly gets the point.",
"welcome": "Welcome",
"done": "Done"
}

12
lib/l10n/app_localizations.dart

@ -393,6 +393,18 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'The fastest player to answer the question correctly gets the point.'**
String get find_hint;
/// No description provided for @welcome.
///
/// In en, this message translates to:
/// **'Welcome'**
String get welcome;
/// No description provided for @done.
///
/// In en, this message translates to:
/// **'Done'**
String get done;
}
class _AppLocalizationsDelegate

6
lib/l10n/app_localizations_en.dart

@ -158,4 +158,10 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get find_hint =>
'The fastest player to answer the question correctly gets the point.';
@override
String get welcome => 'Welcome';
@override
String get done => 'Done';
}

2
lib/main.dart

@ -31,7 +31,7 @@ class MainApp extends StatelessWidget {
fallbackLocale: const Locale('en', 'US'),
supportedLocales: const [Locale('en', 'US')],
getPages: appPages,
initialRoute: Routes.battleLeagueQuestionPage,
initialRoute: Routes.masterPage,
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,

Loading…
Cancel
Save