diff --git a/assets/images/electro.png b/assets/images/electro.png
new file mode 100644
index 0000000..d497717
Binary files /dev/null and b/assets/images/electro.png differ
diff --git a/assets/images/union.png b/assets/images/union.png
new file mode 100644
index 0000000..7893b6d
Binary files /dev/null and b/assets/images/union.png differ
diff --git a/assets/images/vs.png b/assets/images/vs.png
new file mode 100644
index 0000000..0be3d5c
Binary files /dev/null and b/assets/images/vs.png differ
diff --git a/assets/svg/icon_iran.svg b/assets/svg/icon_iran.svg
new file mode 100644
index 0000000..70d7ea0
--- /dev/null
+++ b/assets/svg/icon_iran.svg
@@ -0,0 +1,33 @@
+
diff --git a/lib/common_ui/resources/my_assets.dart b/lib/common_ui/resources/my_assets.dart
index 8c30640..7e76912 100644
--- a/lib/common_ui/resources/my_assets.dart
+++ b/lib/common_ui/resources/my_assets.dart
@@ -31,6 +31,9 @@ class MyAssets {
static const String member4 = 'assets/images/member_4.png';
static const String done = 'assets/images/done.png';
static const String worldMap = 'assets/images/world_map.png';
+ static const String union = 'assets/images/union.png';
+ static const String vs = 'assets/images/vs.png';
+ static const String electro = 'assets/images/electro.png';
/// ----- Svg -----
static const String iconHome = 'assets/svg/icon_home.svg';
@@ -66,6 +69,7 @@ class MyAssets {
static const String iconArt = 'assets/svg/icon_art.svg';
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';
/// ----- Audios -----
static const String sampleAudio = 'assets/audios/sample.mp3';
diff --git a/lib/core/routers/my_routes.dart b/lib/core/routers/my_routes.dart
index 528cf69..3116ea5 100644
--- a/lib/core/routers/my_routes.dart
+++ b/lib/core/routers/my_routes.dart
@@ -1,5 +1,7 @@
import 'package:shia_game_flutter/features/awards/presentation/binding/awards_binding.dart';
import 'package:shia_game_flutter/features/awards/presentation/ui/awards_page.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/battle_league_finding_page.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/battle_league_founded_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';
@@ -15,8 +17,7 @@ import 'package:shia_game_flutter/features/battle_league/presentation/ui/battle_
import 'package:get/get.dart';
import 'package:shia_game_flutter/features/shop/presentation/binding/shop_binding.dart';
import 'package:shia_game_flutter/features/shop/presentation/ui/shop_page.dart';
-import 'package:shia_game_flutter/features/topic/presentation/binding/topic_binding.dart';
-import 'package:shia_game_flutter/features/topic/presentation/ui/topic_page.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/battle_league_topic_page.dart';
class Routes {
static const Routes _i = Routes._internal();
@@ -30,8 +31,12 @@ class Routes {
static const String shopPage = '/shop_page';
static const String awardsPage = '/awards_page';
static const String profilePage = '/profile_page';
+
+ /// Battle league
static const String battleLeaguePage = '/battle_league_page';
- static const String topicPage = '/topic_page';
+ static const String battleLeagueTopicPage = '/battle_league_topic_page';
+ static const String battleLeagueFindingPage = '/battle_league_finding_page';
+ static const String battleLeagueFoundedPage = '/battle_league_founded_page';
}
final List appPages = [
@@ -78,8 +83,18 @@ final List appPages = [
binding: BattleLeagueBinding(),
),
GetPage(
- name: Routes.topicPage,
- page: () => const TopicPage(),
- binding: TopicBinding(),
+ name: Routes.battleLeagueTopicPage,
+ page: () => const BattleLeagueTopicPage(),
+ binding: BattleLeagueBinding(),
+ ),
+ GetPage(
+ name: Routes.battleLeagueFindingPage,
+ page: () => const BattleLeagueFindingPage(),
+ binding: BattleLeagueBinding(),
+ ),
+ GetPage(
+ name: Routes.battleLeagueFoundedPage,
+ page: () => const BattleLeagueFoundedPage(),
+ binding: BattleLeagueBinding(),
),
];
diff --git a/lib/core/widgets/loading/my_linear_loading.dart b/lib/core/widgets/loading/my_linear_loading.dart
new file mode 100644
index 0000000..514b177
--- /dev/null
+++ b/lib/core/widgets/loading/my_linear_loading.dart
@@ -0,0 +1,61 @@
+import 'package:flutter/material.dart';
+import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart';
+import 'package:shia_game_flutter/core/utils/my_localization.dart';
+import 'package:shia_game_flutter/core/utils/screen_size.dart';
+
+class MyLinearLoading extends StatelessWidget {
+ const MyLinearLoading({
+ super.key,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ return Column(
+ spacing: 10.h,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Text(
+ context.translate.loading,
+ style: Lexend.regular.copyWith(fontSize: 12.sp),
+ ),
+ Container(
+ width: 188.w,
+ height: 16.h,
+ padding: const EdgeInsetsDirectional.only(
+ start: 2,
+ top: 2,
+ bottom: 2,
+ end: 20,
+ ),
+ decoration: const ShapeDecoration(
+ shape: StadiumBorder(
+ side: BorderSide(
+ width: 1,
+ color: Color(0XFFA579EA),
+ ),
+ ),
+ ),
+ child: Container(
+ height: 14.h,
+ decoration: ShapeDecoration(
+ shape: StadiumBorder(
+ side: BorderSide(
+ width: 1,
+ color: Colors.white.withValues(alpha: 0.5),
+ ),
+ ),
+ gradient: const LinearGradient(
+ begin: AlignmentDirectional.centerStart,
+ end: AlignmentDirectional.centerEnd,
+ colors: [
+ Color(0XFF9C7EEC),
+ Color(0XFF3BBDFF),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ],
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/features/battle_league/presentation/controller/battle_league_controller.dart b/lib/features/battle_league/presentation/controller/battle_league_controller.dart
index 55786f4..fd49a0f 100644
--- a/lib/features/battle_league/presentation/controller/battle_league_controller.dart
+++ b/lib/features/battle_league/presentation/controller/battle_league_controller.dart
@@ -40,7 +40,14 @@ class BattleLeagueController extends GetxController
/// ------ Functions ------
void goToTopicPage(){
- Get.toNamed(Routes.topicPage);
+ Get.toNamed(Routes.battleLeagueTopicPage);
+ }
+
+ void goToFindingPage(){
+ Get.toNamed(Routes.battleLeagueFindingPage);
+ }
+ void goToFoundedPage(){
+ Get.toNamed(Routes.battleLeagueFoundedPage);
}
/// ------ Api Calls ------
diff --git a/lib/features/battle_league/presentation/ui/battle_find_page.dart b/lib/features/battle_league/presentation/ui/battle_find_page.dart
deleted file mode 100644
index 6a4f3a9..0000000
--- a/lib/features/battle_league/presentation/ui/battle_find_page.dart
+++ /dev/null
@@ -1,140 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:get/get.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/gap.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/image/my_image.dart';
-import 'package:shia_game_flutter/core/widgets/text/gradient_text.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart';
-
-class BattleFindPage extends GetView {
- const BattleFindPage({super.key});
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- backgroundColor: MyColors.battleLeagueBackgroundColor,
- body: SafeArea(
- child: Padding(
- padding: const EdgeInsets.symmetric(horizontal: 30),
- child: Column(
- children: [
- 20.h.gapHeight,
- _rankTitle(context),
- const Spacer(),
- _findingImage(context),
- const Spacer(),
- _description(context),
- 37.h.gapHeight,
- const BattlePurpleButton(),
- ],
- ),
- ),
- ),
- );
- }
-
- Container _rankTitle(BuildContext context) {
- return Container(
- height: 42.h,
- width: context.widthScreen,
- alignment: Alignment.center,
- padding: const EdgeInsets.symmetric(horizontal: 17),
- decoration: const ShapeDecoration(
- shape: StadiumBorder(),
- color: Color(0XFF2E0869),
- ),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Expanded(
- child: FittedBox(
- child: Text(
- '${context.translate.quiz_league} (june) | ${context.translate.your_place} (1,569)',
- textAlign: TextAlign.center,
- maxLines: 1,
- style: Lexend.semiBold.copyWith(fontSize: 12.sp),
- ),
- ),
- ),
- 15.w.gapWidth,
- const MyImage(asset: MyAssets.iconRank),
- 4.w.gapWidth,
- Text('265', style: Lexend.bold.copyWith(fontSize: 12.sp)),
- ],
- ),
- );
- }
-
- Widget _findingImage(BuildContext context) {
- return Stack(
- alignment: Alignment.center,
- children: [
- const MyImage(asset: MyAssets.worldMap),
- const MyImage(asset: MyAssets.magnifier),
- Positioned(
- bottom: 0,
- child: Text(
- context.translate.finding_player,
- style: Lexend.semiBold.copyWith(fontSize: 20.sp),
- ),
- ),
- ],
- );
- }
-
- Column _description(BuildContext context) {
- return Column(
- children: [
- Text('،،', style: Lexend.black.copyWith(fontSize: 84.sp, height: 1)),
- Text(
- context.translate.find_hint,
- textAlign: TextAlign.center,
- style: Lexend.regular.copyWith(
- fontSize: 14.sp,
- color: const Color(0XFFC9B7E8),
- ),
- ),
- ],
- );
- }
-}
-
-class BattlePurpleButton extends StatelessWidget {
- const BattlePurpleButton({super.key});
-
- @override
- Widget build(BuildContext context) {
- return MyContainer(
- onTap: () {},
- width: context.widthScreen,
- height: 64.h,
- borderRadius: const BorderRadius.all(Radius.circular(20)),
- borderGradient: LinearGradient(
- begin: AlignmentDirectional.topStart,
- end: AlignmentDirectional.bottomEnd,
- colors: [
- const Color(0XFF7F4CD4),
- const Color(0XFF7F4CD4).withValues(alpha: 0),
- ],
- ),
- gradient: const RadialGradient(
- radius: 5,
- center: Alignment(-0.5, 0),
- colors: [Color(0xFF6A36BF), Color(0xFF562A9E)],
- ),
- child: GradientText(
- text: context.translate.stop_finding,
- fontSize: 22.sp,
- color: const Color(0xFFE1E1E1),
- offset: const Offset(0, 1.04),
- blurRadius: 1.9,
- shadowColor: const Color(0xFF898989),
- ),
- );
- }
-}
diff --git a/lib/features/battle_league/presentation/ui/battle_league_finding_page.dart b/lib/features/battle_league/presentation/ui/battle_league_finding_page.dart
new file mode 100644
index 0000000..47fbe38
--- /dev/null
+++ b/lib/features/battle_league/presentation/ui/battle_league_finding_page.dart
@@ -0,0 +1,80 @@
+import 'package:flutter/material.dart';
+import 'package:get/get.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/gap.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/image/my_image.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/button/battle_purple_button.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/rank_title.dart';
+
+class BattleLeagueFindingPage extends GetView {
+ const BattleLeagueFindingPage({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ backgroundColor: MyColors.battleLeagueBackgroundColor,
+ body: SafeArea(
+ child: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 30),
+ child: Column(
+ children: [
+ 20.h.gapHeight,
+ const RankTitle(),
+ const Spacer(),
+ _findingImage(context),
+ const Spacer(),
+ _description(context),
+ 37.h.gapHeight,
+ _startFindingButton(context),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+
+ Widget _findingImage(BuildContext context) {
+ return Stack(
+ alignment: Alignment.center,
+ children: [
+ const MyImage(asset: MyAssets.worldMap),
+ const MyImage(asset: MyAssets.magnifier),
+ Positioned(
+ bottom: 0,
+ child: Text(
+ context.translate.finding_player,
+ style: Lexend.semiBold.copyWith(fontSize: 20.sp),
+ ),
+ ),
+ ],
+ );
+ }
+
+ Column _description(BuildContext context) {
+ return Column(
+ children: [
+ Text('،،', style: Lexend.black.copyWith(fontSize: 84.sp, height: 1)),
+ Text(
+ context.translate.find_hint,
+ textAlign: TextAlign.center,
+ style: Lexend.regular.copyWith(
+ fontSize: 14.sp,
+ color: const Color(0XFFC9B7E8),
+ ),
+ ),
+ ],
+ );
+ }
+
+ Widget _startFindingButton(BuildContext context) {
+ return BattlePurpleButton(
+ label: context.translate.stop_finding,
+ onTap: controller.goToFoundedPage,
+ );
+ }
+}
diff --git a/lib/features/battle_league/presentation/ui/battle_league_founded_page.dart b/lib/features/battle_league/presentation/ui/battle_league_founded_page.dart
new file mode 100644
index 0000000..c809007
--- /dev/null
+++ b/lib/features/battle_league/presentation/ui/battle_league_founded_page.dart
@@ -0,0 +1,59 @@
+import 'package:flutter/material.dart';
+import 'package:get/get.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/utils/gap.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/loading/my_linear_loading.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/founded_page/founded_avatar.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/rank_title.dart';
+
+class BattleLeagueFoundedPage extends GetView {
+ const BattleLeagueFoundedPage({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ backgroundColor: MyColors.battleLeagueBackgroundColor,
+ body: DecoratedBox(
+ decoration: const BoxDecoration(
+ image: DecorationImage(image: AssetImage(MyAssets.union)),
+ ),
+ child: SafeArea(
+ child: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 30),
+ child: Column(
+ children: [
+ 20.h.gapHeight,
+ const RankTitle(),
+ 50.h.gapHeight,
+ const FoundedAvatar(),
+ _image(),
+ const FoundedAvatar(),
+ 50.h.gapHeight,
+ const MyLinearLoading(),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ Flexible _image() {
+ return Flexible(
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ Transform.scale(
+ scale: 2,
+ child: const MyImage(asset: MyAssets.electro, fit: BoxFit.cover),
+ ),
+ const MyImage(asset: MyAssets.vs),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/features/battle_league/presentation/ui/battle_league_page.dart b/lib/features/battle_league/presentation/ui/battle_league_page.dart
index 0b335dc..caa64f2 100644
--- a/lib/features/battle_league/presentation/ui/battle_league_page.dart
+++ b/lib/features/battle_league/presentation/ui/battle_league_page.dart
@@ -7,10 +7,10 @@ import 'package:shia_game_flutter/core/utils/screen_size.dart';
import 'package:shia_game_flutter/core/widgets/app_bar/enums/app_bar_type.dart';
import 'package:shia_game_flutter/core/widgets/app_bar/my_app_bar.dart';
import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/battle_league_start_button.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/battle_league_tab_bar.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/regional_ranking.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/time_ranking.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/battle_league_tab_bar.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/regional_ranking.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/time_ranking.dart';
class BattleLeaguePage extends GetView {
const BattleLeaguePage({super.key});
@@ -75,7 +75,7 @@ class BattleLeaguePage extends GetView {
Padding _startButton(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 30),
- child: BattleLeagueStartButton(
+ child: BattleGoldenButton(
title: context.translate.play_now,
onTap: controller.goToTopicPage,
),
diff --git a/lib/features/topic/presentation/ui/topic_page.dart b/lib/features/battle_league/presentation/ui/battle_league_topic_page.dart
similarity index 82%
rename from lib/features/topic/presentation/ui/topic_page.dart
rename to lib/features/battle_league/presentation/ui/battle_league_topic_page.dart
index e934dd7..cb76ea9 100644
--- a/lib/features/topic/presentation/ui/topic_page.dart
+++ b/lib/features/battle_league/presentation/ui/battle_league_topic_page.dart
@@ -8,13 +8,13 @@ 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/app_bar/enums/app_bar_type.dart';
import 'package:shia_game_flutter/core/widgets/app_bar/my_app_bar.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/battle_league_start_button.dart';
-import 'package:shia_game_flutter/features/topic/presentation/controller/topic_controller.dart';
-import 'package:shia_game_flutter/features/topic/presentation/ui/widgets/battle_grey_button.dart';
-import 'package:shia_game_flutter/features/topic/presentation/ui/widgets/topic_widget.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/controller/battle_league_controller.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/button/battle_grey_button.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/topic_page/topic_widget.dart';
-class TopicPage extends GetView {
- const TopicPage({super.key});
+class BattleLeagueTopicPage extends GetView {
+ const BattleLeagueTopicPage({super.key});
@override
Widget build(BuildContext context) {
@@ -104,7 +104,10 @@ class TopicPage extends GetView {
Widget _startButton(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 30),
- child: BattleLeagueStartButton(title: context.translate.start_finding),
+ child: BattleGoldenButton(
+ onTap: controller.goToFindingPage,
+ title: context.translate.start_finding,
+ ),
);
}
}
diff --git a/lib/features/battle_league/presentation/ui/widgets/battle_league_start_button.dart b/lib/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart
similarity index 93%
rename from lib/features/battle_league/presentation/ui/widgets/battle_league_start_button.dart
rename to lib/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart
index 49e09a7..cbdd417 100644
--- a/lib/features/battle_league/presentation/ui/widgets/battle_league_start_button.dart
+++ b/lib/features/battle_league/presentation/ui/widgets/button/battle_golden_button.dart
@@ -3,8 +3,8 @@ 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/text/gradient_text.dart';
-class BattleLeagueStartButton extends StatelessWidget {
- const BattleLeagueStartButton({
+class BattleGoldenButton extends StatelessWidget {
+ const BattleGoldenButton({
super.key,
this.onTap,
this.title,
diff --git a/lib/features/topic/presentation/ui/widgets/battle_grey_button.dart b/lib/features/battle_league/presentation/ui/widgets/button/battle_grey_button.dart
similarity index 100%
rename from lib/features/topic/presentation/ui/widgets/battle_grey_button.dart
rename to lib/features/battle_league/presentation/ui/widgets/button/battle_grey_button.dart
diff --git a/lib/features/battle_league/presentation/ui/widgets/button/battle_purple_button.dart b/lib/features/battle_league/presentation/ui/widgets/button/battle_purple_button.dart
new file mode 100644
index 0000000..1b71eca
--- /dev/null
+++ b/lib/features/battle_league/presentation/ui/widgets/button/battle_purple_button.dart
@@ -0,0 +1,42 @@
+import 'package:flutter/material.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/text/gradient_text.dart';
+
+class BattlePurpleButton extends StatelessWidget {
+ const BattlePurpleButton({super.key, this.onTap, this.label});
+
+ final VoidCallback? onTap;
+ final String? label;
+
+ @override
+ Widget build(BuildContext context) {
+ return MyContainer(
+ onTap: onTap,
+ width: context.widthScreen,
+ height: 64.h,
+ borderRadius: const BorderRadius.all(Radius.circular(20)),
+ borderGradient: LinearGradient(
+ begin: AlignmentDirectional.topStart,
+ end: AlignmentDirectional.bottomEnd,
+ colors: [
+ const Color(0XFF7F4CD4),
+ const Color(0XFF7F4CD4).withValues(alpha: 0),
+ ],
+ ),
+ gradient: const RadialGradient(
+ radius: 5,
+ center: Alignment(-0.5, 0),
+ colors: [Color(0xFF6A36BF), Color(0xFF562A9E)],
+ ),
+ child: GradientText(
+ text: label,
+ fontSize: 22.sp,
+ color: const Color(0xFFE1E1E1),
+ offset: const Offset(0, 1.04),
+ blurRadius: 1.9,
+ shadowColor: const Color(0xFF898989),
+ ),
+ );
+ }
+}
diff --git a/lib/features/battle_league/presentation/ui/widgets/founded_page/founded_avatar.dart b/lib/features/battle_league/presentation/ui/widgets/founded_page/founded_avatar.dart
new file mode 100644
index 0000000..f08115e
--- /dev/null
+++ b/lib/features/battle_league/presentation/ui/widgets/founded_page/founded_avatar.dart
@@ -0,0 +1,63 @@
+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/gap.dart';
+import 'package:shia_game_flutter/core/utils/screen_size.dart';
+import 'package:shia_game_flutter/core/widgets/image/my_image.dart';
+
+class FoundedAvatar extends StatelessWidget {
+ const FoundedAvatar({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Column(
+ children: [
+ Stack(
+ alignment: Alignment.center,
+ clipBehavior: Clip.none,
+ children: [
+ Container(
+ width: 106,
+ height: 106,
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ border: Border.all(width: 1, color: MyColors.white),
+ ),
+ child: const CircleAvatar(
+ foregroundImage: AssetImage(MyAssets.character1),
+ ),
+ ),
+ Positioned(
+ top: -10,
+ child: Container(
+ padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 4),
+ decoration: const ShapeDecoration(
+ shape: StadiumBorder(),
+ color: MyColors.white,
+ ),
+ child: Text(
+ '2,567',
+ style: Lexend.semiBold.copyWith(
+ fontSize: 12.sp,
+ color: const Color(0XFF784AC0),
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ 16.h.gapHeight,
+ Text('Jack William', style: Lexend.bold.copyWith(fontSize: 16.sp)),
+ Row(
+ mainAxisSize: MainAxisSize.min,
+ spacing: 10,
+ children: [
+ const MyImage(asset: MyAssets.iconIran),
+ Text('Iran', style: Lexend.medium.copyWith(fontSize: 14.sp)),
+ ],
+ ),
+ ],
+ );
+ }
+}
diff --git a/lib/features/battle_league/presentation/ui/widgets/battle_league_tab_bar.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/battle_league_tab_bar.dart
similarity index 100%
rename from lib/features/battle_league/presentation/ui/widgets/battle_league_tab_bar.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/battle_league_tab_bar.dart
diff --git a/lib/features/battle_league/presentation/ui/widgets/filter_ranking_button.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/filter_ranking_button.dart
similarity index 100%
rename from lib/features/battle_league/presentation/ui/widgets/filter_ranking_button.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/filter_ranking_button.dart
diff --git a/lib/features/battle_league/presentation/ui/widgets/my_ranking_widget.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/my_ranking_widget.dart
similarity index 100%
rename from lib/features/battle_league/presentation/ui/widgets/my_ranking_widget.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/my_ranking_widget.dart
diff --git a/lib/features/battle_league/presentation/ui/widgets/ranking_region.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/ranking_region.dart
similarity index 100%
rename from lib/features/battle_league/presentation/ui/widgets/ranking_region.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/ranking_region.dart
diff --git a/lib/features/battle_league/presentation/ui/widgets/ranking_scrollbar.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/ranking_scrollbar.dart
similarity index 100%
rename from lib/features/battle_league/presentation/ui/widgets/ranking_scrollbar.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/ranking_scrollbar.dart
diff --git a/lib/features/battle_league/presentation/ui/widgets/ranking_time.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/ranking_time.dart
similarity index 100%
rename from lib/features/battle_league/presentation/ui/widgets/ranking_time.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/ranking_time.dart
diff --git a/lib/features/battle_league/presentation/ui/widgets/ranking_widget.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/ranking_widget.dart
similarity index 100%
rename from lib/features/battle_league/presentation/ui/widgets/ranking_widget.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/ranking_widget.dart
diff --git a/lib/features/battle_league/presentation/ui/widgets/regional_ranking.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/regional_ranking.dart
similarity index 91%
rename from lib/features/battle_league/presentation/ui/widgets/regional_ranking.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/regional_ranking.dart
index 6ec324a..39b9954 100644
--- a/lib/features/battle_league/presentation/ui/widgets/regional_ranking.dart
+++ b/lib/features/battle_league/presentation/ui/widgets/main_page/regional_ranking.dart
@@ -2,11 +2,11 @@ import 'package:flutter/material.dart';
import 'package:shia_game_flutter/core/utils/gap.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/features/battle_league/presentation/ui/widgets/filter_ranking_button.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/my_ranking_widget.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/ranking_region.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/ranking_scrollbar.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/ranking_widget.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/filter_ranking_button.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/my_ranking_widget.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_region.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_scrollbar.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_widget.dart';
class RegionalRanking extends StatefulWidget {
const RegionalRanking({super.key});
diff --git a/lib/features/battle_league/presentation/ui/widgets/time_ranking.dart b/lib/features/battle_league/presentation/ui/widgets/main_page/time_ranking.dart
similarity index 91%
rename from lib/features/battle_league/presentation/ui/widgets/time_ranking.dart
rename to lib/features/battle_league/presentation/ui/widgets/main_page/time_ranking.dart
index 953bdd3..fae3447 100644
--- a/lib/features/battle_league/presentation/ui/widgets/time_ranking.dart
+++ b/lib/features/battle_league/presentation/ui/widgets/main_page/time_ranking.dart
@@ -2,11 +2,11 @@ import 'package:flutter/material.dart';
import 'package:shia_game_flutter/core/utils/gap.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/features/battle_league/presentation/ui/widgets/filter_ranking_button.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/my_ranking_widget.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/ranking_scrollbar.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/ranking_time.dart';
-import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/ranking_widget.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/filter_ranking_button.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/my_ranking_widget.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_scrollbar.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_widget.dart';
+import 'package:shia_game_flutter/features/battle_league/presentation/ui/widgets/main_page/ranking_time.dart';
class TimeRanking extends StatefulWidget {
const TimeRanking({super.key});
diff --git a/lib/features/battle_league/presentation/ui/widgets/rank_title.dart b/lib/features/battle_league/presentation/ui/widgets/rank_title.dart
new file mode 100644
index 0000000..6f8feb7
--- /dev/null
+++ b/lib/features/battle_league/presentation/ui/widgets/rank_title.dart
@@ -0,0 +1,44 @@
+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/gap.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/image/my_image.dart';
+
+class RankTitle extends StatelessWidget {
+ const RankTitle({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ height: 42.h,
+ width: context.widthScreen,
+ alignment: Alignment.center,
+ padding: const EdgeInsets.symmetric(horizontal: 17),
+ decoration: const ShapeDecoration(
+ shape: StadiumBorder(),
+ color: Color(0XFF2E0869),
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Expanded(
+ child: FittedBox(
+ child: Text(
+ '${context.translate.quiz_league} (june) | ${context.translate.your_place} (1,569)',
+ textAlign: TextAlign.center,
+ maxLines: 1,
+ style: Lexend.semiBold.copyWith(fontSize: 12.sp),
+ ),
+ ),
+ ),
+ 15.w.gapWidth,
+ const MyImage(asset: MyAssets.iconRank),
+ 4.w.gapWidth,
+ Text('265', style: Lexend.bold.copyWith(fontSize: 12.sp)),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/features/topic/presentation/ui/widgets/topic_widget.dart b/lib/features/battle_league/presentation/ui/widgets/topic_page/topic_widget.dart
similarity index 100%
rename from lib/features/topic/presentation/ui/widgets/topic_widget.dart
rename to lib/features/battle_league/presentation/ui/widgets/topic_page/topic_widget.dart
diff --git a/lib/features/intro/presentation/ui/intro_page.dart b/lib/features/intro/presentation/ui/intro_page.dart
index 7830db4..93c67c3 100644
--- a/lib/features/intro/presentation/ui/intro_page.dart
+++ b/lib/features/intro/presentation/ui/intro_page.dart
@@ -1,13 +1,11 @@
import 'package:flutter/material.dart';
import 'package:get/get.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/common_ui/theme/my_theme.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/image/my_image.dart';
+import 'package:shia_game_flutter/core/widgets/loading/my_linear_loading.dart';
import 'package:shia_game_flutter/features/intro/presentation/controller/intro_controller.dart';
-import 'package:shia_game_flutter/features/intro/presentation/ui/widgets/intro_loading.dart';
class IntroPage extends GetView {
const IntroPage({super.key});
@@ -82,17 +80,7 @@ class IntroPage extends GetView {
Positioned _bottomLoading(BuildContext context) {
return Positioned(
bottom: 16.h,
- child: Column(
- spacing: 10.h,
- mainAxisSize: MainAxisSize.min,
- children: [
- Text(
- context.translate.loading,
- style: Lexend.regular.copyWith(fontSize: 12.sp),
- ),
- const IntroLoading(),
- ],
- ),
+ child: const MyLinearLoading()
);
}
}
diff --git a/lib/features/intro/presentation/ui/widgets/intro_loading.dart b/lib/features/intro/presentation/ui/widgets/intro_loading.dart
index ca3836f..8b13789 100644
--- a/lib/features/intro/presentation/ui/widgets/intro_loading.dart
+++ b/lib/features/intro/presentation/ui/widgets/intro_loading.dart
@@ -1,49 +1 @@
-import 'package:flutter/material.dart';
-import 'package:shia_game_flutter/core/utils/screen_size.dart';
-class IntroLoading extends StatelessWidget {
- const IntroLoading({
- super.key,
- });
-
- @override
- Widget build(BuildContext context) {
- return Container(
- width: 188.w,
- height: 16.h,
- padding: const EdgeInsetsDirectional.only(
- start: 2,
- top: 2,
- bottom: 2,
- end: 20,
- ),
- decoration: const ShapeDecoration(
- shape: StadiumBorder(
- side: BorderSide(
- width: 1,
- color: Color(0XFFA579EA),
- ),
- ),
- ),
- child: Container(
- height: 14.h,
- decoration: ShapeDecoration(
- shape: StadiumBorder(
- side: BorderSide(
- width: 1,
- color: Colors.white.withValues(alpha: 0.5),
- ),
- ),
- gradient: const LinearGradient(
- begin: AlignmentDirectional.centerStart,
- end: AlignmentDirectional.centerEnd,
- colors: [
- Color(0XFF9C7EEC),
- Color(0XFF3BBDFF),
- ],
- ),
- ),
- ),
- );
- }
-}
diff --git a/lib/features/topic/data/datasource/topic_datasource.dart b/lib/features/topic/data/datasource/topic_datasource.dart
deleted file mode 100644
index 6f94800..0000000
--- a/lib/features/topic/data/datasource/topic_datasource.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-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/topic_params.dart';
-import 'package:shia_game_flutter/core/response/base_response.dart';
-import 'package:shia_game_flutter/features/topic/data/model/topic_model.dart';
-import 'package:shia_game_flutter/features/topic/domain/entity/topic_entity.dart';
-
-abstract class ITopicDatasource {
- Future getData({required TopicParams params});
-}
-
-class TopicDatasourceImpl implements ITopicDatasource {
- final IHttpRequest httpRequest;
-
- const TopicDatasourceImpl(this.httpRequest);
-
- @override
- Future getData({required TopicParams params}) async {
- final response = await httpRequest.get(
- path: MyApi.baseUrl,
- );
-
- return BaseResponse.getData(
- response?['data'],
- (json) => TopicModel.fromJson(json),
- );
- }
-}
diff --git a/lib/features/topic/data/model/topic_model.dart b/lib/features/topic/data/model/topic_model.dart
deleted file mode 100644
index e7d152c..0000000
--- a/lib/features/topic/data/model/topic_model.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-import 'package:shia_game_flutter/features/topic/domain/entity/topic_entity.dart';
-
-class TopicModel extends TopicEntity {
- const TopicModel({
- super.id,
- });
-
- factory TopicModel.fromJson(Map json) {
- return TopicModel(
- id: json['id'],
- );
- }
-}
diff --git a/lib/features/topic/data/repository_impl/topic_repository_impl.dart b/lib/features/topic/data/repository_impl/topic_repository_impl.dart
deleted file mode 100644
index 46870f7..0000000
--- a/lib/features/topic/data/repository_impl/topic_repository_impl.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-import 'package:flutter/foundation.dart';
-import 'package:shia_game_flutter/core/error_handler/my_exception.dart';
-import 'package:shia_game_flutter/core/params/topic_params.dart';
-import 'package:shia_game_flutter/core/utils/data_state.dart';
-import 'package:shia_game_flutter/features/topic/data/datasource/topic_datasource.dart';
-import 'package:shia_game_flutter/features/topic/domain/entity/topic_entity.dart';
-import 'package:shia_game_flutter/features/topic/domain/repository/topic_repository.dart';
-
-class TopicRepositoryImpl implements ITopicRepository {
- final ITopicDatasource datasource;
-
- const TopicRepositoryImpl(this.datasource);
-
- @override
- Future> getData({required TopicParams params}) async {
- try {
- final TopicEntity 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/topic/domain/entity/topic_entity.dart b/lib/features/topic/domain/entity/topic_entity.dart
deleted file mode 100644
index d6e6e85..0000000
--- a/lib/features/topic/domain/entity/topic_entity.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-import 'package:equatable/equatable.dart';
-
-class TopicEntity extends Equatable {
- final int? id;
-
- const TopicEntity({
- this.id,
- });
-
- @override
- List