diff --git a/assets/svg/close.svg b/assets/svg/close.svg new file mode 100644 index 0000000..6d8fa28 --- /dev/null +++ b/assets/svg/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/done.svg b/assets/svg/done.svg new file mode 100644 index 0000000..dcf1527 --- /dev/null +++ b/assets/svg/done.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/polygon.svg b/assets/svg/polygon.svg new file mode 100644 index 0000000..a5ad9f3 --- /dev/null +++ b/assets/svg/polygon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/timer.svg b/assets/svg/timer.svg new file mode 100644 index 0000000..2c3297d --- /dev/null +++ b/assets/svg/timer.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/common_ui/resources/my_assets.dart b/lib/common_ui/resources/my_assets.dart index 7e76912..5bd452a 100644 --- a/lib/common_ui/resources/my_assets.dart +++ b/lib/common_ui/resources/my_assets.dart @@ -70,6 +70,10 @@ class MyAssets { static const String iconRandom = 'assets/svg/icon_random.svg'; static const String magnifier = 'assets/svg/magnifier.svg'; static const String iconIran = 'assets/svg/icon_iran.svg'; + static const String polygon = 'assets/svg/polygon.svg'; + static const String close = 'assets/svg/close.svg'; + static const String doneWhite = 'assets/svg/done.svg'; + static const String timer = 'assets/svg/timer.svg'; /// ----- Audios ----- static const String sampleAudio = 'assets/audios/sample.mp3'; diff --git a/lib/core/params/bl_question_params.dart b/lib/core/params/bl_question_params.dart new file mode 100644 index 0000000..aea905b --- /dev/null +++ b/lib/core/params/bl_question_params.dart @@ -0,0 +1,13 @@ +class BLQuestionParams { + int? id; + + BLQuestionParams({this.id}); + + BLQuestionParams copyWith({ + int? id, + }) { + return BLQuestionParams( + id: id ?? this.id, + ); + } +} diff --git a/lib/core/routers/my_routes.dart b/lib/core/routers/my_routes.dart index 76ac69b..e3dfcf1 100644 --- a/lib/core/routers/my_routes.dart +++ b/lib/core/routers/my_routes.dart @@ -5,6 +5,8 @@ import 'package:shia_game_flutter/features/battle_league/first_part/presentation import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_founded_page.dart'; import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_page.dart'; import 'package:shia_game_flutter/features/battle_league/first_part/presentation/ui/battle_league_topic_page.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart'; import 'package:shia_game_flutter/features/home/presentation/binding/home_binding.dart'; import 'package:shia_game_flutter/features/home/presentation/pages/home_page.dart'; import 'package:shia_game_flutter/features/intro/presentation/binding/intro_binding.dart'; @@ -37,6 +39,7 @@ class Routes { static const String battleLeagueTopicPage = '/battle_league_topic_page'; static const String battleLeagueFindingPage = '/battle_league_finding_page'; static const String battleLeagueFoundedPage = '/battle_league_founded_page'; + static const String battleLeagueQuestionPage = '/battle_league_question_page'; } final List appPages = [ @@ -97,4 +100,9 @@ final List appPages = [ page: () => const BattleLeagueFoundedPage(), binding: BattleLeagueBinding(), ), + GetPage( + name: Routes.battleLeagueQuestionPage, + page: () => const BLQuestionPage(), + binding: BLQuestionBinding(), + ), ]; diff --git a/lib/core/widgets/stepper/my_stepper.dart b/lib/core/widgets/stepper/my_stepper.dart new file mode 100644 index 0000000..7564628 --- /dev/null +++ b/lib/core/widgets/stepper/my_stepper.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/core/utils/screen_size.dart'; +import 'package:shia_game_flutter/core/widgets/stepper/styles/my_step_default_item.dart'; + +class MyStepper extends StatelessWidget { + const MyStepper({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + height: 30.h, + width: context.widthScreen, + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: 16.w), + decoration: const ShapeDecoration( + shape: StadiumBorder(), + color: Color(0XFF3A1570), + ), + child: Stack( + alignment: Alignment.center, + children: [ + Container( + height: 3.h, + width: context.widthScreen, + decoration: const ShapeDecoration( + shape: StadiumBorder(), + color: Color(0XFF2B0D57), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: List.generate( + 10, + (index) => const MyStepDefaultItem(), + ), + ), + ], + ), + ); + } +} diff --git a/lib/core/widgets/stepper/styles/my_step_correct_item.dart b/lib/core/widgets/stepper/styles/my_step_correct_item.dart new file mode 100644 index 0000000..61ee6d1 --- /dev/null +++ b/lib/core/widgets/stepper/styles/my_step_correct_item.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_colors.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; + +class MyStepCorrectItem extends StatelessWidget { + const MyStepCorrectItem({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + height: 16, + width: 16, + padding: const EdgeInsets.all(3), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: const Color(0XFF0BA310), + border: Border.all( + width: 1, + color: const Color(0XFF3DE543), + strokeAlign: BorderSide.strokeAlignInside, + ), + ), + child: const MyImage(asset: MyAssets.done, color: MyColors.white), + ); + } +} diff --git a/lib/core/widgets/stepper/styles/my_step_current_item.dart b/lib/core/widgets/stepper/styles/my_step_current_item.dart new file mode 100644 index 0000000..cd6d12a --- /dev/null +++ b/lib/core/widgets/stepper/styles/my_step_current_item.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_colors.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; + +class MyStepCurrentItem extends StatelessWidget { + const MyStepCurrentItem({super.key}); + + @override + Widget build(BuildContext context) { + return Stack( + clipBehavior: Clip.none, + alignment: Alignment.center, + children: [ + Container( + width: 16, + height: 16, + padding: const EdgeInsets.all(4), + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Color(0XFF2B0D57), + ), + child: Container( + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: MyColors.white, + ), + ), + ), + const Positioned(top: -12, child: MyImage(asset: MyAssets.polygon)), + ], + ); + } +} diff --git a/lib/core/widgets/stepper/styles/my_step_default_item.dart b/lib/core/widgets/stepper/styles/my_step_default_item.dart new file mode 100644 index 0000000..9d8b49c --- /dev/null +++ b/lib/core/widgets/stepper/styles/my_step_default_item.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +class MyStepDefaultItem extends StatelessWidget { + const MyStepDefaultItem({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + width: 8, + height: 8, + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Color(0XFFA86CFF), + ), + ); + } +} diff --git a/lib/core/widgets/stepper/styles/my_step_wrong_item.dart b/lib/core/widgets/stepper/styles/my_step_wrong_item.dart new file mode 100644 index 0000000..b4ed4aa --- /dev/null +++ b/lib/core/widgets/stepper/styles/my_step_wrong_item.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_colors.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; + +class MyStepWrongItem extends StatelessWidget { + const MyStepWrongItem({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + height: 16, + width: 16, + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: const Color(0XFFA30B0B), + border: Border.all( + width: 1, + color: const Color(0XFFE53D3D), + strokeAlign: BorderSide.strokeAlignInside, + ), + ), + child: const MyImage(asset: MyAssets.close, color: MyColors.white), + ); + } +} diff --git a/lib/core/widgets/text/gradient_text.dart b/lib/core/widgets/text/gradient_text.dart index 8d8b2f6..f8cc5fc 100644 --- a/lib/core/widgets/text/gradient_text.dart +++ b/lib/core/widgets/text/gradient_text.dart @@ -16,6 +16,8 @@ class GradientText extends StatelessWidget { this.offset = Offset.zero, this.textAlign, this.textStyle, + this.begin, + this.end, }); final String? text; @@ -28,20 +30,22 @@ class GradientText extends StatelessWidget { final Offset offset; final TextAlign? textAlign; final TextStyle? textStyle; + final AlignmentGeometry? begin; + final AlignmentGeometry? end; @override Widget build(BuildContext context) { return ShaderMask( blendMode: BlendMode.modulate, shaderCallback: (bounds) => LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, + begin: begin ?? Alignment.topCenter, + end: end ?? Alignment.bottomCenter, colors: gradientColor ?? [ context.primaryColor, context.primaryColor, color, ], - ).createShader(bounds), + ).createShader(bounds, textDirection: Directionality.of(context)), child: Text( text ?? '', textAlign: textAlign, diff --git a/lib/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart b/lib/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart new file mode 100644 index 0000000..bd224d8 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart @@ -0,0 +1,28 @@ +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/bl_question_params.dart'; +import 'package:shia_game_flutter/core/response/base_response.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; + +abstract class IBLQuestionDatasource { + Future getData({required BLQuestionParams params}); +} + +class BLQuestionDatasourceImpl implements IBLQuestionDatasource { + final IHttpRequest httpRequest; + + const BLQuestionDatasourceImpl(this.httpRequest); + + @override + Future getData({required BLQuestionParams params}) async { + final response = await httpRequest.get( + path: MyApi.baseUrl, + ); + + return BaseResponse.getData( + response?['data'], + (json) => BLQuestionModel.fromJson(json), + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart b/lib/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart new file mode 100644 index 0000000..99ffc46 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/data/model/bl_question_model.dart @@ -0,0 +1,13 @@ +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; + +class BLQuestionModel extends BLQuestionEntity { + const BLQuestionModel({ + super.id, + }); + + factory BLQuestionModel.fromJson(Map json) { + return BLQuestionModel( + id: json['id'], + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart b/lib/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart new file mode 100644 index 0000000..d3291f9 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart @@ -0,0 +1,29 @@ +import 'package:flutter/foundation.dart'; +import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; +import 'package:shia_game_flutter/core/params/bl_question_params.dart'; +import 'package:shia_game_flutter/core/utils/data_state.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart'; + +class BLQuestionRepositoryImpl implements IBLQuestionRepository { + final IBLQuestionDatasource datasource; + + const BLQuestionRepositoryImpl(this.datasource); + + @override + Future> getData({required BLQuestionParams params}) async { + try { + final BLQuestionEntity 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')); + } + } + } +} diff --git a/lib/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart b/lib/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart new file mode 100644 index 0000000..7818664 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart @@ -0,0 +1,14 @@ +import 'package:equatable/equatable.dart'; + +class BLQuestionEntity extends Equatable { + final int? id; + + const BLQuestionEntity({ + this.id, + }); + + @override + List get props => [ + id, + ]; +} diff --git a/lib/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart b/lib/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart new file mode 100644 index 0000000..bc1ce21 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart @@ -0,0 +1,8 @@ +import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; +import 'package:shia_game_flutter/core/params/bl_question_params.dart'; +import 'package:shia_game_flutter/core/utils/data_state.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; + +abstract class IBLQuestionRepository { + Future> getData({required BLQuestionParams params}); +} diff --git a/lib/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart b/lib/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart new file mode 100644 index 0000000..6e4c11e --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart @@ -0,0 +1,19 @@ +import 'package:shia_game_flutter/core/error_handler/my_exception.dart'; +import 'package:shia_game_flutter/core/params/bl_question_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/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart'; + +class GetBLQuestionUseCase implements UseCase { + final IBLQuestionRepository repository; + + const GetBLQuestionUseCase(this.repository); + + @override + Future> call(BLQuestionParams params) { + return repository.getData(params: params); + } +} + + diff --git a/lib/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart b/lib/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart new file mode 100644 index 0000000..38440b7 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/binding/bl_question_binding.dart @@ -0,0 +1,20 @@ +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart'; +import 'package:get/get.dart'; + +class BLQuestionBinding extends Bindings { + @override + void dependencies() { + Get.put(BLQuestionController(Get.find())); + } + + Future deleteBindings() async { + await Future.wait([ + Get.delete(), + ]); + } + + Future refreshBinding() async { + await deleteBindings(); + dependencies(); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart b/lib/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart new file mode 100644 index 0000000..d6a42e0 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart @@ -0,0 +1,54 @@ +import 'package:flutter/cupertino.dart'; +import 'package:shia_game_flutter/core/params/bl_question_params.dart'; +import 'package:shia_game_flutter/core/status/base_status.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/entity/bl_question_entity.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart'; +import 'package:get/get.dart'; + +class BLQuestionController extends GetxController with StateMixin { + /// ----- Constructor ----- + BLQuestionController(this.getBLQuestionUseCase); + + @override + void onInit() { + super.onInit(); + change('', status: RxStatus.success()); + } + + @override + void onClose() { + textEditingController.dispose(); + super.onClose(); + } + + /// ----- UseCases ----- + final GetBLQuestionUseCase getBLQuestionUseCase; + + /// ----- Variables ----- + final Rx bLQuestionParams = Rx(BLQuestionParams()); + final Rx bLQuestionEntity = Rx(const BLQuestionEntity()); + + /// ------ Controllers ------ + final TextEditingController textEditingController = TextEditingController(); + + /// ------ Statuses ------ + final Rx getBLQuestionStatus = Rx(const BaseInit()); + + /// ------ Functions ------ + + /// ------ Api Calls ------ + Future getBLQuestion() async { + change('', status: RxStatus.loading()); + await getBLQuestionUseCase(bLQuestionParams.value).then( + (value) => value.fold( + (data) { + bLQuestionEntity.value = data; + change('', status: RxStatus.success()); + }, + (error) { + change('', status: RxStatus.error(error.errorMessage)); + }, + ), + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart b/lib/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart new file mode 100644 index 0000000..df10388 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/ui/bl_question_page.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:shia_game_flutter/core/widgets/stepper/my_stepper.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/controller/bl_question_controller.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart'; + +class BLQuestionPage extends GetView { + const BLQuestionPage({super.key}); + + @override + Widget build(BuildContext context) { + return const Scaffold( + body: DecoratedBox( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [Color(0XFF390F72), Color(0XFF160C30)], + ), + ), + child: SafeArea( + child: Column( + children: [ + QuestionBoard(), + MyStepper(), + QuestionTimerReadyWidget(), + ], + ), + ), + ), + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart new file mode 100644 index 0000000..e8a32a7 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_colors.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; +import 'package:shia_game_flutter/core/utils/screen_size.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; + +class BattleLeagueQuestionAvatar extends StatelessWidget { + const BattleLeagueQuestionAvatar({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + spacing: 12.h, + children: [ + Stack( + alignment: Alignment.center, + clipBehavior: Clip.none, + children: [ + Container( + height: 48, + width: 48, + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all(width: 2, color: MyColors.white), + ), + child: const CircleAvatar( + foregroundImage: AssetImage(MyAssets.character1), + ), + ), + const Positioned( + bottom: -7, + child: MyImage(asset: MyAssets.iconIran), + ), + ], + ), + Text('Jack William', style: Lexend.bold.copyWith(fontSize: 10.sp)), + ], + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart new file mode 100644 index 0000000..1d9c398 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_board.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; +import 'package:shia_game_flutter/core/utils/screen_size.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/presentation/ui/widgets/battle_league_question_avatar.dart'; + +class QuestionBoard extends StatelessWidget { + const QuestionBoard({super.key}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 30.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const BattleLeagueQuestionAvatar(), + Column( + children: [ + Text('6 - 4', style: Lexend.bold.copyWith(fontSize: 30.sp)), + Text( + 'Question 5', + style: Lexend.regular.copyWith( + fontSize: 10.sp, + color: const Color(0XFF9273C0), + ), + ), + ], + ), + const BattleLeagueQuestionAvatar(), + ], + ), + ); + } +} diff --git a/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart new file mode 100644 index 0000000..4979219 --- /dev/null +++ b/lib/features/battle_league/question_part/bl_question/presentation/ui/widgets/question_timer_ready_widget.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_assets.dart'; +import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart'; +import 'package:shia_game_flutter/core/utils/screen_size.dart'; +import 'package:shia_game_flutter/core/widgets/image/my_image.dart'; +import 'package:shia_game_flutter/core/widgets/text/gradient_text.dart'; + +class QuestionTimerReadyWidget extends StatelessWidget { + const QuestionTimerReadyWidget({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + spacing: 12.h, + children: [ + Stack( + alignment: Alignment.center, + children: [ + const MyImage(asset: MyAssets.timer), + Positioned( + left: 28.w, + top: 26.h, + child: Text( + '5', + style: Lexend.extraBold.copyWith( + fontSize: 48.sp, + color: const Color(0XFFF3EBFF), + ), + ), + ), + ], + ), + GradientText( + text: 'Be Ready', + begin: AlignmentDirectional.topStart, + end: AlignmentDirectional.bottomEnd, + gradientColor: [const Color(0XFFE0CCFF), const Color(0XFF7860A1)], + textStyle: Lexend.semiBold.copyWith(fontSize: 16.sp), + ), + ], + ); + } +} diff --git a/lib/init_bindings.dart b/lib/init_bindings.dart index fc1df7e..8cf4318 100644 --- a/lib/init_bindings.dart +++ b/lib/init_bindings.dart @@ -9,6 +9,10 @@ import 'package:shia_game_flutter/features/battle_league/first_part/data/datasou import 'package:shia_game_flutter/features/battle_league/first_part/data/repository_impl/battle_league_repository_impl.dart'; import 'package:shia_game_flutter/features/battle_league/first_part/domain/repository/battle_league_repository.dart'; import 'package:shia_game_flutter/features/battle_league/first_part/domain/usecases/get_battle_league_usecase.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/data/datasource/bl_question_datasource.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/data/repository_impl/bl_question_repository_impl.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/repository/bl_question_repository.dart'; +import 'package:shia_game_flutter/features/battle_league/question_part/bl_question/domain/usecases/get_bl_question_usecase.dart'; 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'; @@ -77,4 +81,9 @@ void initBindings() { Get.lazyPut(() => BattleLeagueDatasourceImpl(Get.find()), fenix: true); Get.lazyPut(() => BattleLeagueRepositoryImpl(Get.find()), fenix: true); Get.lazyPut(() => GetBattleLeagueUseCase(Get.find()), fenix: true); + + /// ----- BattleLeagueQuestion Feature ----- + Get.lazyPut(() => BLQuestionDatasourceImpl(Get.find()), fenix: true); + Get.lazyPut(() => BLQuestionRepositoryImpl(Get.find()), fenix: true); + Get.lazyPut(() => GetBLQuestionUseCase(Get.find()), fenix: true); } diff --git a/lib/main.dart b/lib/main.dart index dedefa7..5285cf3 100644 --- a/lib/main.dart +++ b/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.introPage, + initialRoute: Routes.battleLeagueQuestionPage, localizationsDelegates: const [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate,