diff --git a/assets/images/add_background.png b/assets/images/add_background.png
new file mode 100644
index 0000000..eff2d70
Binary files /dev/null and b/assets/images/add_background.png differ
diff --git a/assets/images/cup.png b/assets/images/cup.png
new file mode 100644
index 0000000..16de293
Binary files /dev/null and b/assets/images/cup.png differ
diff --git a/assets/images/icon_crown.png b/assets/images/icon_crown.png
new file mode 100644
index 0000000..2c24200
Binary files /dev/null and b/assets/images/icon_crown.png differ
diff --git a/assets/images/mic.png b/assets/images/mic.png
new file mode 100644
index 0000000..ca96910
Binary files /dev/null and b/assets/images/mic.png differ
diff --git a/assets/images/mic_blur.png b/assets/images/mic_blur.png
new file mode 100644
index 0000000..cd6367e
Binary files /dev/null and b/assets/images/mic_blur.png differ
diff --git a/assets/images/shia_mind_group.png b/assets/images/shia_mind_group.png
new file mode 100644
index 0000000..b47c20e
Binary files /dev/null and b/assets/images/shia_mind_group.png differ
diff --git a/assets/svg/friend_battle.svg b/assets/svg/friend_battle.svg
new file mode 100644
index 0000000..aa8575a
--- /dev/null
+++ b/assets/svg/friend_battle.svg
@@ -0,0 +1,39 @@
+
diff --git a/assets/svg/icon_clock.svg b/assets/svg/icon_clock.svg
new file mode 100644
index 0000000..f657f87
--- /dev/null
+++ b/assets/svg/icon_clock.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/svg/medal.svg b/assets/svg/medal.svg
new file mode 100644
index 0000000..8b4a41a
--- /dev/null
+++ b/assets/svg/medal.svg
@@ -0,0 +1,37 @@
+
diff --git a/lib/common_ui/resources/my_assets.dart b/lib/common_ui/resources/my_assets.dart
index 3f798a8..6edec51 100644
--- a/lib/common_ui/resources/my_assets.dart
+++ b/lib/common_ui/resources/my_assets.dart
@@ -10,6 +10,12 @@ class MyAssets {
static const String iconProfile = 'assets/images/icon_profile.png';
static const String iconDiamond = 'assets/images/icon_diamond.png';
static const String iconFlash = 'assets/images/icon_flash.png';
+ static const String iconCrown = 'assets/images/icon_crown.png';
+ static const String shiaMindGroup = 'assets/images/shia_mind_group.png';
+ static const String cup = 'assets/images/cup.png';
+ static const String addBackground = 'assets/images/add_background.png';
+ static const String mic = 'assets/images/mic.png';
+ static const String micBLur = 'assets/images/mic_blur.png';
/// ----- Svg -----
static const String sampleSvg = 'assets/svg/sample.svg';
@@ -19,6 +25,10 @@ class MyAssets {
static const String iconPlus = 'assets/svg/icon_plus.svg';
static const String iconSetting = 'assets/svg/icon_setting.svg';
static const String iconShare = 'assets/svg/icon_share.svg';
+ static const String iconClock = 'assets/svg/icon_clock.svg';
+ static const String medal = 'assets/svg/medal.svg';
+ static const String friendBattle = 'assets/svg/friend_battle.svg';
+
/// ----- Audios -----
static const String sampleAudio = 'assets/audios/sample.mp3';
@@ -32,5 +42,8 @@ class MyAssets {
question,
iconProfile,
iconDiamond,
+ iconFlash,
+ iconCrown,
+ shiaMindGroup,
];
}
diff --git a/lib/core/widgets/bottom_nav_bar/bottom_nav_bar.dart b/lib/core/widgets/bottom_nav_bar/bottom_nav_bar.dart
index 72305b8..2f9a46c 100644
--- a/lib/core/widgets/bottom_nav_bar/bottom_nav_bar.dart
+++ b/lib/core/widgets/bottom_nav_bar/bottom_nav_bar.dart
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
import 'package:get/get_state_manager/src/simple/get_view.dart';
+import 'package:shia_game_flutter/common_ui/resources/my_spaces.dart';
import 'package:shia_game_flutter/common_ui/resources/my_text_style.dart';
import 'package:shia_game_flutter/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_item.dart';
import 'package:shia_game_flutter/core/widgets/bottom_nav_bar/styles/bottom_nav_bar_profile_item.dart';
@@ -12,6 +13,10 @@ class BottomNavBar extends GetView {
@override
Widget build(BuildContext context) {
return Container(
+ clipBehavior: Clip.none,
+ padding: EdgeInsets.symmetric(
+ horizontal: MySpaces.s30
+ ),
decoration: BoxDecoration(
gradient: RadialGradient(
radius: 2.5,
diff --git a/lib/core/widgets/container/gradient_container.dart b/lib/core/widgets/container/gradient_container.dart
new file mode 100644
index 0000000..f7a41d8
--- /dev/null
+++ b/lib/core/widgets/container/gradient_container.dart
@@ -0,0 +1,78 @@
+import 'package:flutter/material.dart';
+
+class GradientContainer extends StatelessWidget {
+ const GradientContainer({
+ super.key,
+ this.width,
+ this.height,
+ this.margin,
+ this.padding,
+ this.shapeBorder,
+ this.boxShape,
+ this.borderGradient,
+ this.borderRadius,
+ this.boxShadow,
+ this.color,
+ this.child,
+ this.image,
+ this.gradient,
+ this.borderColor,
+ });
+
+ final double? width;
+ final double? height;
+ final EdgeInsetsGeometry? margin;
+ final EdgeInsetsGeometry? padding;
+ final ShapeBorder? shapeBorder;
+ final BoxShape? boxShape;
+ final Gradient? borderGradient;
+ final Gradient? gradient;
+ final BorderRadiusGeometry? borderRadius;
+ final List? boxShadow;
+ final Color? color;
+ final Color? borderColor;
+ final Widget? child;
+ final DecorationImage? image;
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ padding: EdgeInsets.all(1),
+ width: width,
+ height: height,
+ margin: margin,
+ decoration: shapeBorder == null
+ ? BoxDecoration(
+ shape: boxShape ?? BoxShape.rectangle,
+ gradient: borderGradient,
+ borderRadius: borderRadius,
+ boxShadow: boxShadow,
+ color: borderColor,
+ )
+ : ShapeDecoration(
+ shape: shapeBorder!,
+ gradient: borderGradient,
+ shadows: boxShadow,
+ color: borderColor,
+ ),
+ child: Container(
+ padding: padding,
+ decoration: shapeBorder == null
+ ? BoxDecoration(
+ shape: boxShape ?? BoxShape.rectangle,
+ gradient: gradient,
+ borderRadius: borderRadius,
+ color: color,
+ image: image,
+ )
+ : ShapeDecoration(
+ shape: shapeBorder!,
+ gradient: gradient,
+ color: color,
+ image: image,
+ ),
+ child: child,
+ ),
+ );
+ }
+}
diff --git a/lib/features/home/presentation/pages/home_page.dart b/lib/features/home/presentation/pages/home_page.dart
index 6424618..669fd8e 100644
--- a/lib/features/home/presentation/pages/home_page.dart
+++ b/lib/features/home/presentation/pages/home_page.dart
@@ -1,9 +1,17 @@
-import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' hide BoxShadow, BoxDecoration;
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_spaces.dart';
import 'package:shia_game_flutter/common_ui/theme/my_theme.dart';
+import 'package:shia_game_flutter/core/utils/gap.dart';
import 'package:shia_game_flutter/core/widgets/app_bar/home_app_bar.dart';
import 'package:shia_game_flutter/core/widgets/bottom_nav_bar/bottom_nav_bar.dart';
+import 'package:shia_game_flutter/core/widgets/image/my_image.dart';
import 'package:shia_game_flutter/features/home/presentation/controller/home_controller.dart';
+import 'package:shia_game_flutter/features/home/presentation/pages/widgets/home_battle_cast.dart';
+import 'package:shia_game_flutter/features/home/presentation/pages/widgets/home_battle_league.dart';
+import 'package:shia_game_flutter/features/home/presentation/pages/widgets/home_custom_widget.dart';
+import 'package:shia_game_flutter/features/home/presentation/pages/widgets/home_membership.dart';
class HomePage extends GetView {
const HomePage({super.key});
@@ -14,6 +22,45 @@ class HomePage extends GetView {
backgroundColor: context.backgroundColor,
bottomNavigationBar: BottomNavBar(),
appBar: HomeAppBar(),
+ body: SingleChildScrollView(
+ padding: EdgeInsets.symmetric(horizontal: MySpaces.s32),
+ child: Column(
+ children: [
+ MySpaces.s28.gapHeight,
+ MyImage(asset: MyAssets.shiaMindGroup),
+ MySpaces.s40.gapHeight,
+ HomeMembership(),
+ HomeBattleLeague(),
+ MySpaces.s20.gapHeight,
+ _customWidgets(),
+ MySpaces.s20.gapHeight,
+ HomeBattleCast(),
+ ],
+ ),
+ ),
+ );
+ }
+
+ Widget _customWidgets() {
+ return Row(
+ spacing: MySpaces.s22,
+ children: [
+ Expanded(
+ child: HomeCustomWidget(
+ type: CustomWidgetType.customLeague,
+ firstText: 'ongoing:',
+ secondText:
+ 'Saba Center League - Imam Hassan ministry London school',
+ ),
+ ),
+ Expanded(
+ child: HomeCustomWidget(
+ type: CustomWidgetType.friendBattle,
+ firstText: 'online:',
+ secondText: 'No one\'s online',
+ ),
+ ),
+ ],
);
}
}
diff --git a/lib/features/home/presentation/pages/widgets/home_battle_cast.dart b/lib/features/home/presentation/pages/widgets/home_battle_cast.dart
new file mode 100644
index 0000000..2cd7d8f
--- /dev/null
+++ b/lib/features/home/presentation/pages/widgets/home_battle_cast.dart
@@ -0,0 +1,136 @@
+import 'package:flutter/material.dart' hide BoxDecoration, BoxShadow;
+import 'package:flutter_inset_box_shadow_update/flutter_inset_box_shadow_update.dart';
+import 'package:shia_game_flutter/common_ui/resources/my_assets.dart';
+import 'package:shia_game_flutter/common_ui/resources/my_spaces.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/widgets/container/gradient_container.dart';
+import 'package:shia_game_flutter/core/widgets/image/my_image.dart';
+
+class HomeBattleCast extends StatelessWidget {
+ const HomeBattleCast({
+ super.key,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ return Stack(
+ alignment: Alignment.center,
+ clipBehavior: Clip.none,
+ children: [
+ GradientContainer(
+ height: 120,
+ borderRadius: BorderRadiusDirectional.all(Radius.circular(MySpaces.s20)),
+ borderGradient: LinearGradient(
+ begin: AlignmentDirectional.topCenter,
+ end: AlignmentDirectional.bottomCenter,
+ colors: [Color(0XFF567EFF), Color(0XFF304DB8)],
+ ),
+ gradient: RadialGradient(
+ radius: 1,
+ center: Alignment(-0.5, -1),
+ colors: [Color(0XFF104CBA).withValues(alpha: 0.2), Color(0XFF104CBA)],
+ ),
+ padding: EdgeInsets.all(MySpaces.s10),
+ image: DecorationImage(
+ image: AssetImage(MyAssets.addBackground),
+ repeat: ImageRepeat.repeat,
+ colorFilter: ColorFilter.mode(
+ Colors.black.withValues(alpha: 0.02),
+ BlendMode.srcIn,
+ ),
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ ShaderMask(
+ blendMode: BlendMode.modulate,
+ shaderCallback: (bounds) => LinearGradient(
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ colors: [Color(0XFFFFFFFF), Color(0XFFE4E3FF)],
+ ).createShader(bounds),
+ child: Text(
+ 'Battle Cast',
+ style: Lexend.extraBold.copyWith(
+ fontSize: 22,
+ shadows: [
+ BoxShadow(
+ color: Color(0xFF3C38C4),
+ blurRadius: 0.52,
+ offset: Offset(0, 1.04),
+ spreadRadius: 0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ MySpaces.s10.gapHeight,
+ Container(
+ padding: EdgeInsets.all(5),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.all(Radius.circular(8)),
+ color: Color(0XFF203689),
+ boxShadow: [
+ BoxShadow(
+ color: Color(0XFF000000).withValues(alpha: 0.3),
+ blurRadius: 3,
+ offset: Offset(0, 2),
+ inset: true,
+ ),
+ ],
+ ),
+ child: Text(
+ 'Sheikh.Sadra VS Ali Masoudi (online) - Sheikh.Sadra number tow VS Ali Masoudi tabar (tomorrow)',
+ maxLines: 1,
+ style: Lexend.semiBold.copyWith(
+ fontSize: 8,
+ color: Color(0XFFB6B3FF),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ PositionedDirectional(
+ start: -1,
+ top: -MySpaces.s4,
+ child: GradientContainer(
+ color: Color(0XFFCC9B22),
+ padding: EdgeInsets.symmetric(
+ vertical: MySpaces.s2,
+ horizontal: MySpaces.s8,
+ ),
+ borderRadius: BorderRadiusDirectional.only(
+ topStart: Radius.circular(6),
+ topEnd: Radius.circular(6),
+ bottomStart: Radius.circular(0),
+ bottomEnd: Radius.circular(6),
+ ),
+ child: Text(
+ '2 New',
+ style: Lexend.extraBold.copyWith(
+ fontSize: 11,
+ ),
+ ),
+ ),
+ ),
+ PositionedDirectional(
+ end: MySpaces.s20,
+ top: -MySpaces.s10,
+ child: Row(
+ children: [
+ MyImage(
+ asset: MyAssets.mic,
+ ),
+ MyImage(
+ asset: MyAssets.micBLur,
+ ),
+ ],
+ ),
+ ),
+ ],
+ );
+ }
+}
diff --git a/lib/features/home/presentation/pages/widgets/home_battle_league.dart b/lib/features/home/presentation/pages/widgets/home_battle_league.dart
new file mode 100644
index 0000000..aac63c7
--- /dev/null
+++ b/lib/features/home/presentation/pages/widgets/home_battle_league.dart
@@ -0,0 +1,75 @@
+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_spaces.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/container/gradient_container.dart';
+import 'package:shia_game_flutter/core/widgets/image/my_image.dart';
+
+class HomeBattleLeague extends StatelessWidget {
+ const HomeBattleLeague({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Stack(
+ alignment: AlignmentDirectional.bottomEnd,
+ children: [
+ GradientContainer(
+ width: context.widthScreen,
+ height: 120,
+ padding: EdgeInsets.symmetric(
+ horizontal: MySpaces.s12,
+ vertical: MySpaces.s16,
+ ),
+ borderGradient: LinearGradient(
+ begin: AlignmentDirectional.centerStart,
+ end: AlignmentDirectional.centerEnd,
+ colors: [Color(0XFF3A0A85), Color(0XFF6C2ECD)],
+ ),
+ gradient: LinearGradient(
+ begin: AlignmentDirectional.centerStart,
+ end: AlignmentDirectional.centerEnd,
+ colors: [Color(0XFF3A0D83), Color(0XFF4F09BF)],
+ ),
+ borderRadius: BorderRadius.all(Radius.circular(20)),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.end,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ ShaderMask(
+ blendMode: BlendMode.modulate,
+ shaderCallback: (bounds) => LinearGradient(
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ colors: [Color(0XFFFFFFFF), Color(0XFFCAA8FF)],
+ ).createShader(bounds),
+ child: Text(
+ 'Battle League',
+ style: Lexend.extraBold.copyWith(
+ fontSize: 22,
+ shadows: [
+ BoxShadow(
+ color: Color(0xFF3E1381),
+ blurRadius: 0.84,
+ offset: Offset(0, 1.69),
+ spreadRadius: 0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ Text(
+ 'The faster you answer, the winner',
+ style: Lexend.medium.copyWith(
+ fontSize: 10,
+ color: Color(0XFFA183D2),
+ ),
+ ),
+ ],
+ ),
+ ),
+ MyImage(asset: MyAssets.cup),
+ ],
+ );
+ }
+}
diff --git a/lib/features/home/presentation/pages/widgets/home_custom_widget.dart b/lib/features/home/presentation/pages/widgets/home_custom_widget.dart
new file mode 100644
index 0000000..dc8853e
--- /dev/null
+++ b/lib/features/home/presentation/pages/widgets/home_custom_widget.dart
@@ -0,0 +1,191 @@
+import 'package:flutter/material.dart' hide BoxDecoration, BoxShadow;
+import 'package:flutter_inset_box_shadow_update/flutter_inset_box_shadow_update.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_spaces.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/gradient_container.dart';
+import 'package:shia_game_flutter/core/widgets/image/my_image.dart';
+
+enum CustomWidgetType {
+ customLeague,
+ friendBattle;
+
+ static Map get borderGradient => {
+ CustomWidgetType.customLeague: LinearGradient(
+ begin: AlignmentDirectional.topCenter,
+ end: AlignmentDirectional.bottomCenter,
+ colors: [Color(0XFF4BAD42), Color(0XFF147743)],
+ ),
+ CustomWidgetType.friendBattle: LinearGradient(
+ begin: AlignmentDirectional.topCenter,
+ end: AlignmentDirectional.bottomCenter,
+ colors: [Color(0XFFED9851), Color(0XFFC77041)],
+ ),
+ };
+
+ static Map get gradient => {
+ CustomWidgetType.customLeague: RadialGradient(
+ radius: 0.7,
+ center: Alignment(-0.6, -0.8),
+ colors: [Color(0XFF58AE23), Color(0XFF066A36)],
+ ),
+ CustomWidgetType.friendBattle: RadialGradient(
+ radius: 0.7,
+ center: Alignment(-0.6, -0.8),
+ colors: [Color(0XFFE99E53), Color(0XFFBC673A)],
+ ),
+ };
+
+ static Map get image => {
+ CustomWidgetType.customLeague: MyAssets.medal,
+ CustomWidgetType.friendBattle: MyAssets.friendBattle,
+ };
+
+ static Map get containerColor => {
+ CustomWidgetType.customLeague: Color(0XFF05542B),
+ CustomWidgetType.friendBattle: Color(0XFFA45A31),
+ };
+
+ static Map get firstTextColor => {
+ CustomWidgetType.customLeague: Color(0XFF4FDF94),
+ CustomWidgetType.friendBattle: Color(0XFFE3DFD5),
+ };
+
+ static Map get secondTextColor => {
+ CustomWidgetType.customLeague: Color(0XFF85C9A6),
+ CustomWidgetType.friendBattle: Color(0XFFDFBC9D),
+ };
+
+ static Map get title => {
+ CustomWidgetType.customLeague: ShaderMask(
+ blendMode: BlendMode.modulate,
+ shaderCallback: (bounds) => LinearGradient(
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ colors: [Color(0XFFFFFFFF), Color(0XFFFFFFFF), Color(0XFFBEF8DA)],
+ ).createShader(bounds),
+ child: Text(
+ Get.context?.translate.custom_league ?? '',
+ style: Lexend.extraBold.copyWith(
+ fontSize: 14,
+ shadows: [
+ BoxShadow(
+ color: Color(0xFF07592F),
+ blurRadius: 0.52,
+ offset: Offset(0, 1.04),
+ spreadRadius: 0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ CustomWidgetType.friendBattle: ShaderMask(
+ blendMode: BlendMode.modulate,
+ shaderCallback: (bounds) => LinearGradient(
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ colors: [Color(0XFFFFFFFF), Color(0XFFFFFFFF), Color(0XFFFFB994)],
+ ).createShader(bounds),
+ child: Text(
+ Get.context?.translate.friends_battle ?? '',
+ style: Lexend.extraBold.copyWith(
+ fontSize: 14,
+ shadows: [
+ BoxShadow(
+ color: Color(0xFFAA5B31),
+ blurRadius: 0.52,
+ offset: Offset(0, 1.04),
+ spreadRadius: 0,
+ ),
+ ],
+ ),
+ ),
+ ),
+ };
+}
+
+class HomeCustomWidget extends StatelessWidget {
+ const HomeCustomWidget({
+ super.key,
+ this.type = CustomWidgetType.customLeague,
+ this.firstText,
+ this.secondText,
+ });
+
+ final CustomWidgetType type;
+ final String? firstText;
+ final String? secondText;
+
+ @override
+ Widget build(BuildContext context) {
+ return GradientContainer(
+ height: 130,
+ borderRadius: BorderRadius.all(Radius.circular(20)),
+ borderGradient: CustomWidgetType.borderGradient[type],
+ gradient: CustomWidgetType.gradient[type],
+ image: DecorationImage(
+ image: AssetImage(MyAssets.addBackground),
+ repeat: ImageRepeat.repeat,
+ colorFilter: ColorFilter.mode(
+ Colors.black.withValues(alpha: 0.02),
+ BlendMode.srcIn,
+ ),
+ ),
+ padding: EdgeInsets.all(MySpaces.s10),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Align(
+ alignment: AlignmentDirectional.centerEnd,
+ child: MyImage(asset: CustomWidgetType.image[type] ?? '',),
+ ),
+ Spacer(),
+ CustomWidgetType.title[type] ?? SizedBox.shrink(),
+ MySpaces.s10.gapHeight,
+ Container(
+ padding: EdgeInsets.all(5),
+ width: context.widthScreen,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.all(Radius.circular(8)),
+ color: CustomWidgetType.containerColor[type],
+ boxShadow: [
+ BoxShadow(
+ color: Color(0XFF000000).withValues(alpha: 0.3),
+ blurRadius: 3,
+ offset: Offset(0, 2),
+ inset: true,
+ ),
+ ],
+ ),
+ child: Text.rich(
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ TextSpan(
+ children: [
+ TextSpan(
+ text: firstText,
+ style: Lexend.semiBold.copyWith(
+ fontSize: 8,
+ color: CustomWidgetType.firstTextColor[type],
+ ),
+ ),
+ TextSpan(
+ text: ' $secondText',
+ style: Lexend.semiBold.copyWith(
+ fontSize: 8,
+ color: CustomWidgetType.secondTextColor[type],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/features/home/presentation/pages/widgets/home_membership.dart b/lib/features/home/presentation/pages/widgets/home_membership.dart
new file mode 100644
index 0000000..a575d0a
--- /dev/null
+++ b/lib/features/home/presentation/pages/widgets/home_membership.dart
@@ -0,0 +1,57 @@
+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_spaces.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/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/gradient_container.dart';
+import 'package:shia_game_flutter/core/widgets/image/my_image.dart';
+
+class HomeMembership extends StatelessWidget {
+ const HomeMembership({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return GradientContainer(
+ width: context.widthScreen,
+ color: context.backgroundColor,
+ borderGradient: LinearGradient(
+ begin: AlignmentDirectional.topStart,
+ end: AlignmentDirectional.bottomEnd,
+ colors: [
+ Color(0XFFDE8B4D).withValues(alpha: 0.3),
+ Color(0XFFDE8B4D).withValues(alpha: 0.05),
+ ],
+ ),
+ borderRadius: BorderRadius.all(Radius.circular(MySpaces.s20)),
+ boxShadow: [
+ BoxShadow(
+ color: Color(0x3F000000),
+ blurRadius: 17,
+ offset: Offset(0, 4),
+ spreadRadius: 20,
+ ),
+ ],
+ padding: EdgeInsets.symmetric(horizontal: MySpaces.s16, vertical: 13),
+ child: Row(
+ children: [
+ MyImage(asset: MyAssets.iconCrown),
+ MySpaces.s8.gapWidth,
+ Text(
+ context.translate.pro_membership,
+ style: Lexend.semiBold.copyWith(
+ fontSize: 12,
+ color: Color(0XFFFCC230),
+ ),
+ ),
+ Spacer(),
+ MyImage(asset: MyAssets.iconClock),
+ MySpaces.s6.gapWidth,
+ Text('125d 4h', style: Lexend.semiBold.copyWith(fontSize: 12)),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index cf03135..886f871 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -4,5 +4,8 @@
"home": "Home",
"shop": "Shop",
"awards": "Awards",
- "profile": "Profile"
+ "profile": "Profile",
+ "pro_membership": "Pro Membership",
+ "custom_league": "Custom League",
+ "friends_battle": "Friends Battle"
}
\ No newline at end of file
diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart
index 01e66b3..c19bb98 100644
--- a/lib/l10n/app_localizations.dart
+++ b/lib/l10n/app_localizations.dart
@@ -123,6 +123,24 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Profile'**
String get profile;
+
+ /// No description provided for @pro_membership.
+ ///
+ /// In en, this message translates to:
+ /// **'Pro Membership'**
+ String get pro_membership;
+
+ /// No description provided for @custom_league.
+ ///
+ /// In en, this message translates to:
+ /// **'Custom League'**
+ String get custom_league;
+
+ /// No description provided for @friends_battle.
+ ///
+ /// In en, this message translates to:
+ /// **'Friends Battle'**
+ String get friends_battle;
}
class _AppLocalizationsDelegate
diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart
index bae517b..ba4430c 100644
--- a/lib/l10n/app_localizations_en.dart
+++ b/lib/l10n/app_localizations_en.dart
@@ -22,4 +22,13 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get profile => 'Profile';
+
+ @override
+ String get pro_membership => 'Pro Membership';
+
+ @override
+ String get custom_league => 'Custom League';
+
+ @override
+ String get friends_battle => 'Friends Battle';
}
diff --git a/pubspec.lock b/pubspec.lock
index 108f0fa..fc3519b 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -102,6 +102,14 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ flutter_inset_box_shadow_update:
+ dependency: "direct main"
+ description:
+ name: flutter_inset_box_shadow_update
+ sha256: "91c912d01c049e761d0b7e9d81061acc62677f33bdde4e854257f1b10d8f0821"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.0.1"
flutter_lints:
dependency: "direct dev"
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index f19b4db..a55a011 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -11,6 +11,7 @@ dependencies:
equatable: ^2.0.7
flutter:
sdk: flutter
+ flutter_inset_box_shadow_update: ^0.0.1
flutter_localizations:
sdk: flutter
get: ^4.7.2