diff --git a/.run/main.dart.run.xml b/.run/main.dart.run.xml
index 4a58a7c9..4767aff8 100644
--- a/.run/main.dart.run.xml
+++ b/.run/main.dart.run.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/assets/app_tour/right_down.png b/assets/app_tour/right_down.png
new file mode 100644
index 00000000..324c148c
Binary files /dev/null and b/assets/app_tour/right_down.png differ
diff --git a/lib/config/my_router.dart b/lib/config/my_router.dart
index 1678f6e3..dc0af316 100644
--- a/lib/config/my_router.dart
+++ b/lib/config/my_router.dart
@@ -316,6 +316,7 @@ import '../presentation/Screens/demo_home.dart';
import '../presentation/Screens/profilepage.dart';
import '../presentation/routes/auth_routes/login_route.dart';
import '../presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
+import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/bookmark.dart';
import '../presentation/routes/drawer_routes/Drawer Items/edit_profile.dart';
import '../presentation/routes/drawer_routes/Drawer Items/feedback.dart';
import '../presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.dart';
@@ -470,6 +471,10 @@ final GoRouter router = GoRouter(
path: '/editProfile',
builder: (context, state) => EditProfile(),
),
+ GoRoute(
+ path: '/bookmark',
+ builder: (context, state) => BookMark(),
+ ),
GoRoute(
path: '/manageuser',
builder: (context, state) => ManageUserRouter(),
diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb
index dac0f961..a37e9e39 100644
--- a/lib/l10n/intl_en.arb
+++ b/lib/l10n/intl_en.arb
@@ -90,6 +90,6 @@
"economy": "Access detailed statistics and drill-down pages for KPIs in the Economy category to uncover key trends and metrics.",
"bookMark": "Bookmark important KPIs or datasets for quick and easy access anytime through the Bookmarks section.",
"toggle": "Switch between English and Arabic using the language toggle at the top-right corner for a bilingual experience.",
- "tour_navBar": "Use the navigation bar to quickly access Profile, Feedback, User Guide, Notifications, and other key app features.",
- "mainMenu": "Access dedicated pages and additional features by selecting options from the Main Menu."
+ "tour_navBar": "Access dedicated pages and additional features by selecting options from the Main Menu.",
+ "mainMenu": "Use the navigation bar to quickly access Profile, Feedback, User Guide, Notifications, and other key app features."
}
diff --git a/lib/presentation/Screens/charts/screens/chart_screen.dart b/lib/presentation/Screens/charts/screens/chart_screen.dart
index 291e7e1d..566b834f 100644
--- a/lib/presentation/Screens/charts/screens/chart_screen.dart
+++ b/lib/presentation/Screens/charts/screens/chart_screen.dart
@@ -2,11 +2,14 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
+import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/presentation/Screens/charts/services/api_service.dart';
import 'package:uae_stat/presentation/Screens/charts/widgets/chart_widget.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:uae_stat/presentation/Screens/app_tour/Target_content.dart';
import '../filters/search_filter_helper.dart';
class ChartScreen1 extends ConsumerStatefulWidget {
@@ -50,6 +53,12 @@ class _ChartScreen1State extends ConsumerState {
int _activeTabIndex = 0;
dynamic _tabsData = [];
+ late List marriageTargets;
+ late List previousMarriageTargets;
+ late TutorialCoachMark tutorialCoachMark;
+ final GlobalKey chartKey = GlobalKey();
+ final GlobalKey bookMarkKey = GlobalKey();
+ final GlobalKey cardKey= GlobalKey();
@override
void initState() {
@@ -64,6 +73,586 @@ class _ChartScreen1State extends ConsumerState {
onTabSelected(_tabsData[0]['id']);
}
});
+
+ WidgetsBinding.instance.addPostFrameCallback((_) {
+ _startTutorialAfterRender();
+ });
+ }
+
+ void handleSkip() {
+ tutorialCoachMark.skip();
+ debugPrint('Skip clicked');
+ ref.read(chartsTourProvider.notifier).state = true;
+ ref.read(previousChartsTourProvider.notifier).state = true;
+ ref.read(homeTourProvider.notifier).state = true;
+ ref.read( previousHomeTourProvider.notifier).state = true;
+ ref.read(scaffoldTourProvider.notifier).state = true;
+ ref.read(previousScaffoldTourProvider.notifier).state = true;
+ context.go('/myhomepage');
+ }
+
+ void _kpiTutorialCoachMark() {
+ debugPrint('Not Initialized and Started');
+ // _calculateMarkPosition();
+ _initmarriageTargets();
+ debugPrint('Initialized and Started');
+ tutorialCoachMark = TutorialCoachMark(
+ paddingFocus: 0,
+ useSafeArea: true,
+
+ pulseEnable: false,
+ hideSkip: true,
+ targets: marriageTargets,
+ onFinish: () {
+ context.go('/myhomepage');
+ debugPrint('Marriage Tutorial Finished');
+ },
+
+ )..show(context: context);
+ }
+
+
+ void _startTutorialAfterRender() {
+ final chartTour = ref.watch(chartsTourProvider);
+ final previousChartTour = ref.watch(previousChartsTourProvider);
+ debugPrint('render problem');
+ if (cardKey.currentContext != null && !chartTour) {
+ _kpiTutorialCoachMark();
+ } else if(cardKey.currentContext != null && !previousChartTour) {
+ _previousKpiTutorial();
+ }
+ else if (!chartTour || !previousChartTour){
+ Future.delayed(Duration(milliseconds: 100), _startTutorialAfterRender);
+ }else{
+ return;
+ }
+
+ }
+
+ void _previousKpiTutorial() {
+ _initpreviousTargets();
+ tutorialCoachMark = TutorialCoachMark(
+ paddingFocus: 0,
+ useSafeArea: true,
+ pulseEnable: false,
+ hideSkip: true,
+ targets: previousMarriageTargets,
+ onFinish: () {
+ context.go('/myhomepage');
+ debugPrint('Previous Marriage Tutorial Finished');
+ },
+
+ )..show(context: context);
+
+ }
+ void _initmarriageTargets(){
+ final double screenWidth= MediaQuery.of(context).size.width;
+ final double screenHeight= MediaQuery.of(context).size.height;
+ marriageTargets=[
+ TargetFocus(
+ identify: 'cardKey',
+ keyTarget: cardKey,
+ shape: ShapeLightFocus.RRect,
+ paddingFocus: 0,
+ contents: [
+ createTargetContent(
+ text: AppLocalizations.of(context)!.kpiCards,
+ alignment: ContentAlign.top,
+ gap:55,
+ space: 0,
+ ),
+ TargetContent(
+ align: ContentAlign.bottom,
+ child: SizedBox(
+ width: double.infinity,
+ height: MediaQuery.of(context).size.height*0.3,
+ child: Stack(
+ children: [
+ Positioned(
+ bottom: 35,
+ left: 16,
+ right: 16,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ ElevatedButton(
+ onPressed: () => handleSkip(),
+ style: ElevatedButton.styleFrom(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(12),
+ ),
+ side: const BorderSide(color: Colors.white),
+ backgroundColor: Colors.transparent,
+ elevation: 0,
+ ),
+ child: const Text(
+ 'Skip',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 14,
+ ),
+ ),
+ ),
+ Column(
+ children: [
+ Text(
+ '3/7',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 14,
+ ),
+ ),
+ const SizedBox(height: 3),
+ Row(
+ children: [
+ Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ border: Border.all(color: Colors.white, width: 2.0),
+ ),
+ child: IconButton(
+ iconSize: 20,
+ icon: const Icon(Icons.arrow_back, color: Colors.white),
+ onPressed: () {
+ ref.read(chartsTourProvider.notifier).state=true;
+ ref.read(previousHomeTourProvider.notifier).state=false;
+ tutorialCoachMark.finish();
+ },
+ ),
+ ),
+ const SizedBox(width: 10),
+ Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ color: Color(0xFF7DAFBC),
+ border: Border.all(color:Color(0xFF7DAFBC), width: 1.5),
+ ),
+ child: IconButton(
+ iconSize: 20,
+ icon: const Icon(Icons.arrow_forward, color: Colors.white),
+ onPressed: () {
+ tutorialCoachMark.next();
+ },
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ TargetContent(
+ padding: EdgeInsets.only(bottom: 0,top : 0,),
+ align: ContentAlign.top,
+ child: SizedBox(
+ width: MediaQuery.of(context).size.width,
+ height:MediaQuery.of(context).size.height*0.69 ,
+ child: Stack(
+ children: [
+ Positioned(
+ left: MediaQuery.of(context).size.width*0.40,
+ bottom: 0,
+ child: Image.asset(
+ 'assets/app_tour/leftUp.png',
+ width: 100,
+ height: 90,
+ ),
+ ),
+ ]
+ ),
+
+ ),
+ ),
+ ],
+ ),
+ TargetFocus(
+ identify: 'BookMarkKey',
+ keyTarget: bookMarkKey,
+ shape: ShapeLightFocus.RRect,
+ paddingFocus: 1,
+ contents: [
+ createTargetContent(
+ text: AppLocalizations.of(context)!.bookMark,
+ alignment: ContentAlign.bottom,
+ gap: 53,
+ space: 50,
+ ),
+ TargetContent(
+ align: ContentAlign.bottom,
+ child: SizedBox(
+ width: double.infinity,
+ height: MediaQuery.of(context).size.height*0.60,
+ child: Stack(
+ children: [
+ Positioned(
+ bottom: 35,
+ left: 16,
+ right: 16,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ ElevatedButton(
+ onPressed: () => handleSkip(),
+ style: ElevatedButton.styleFrom(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(12),
+ ),
+ side: const BorderSide(color: Colors.white),
+ backgroundColor: Colors.transparent,
+ elevation: 0,
+ ),
+ child: const Text(
+ 'Skip',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 14,
+ ),
+ ),
+ ),
+ Column(
+ children: [
+ Text(
+ '4/7',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 14,
+ ),
+ ),
+ const SizedBox(height: 3),
+ Row(
+ children: [
+ Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ border: Border.all(color: Colors.white, width: 2.0),
+ ),
+ child: IconButton(
+ iconSize: 20,
+ icon: const Icon(Icons.arrow_back, color: Colors.white),
+ onPressed: () {
+ tutorialCoachMark.previous();
+ },
+ ),
+ ),
+ const SizedBox(width: 10),
+ Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ color: Color(0xFF7DAFBC),
+ border: Border.all(color: Color(0xFF7DAFBC), width: 1),
+ ),
+ child: IconButton(
+ iconSize: 20,
+ icon: const Icon(Icons.arrow_forward, color: Colors.white),
+ onPressed: () {
+ ref.read(chartsTourProvider.notifier).state=true;
+ ref.read(scaffoldTourProvider.notifier).state=false;
+ tutorialCoachMark.finish();
+ },
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ TargetContent(
+ padding: EdgeInsets.only(left:0, top:0),
+ align: ContentAlign.right,
+ child: Container(
+ width: screenWidth/4,
+ height: screenHeight,
+ child: Stack(
+ children: [
+ Image.asset(
+ 'assets/app_tour/leftDown.png',
+ fit: BoxFit.contain,
+ ),
+ // Positioned(
+ // top: 0,
+ // left: MediaQuery.of(context).size.width* 0.5,
+ // child: SizedBox(
+ // width: 50,
+ // height: 100,
+ // child: Image.asset(
+ // 'assets/app_tour/bookmark2.png',
+ // fit: BoxFit.contain,
+ // ),
+ // ),
+ // ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+
+ ];
+ }
+ void _initpreviousTargets(){
+ final double screenWidth= MediaQuery.of(context).size.width;
+ final double screenHeight= MediaQuery.of(context).size.height;
+ previousMarriageTargets=[
+ TargetFocus(
+ identify: 'BookMarkKey',
+ keyTarget: bookMarkKey,
+ shape: ShapeLightFocus.RRect,
+ contents: [
+ createTargetContent(
+ text: AppLocalizations.of(context)!.bookMark,
+ space: 50,
+ alignment: ContentAlign.bottom,
+ gap: 23,
+ ),
+ TargetContent(
+ align: ContentAlign.bottom,
+ child: SizedBox(
+ width: double.infinity,
+ height: MediaQuery.of(context).size.height*0.60,
+ child: Stack(
+ children: [
+ Positioned(
+ bottom: 35,
+ left: 16,
+ right: 16,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ ElevatedButton(
+ onPressed: () => handleSkip(),
+ style: ElevatedButton.styleFrom(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(12),
+ ),
+ side: const BorderSide(color: Colors.white),
+ backgroundColor: Colors.transparent,
+ elevation: 0,
+ ),
+ child: const Text(
+ 'Skip',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 14,
+ ),
+ ),
+ ),
+ Column(
+ children: [
+ Text(
+ '4/7',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 14,
+ ),
+ ),
+ const SizedBox(height: 3),
+ Row(
+ children: [
+ Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ border: Border.all(color: Colors.white, width: 2.0),
+ ),
+ child: IconButton(
+ iconSize: 20,
+ icon: const Icon(Icons.arrow_back, color: Colors.white),
+ onPressed: () {
+ tutorialCoachMark.next();
+ },
+ ),
+ ),
+ const SizedBox(width: 10),
+ Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ color: Color(0xFF7DAFBC),
+ border: Border.all(color:Color(0xFF7DAFBC), width: 1.5),
+ ),
+ child: IconButton(
+ iconSize: 20,
+ icon: const Icon(Icons.arrow_forward, color: Colors.white),
+ onPressed: () {
+ ref.read(chartsTourProvider.notifier).state=true;
+ ref.read(scaffoldTourProvider.notifier).state=false;
+ tutorialCoachMark.finish();
+ },
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ TargetContent(
+ padding: EdgeInsets.only(left:0, top: 10),
+ align: ContentAlign.right,
+ child: Container(
+ width: screenWidth/4,
+ height: screenHeight,
+ child: Stack(
+ children: [
+ Image.asset(
+ 'assets/app_tour/leftDown.png',
+ fit: BoxFit.contain,
+ ),
+ // Positioned(
+ // top: 0,
+ // left: MediaQuery.of(context).size.width* 0.5,
+ // child: SizedBox(
+ // width: 50,
+ // height: 100,
+ // child: Image.asset(
+ // 'assets/app_tour/bookmark2.png',
+ // fit: BoxFit.contain,
+ // ),
+ // ),
+ // ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ TargetFocus(
+ identify: 'cardKey',
+ keyTarget: cardKey,
+ shape: ShapeLightFocus.RRect,
+ contents: [
+ createTargetContent(
+ text: AppLocalizations.of(context)!.kpiCards,
+ space: 0,
+ alignment: ContentAlign.top,
+ gap:50,
+ ),
+ TargetContent(
+ align: ContentAlign.bottom,
+ child: SizedBox(
+ width: double.infinity,
+ height: MediaQuery.of(context).size.height*0.30,
+ child: Stack(
+ children: [
+ Positioned(
+ bottom: 35,
+ left: 16,
+ right: 16,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ ElevatedButton(
+ onPressed: () => handleSkip(),
+ style: ElevatedButton.styleFrom(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(12),
+ ),
+ side: const BorderSide(color: Colors.white),
+ backgroundColor: Colors.transparent,
+ elevation: 0,
+ ),
+ child: const Text(
+ 'Skip',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 14,
+ ),
+ ),
+ ),
+ Column(
+ children: [
+ Text(
+ '3/7',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 14,
+ ),
+ ),
+ const SizedBox(height: 3),
+ Row(
+ children: [
+ Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ border: Border.all(color: Colors.white, width: 2.0),
+ ),
+ child: IconButton(
+ iconSize: 20,
+ icon: const Icon(Icons.arrow_back, color: Colors.white),
+ onPressed: () {
+ ref.read(previousChartsTourProvider.notifier).state=true;
+ ref.read(previousHomeTourProvider.notifier).state=false;
+ tutorialCoachMark.finish();
+ },
+ ),
+ ),
+ const SizedBox(width: 10),
+ Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ color: Color(0xFF7DAFBC),
+ border: Border.all(color:Color(0xFF7DAFBC), width: 1.5),
+ ),
+ child: IconButton(
+ iconSize: 20,
+ icon: const Icon(Icons.arrow_forward, color: Colors.white),
+ onPressed: () {
+ tutorialCoachMark.previous();
+ },
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ TargetContent(
+ padding: EdgeInsets.only(bottom: 0,top : 0,),
+ align: ContentAlign.top,
+ child: SizedBox(
+ width: MediaQuery.of(context).size.width,
+ height:MediaQuery.of(context).size.height*0.69 ,
+ child: Stack(
+ children: [
+ Positioned(
+ left: MediaQuery.of(context).size.width*0.40,
+ bottom: 0,
+ child: Image.asset(
+ 'assets/app_tour/leftUp.png',
+ width: 100,
+ height: 90,
+ ),
+ ),
+ ]
+ ),
+
+ ),
+ ),
+ ],
+ ),
+
+
+ ];
}
void _scrollToIndex(int index) {
@@ -172,8 +761,8 @@ class _ChartScreen1State extends ConsumerState {
filterDataSet = filterData.entries
.map((entry) => {'key': entry.key, 'value': entry.value})
.toList();
- print("filterDataf1:- $filterData");
- print("filterDataf11:- $filterDataSet");
+ // print("filterDataf1:- $filterData");
+ // print("filterDataf11:- $filterDataSet");
} else {
filterDataSet = data['filterData'] ?? [];
print('filterData not found!');
@@ -741,6 +1330,7 @@ class _ChartScreen1State extends ConsumerState {
mainAxisAlignment: MainAxisAlignment.end,
children: [
Row(
+ key: bookMarkKey,
children: [
Text(
context.translate(
@@ -753,7 +1343,7 @@ class _ChartScreen1State extends ConsumerState {
),
),
SizedBox(width: 5),
- Icon(Icons.bookmark_add_outlined,
+ Icon(Icons.bookmarks_outlined,
color: Colors.white, size: 18),
],
),
@@ -838,6 +1428,7 @@ class _ChartScreen1State extends ConsumerState {
Padding(
padding: const EdgeInsets.all(3.34),
child: GridView.builder(
+ key:cardKey,
itemCount: cardData.length,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
diff --git a/lib/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart b/lib/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart
index ab7cc0f0..6d6d6927 100644
--- a/lib/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart
+++ b/lib/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart
@@ -270,7 +270,7 @@ class EconomyStatsState extends ConsumerState {
ref.read(homeTourProvider.notifier).state = true;
ref.read(chartsTourProvider.notifier).state = false;
debugPrint('Home Tutorial Finished');
- context.push('/marriages');
+ context.go('/chartScreen/hotels?bgColor=0xFF90B0D5&mainTopic=ECONOMY&title=Hotel+Establishments');
},
)..show(context: context);
} else if (!previousHomeTour) {
@@ -284,7 +284,7 @@ class EconomyStatsState extends ConsumerState {
onFinish: () {
ref.read(previousHomeTourProvider.notifier).state = true;
debugPrint('Previous Home Tutorial Finished');
- context.push('/marriages');
+ context.go('/chartScreen/hotels?bgColor=0xFF90B0D5&mainTopic=ECONOMY&title=Hotel+Establishments');
},
)..show(context: context);
}
@@ -292,6 +292,7 @@ class EconomyStatsState extends ConsumerState {
}
void _initTarget(){
+ final double screenWidth = MediaQuery.of(context).size.width;
homeTargets=[
TargetFocus(
identify: 'cardTopicKey',
@@ -301,8 +302,8 @@ class EconomyStatsState extends ConsumerState {
createTargetContent(
text: AppLocalizations.of(context)!.home_topic,
alignment: ContentAlign.bottom,
- gap: 45,
- space: 40,
+ gap:0,
+ space: 44,
),
TargetContent(
align: ContentAlign.bottom,
@@ -376,24 +377,19 @@ class EconomyStatsState extends ConsumerState {
),
),
TargetContent(
+ padding: EdgeInsets.only(left: screenWidth * 0.4, bottom: 0),
align: ContentAlign.bottom,
- child: SizedBox(
- width: MediaQuery.of(context).size.width,
- height:MediaQuery.of(context).size.height*0.69 ,
+ child: Container(
+ width: 200,
+ height: 77,
child: Stack(
- children: [
- Positioned(
- left: MediaQuery.of(context).size.width*0.4,
- top: _imageCardPosition.dy-29,
- child: Image.asset(
- 'assets/app_tour/down_right.png',
- width: 40,
- height: 90,
- ),
- ),
- ]
+ children: [
+ Image.asset(
+ 'assets/app_tour/right_down.png',
+ fit: BoxFit.contain,
+ ),
+ ],
),
-
),
),
],
@@ -407,7 +403,7 @@ class EconomyStatsState extends ConsumerState {
text:AppLocalizations.of(context)!.economy,
alignment: ContentAlign.bottom,
gap: 0,
- space: 40,),
+ space: 44,),
TargetContent(
align: ContentAlign.bottom,
@@ -425,7 +421,7 @@ class EconomyStatsState extends ConsumerState {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ElevatedButton(
- onPressed: () =>handleSkip,
+ onPressed: () =>handleSkip(),
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
@@ -494,24 +490,19 @@ class EconomyStatsState extends ConsumerState {
),
),
TargetContent(
+ padding: EdgeInsets.only(left: screenWidth * 0.4, bottom: 0),
align: ContentAlign.bottom,
- child: SizedBox(
- width: MediaQuery.of(context).size.width ,
- height:MediaQuery.of(context).size.height*0.69 ,
+ child: Container(
+ width: 200,
+ height: 77,
child: Stack(
- children: [
- Positioned(
- left: MediaQuery.of(context).size.width*0.40,
- top: _imageTopicPosition.dy-29,
- child: Image.asset(
- 'assets/app_tour/down_right.png',
- width: 40,
- height: 90,
- ),
- ),
- ]
+ children: [
+ Image.asset(
+ 'assets/app_tour/right_down.png',
+ fit: BoxFit.contain,
+ ),
+ ],
),
-
),
),
],
@@ -520,6 +511,7 @@ class EconomyStatsState extends ConsumerState {
}
void _initPreviousTarget(){
+ final double screenWidth = MediaQuery.of(context).size.width;
previousHomeTargets=[
TargetFocus(
identify: 'cardsKey',
@@ -530,7 +522,7 @@ class EconomyStatsState extends ConsumerState {
text:AppLocalizations.of(context)!.economy,
alignment: ContentAlign.bottom,
gap: 0,
- space: 40,),
+ space: 44,),
TargetContent(
align: ContentAlign.bottom,
child:
@@ -617,24 +609,19 @@ class EconomyStatsState extends ConsumerState {
),
),
TargetContent(
+ padding: EdgeInsets.only(left: screenWidth * 0.4, bottom: 0),
align: ContentAlign.bottom,
- child: SizedBox(
- width: MediaQuery.of(context).size.width,
- height:MediaQuery.of(context).size.height*0.69 ,
+ child: Container(
+ width: 200,
+ height: 77,
child: Stack(
- children: [
- Positioned(
- left: MediaQuery.of(context).size.width*0.40,
- top: _imageTopicPosition.dy-29,
- child: Image.asset(
- 'assets/app_tour/down_right.png',
- width: 40,
- height: 90,
- ),
- ),
- ]
+ children: [
+ Image.asset(
+ 'assets/app_tour/right_down.png',
+ fit: BoxFit.contain,
+ ),
+ ],
),
-
),
),
],
@@ -647,8 +634,8 @@ class EconomyStatsState extends ConsumerState {
createTargetContent(
text:AppLocalizations.of(context)!.home_topic,
alignment: ContentAlign.bottom,
- gap: 45,
- space: 40,
+ gap: 0,
+ space: 44,
),
TargetContent(
align: ContentAlign.bottom,
@@ -724,24 +711,19 @@ class EconomyStatsState extends ConsumerState {
),
),
TargetContent(
+ padding: EdgeInsets.only(left: screenWidth * 0.4, bottom: 0),
align: ContentAlign.bottom,
- child: SizedBox(
- width: MediaQuery.of(context).size.width,
- height:MediaQuery.of(context).size.height*0.69 ,
+ child: Container(
+ width: 200,
+ height: 77,
child: Stack(
- children: [
- Positioned(
- left: MediaQuery.of(context).size.width*0.4,
- top: _imageCardPosition.dy-29,
- child: Image.asset(
- 'assets/app_tour/down_right.png',
- width: 40,
- height: 90,
- ),
- ),
- ]
+ children: [
+ Image.asset(
+ 'assets/app_tour/right_down.png',
+ fit: BoxFit.contain,
+ ),
+ ],
),
-
),
),
],
diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/bookmark.dart b/lib/presentation/routes/drawer_routes/Drawer Items/bookmark.dart
new file mode 100644
index 00000000..75e2ccbd
--- /dev/null
+++ b/lib/presentation/routes/drawer_routes/Drawer Items/bookmark.dart
@@ -0,0 +1,194 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
+
+
+class BookMark extends ConsumerStatefulWidget {
+ const BookMark({super.key});
+
+ @override
+ ConsumerState createState() => _BookMarkState();
+}
+
+class _BookMarkState extends ConsumerState {
+ // Example dynamic data
+ final List