user guide added
BIN
assets/user_guide/AboutFCSC.png
Executable file
|
After Width: | Height: | Size: 42 KiB |
BIN
assets/user_guide/appFeatures.png
Executable file
|
After Width: | Height: | Size: 53 KiB |
BIN
assets/user_guide/changePassword.png
Executable file
|
After Width: | Height: | Size: 40 KiB |
BIN
assets/user_guide/editProfile.png
Executable file
|
After Width: | Height: | Size: 21 KiB |
BIN
assets/user_guide/getStarted.png
Executable file
|
After Width: | Height: | Size: 38 KiB |
BIN
assets/user_guide/howUse.png
Executable file
|
After Width: | Height: | Size: 50 KiB |
BIN
assets/user_guide/purpose.png
Executable file
|
After Width: | Height: | Size: 29 KiB |
BIN
assets/user_guide/stayUpdate.png
Executable file
|
After Width: | Height: | Size: 40 KiB |
BIN
assets/user_guide/whoUse.png
Executable file
|
After Width: | Height: | Size: 38 KiB |
@ -302,7 +302,17 @@ import 'package:uae_stat/presentation/Screens/charts/screens/chart_screen.dart';
|
||||
import 'package:uae_stat/presentation/Screens/demo_home2.dart';
|
||||
import 'package:uae_stat/presentation/Screens/online_offline_verification/internet_check.dart';
|
||||
import 'package:uae_stat/presentation/routes/auth_routes/pocketbase_service.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/getting_started.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/AboutTheApp/AboutFCSC.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/AboutTheApp/getStarted.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/AppFeatures.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/ChangeMyPassword.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/EditMyProfile.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/howUseTheApp.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/purpose.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/stayUpdate.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/useTheApp.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/aboutApp.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/userguide.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
import 'package:uae_stat/presentation/Screens/Bottom Navigation Pages/UAE_Numbers/uae_numbers.dart';
|
||||
@ -323,7 +333,6 @@ 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';
|
||||
import '../presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart';
|
||||
import '../presentation/routes/drawer_routes/Drawer Items/user_guide/user_guide.dart';
|
||||
import '../presentation/routes/drawer_routes/Drawer Items/manage_users.dart';
|
||||
|
||||
final pbService = PocketBaseService();
|
||||
@ -465,27 +474,75 @@ final GoRouter router = GoRouter(
|
||||
return ProfileScreen(userId: userId);
|
||||
},
|
||||
),
|
||||
GoRoute(
|
||||
path: '/user-guide',
|
||||
builder: (context, state) => Userguide(),
|
||||
routes: <RouteBase>[
|
||||
GoRoute(
|
||||
path: '/user-guide',
|
||||
builder: (context, state) => UserGuide(),
|
||||
path: '/features',
|
||||
name: 'features',
|
||||
builder: (context, state) => UsingFeatures(),
|
||||
routes: <RouteBase>[
|
||||
GoRoute(
|
||||
path: '/features',
|
||||
name: 'features',
|
||||
builder: (context, state) => UsingFeatures(),
|
||||
path: 'whoUseApp',
|
||||
name: 'whoUseApp',
|
||||
builder: (context, state) => WhoUseTheApp(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/faq',
|
||||
name: 'faq',
|
||||
builder: (context, state) => FAQPage(),
|
||||
path: 'howUseApp',
|
||||
name: 'howUseApp',
|
||||
builder: (context, state) => HowUseTheApp(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/gettingStarted',
|
||||
name: 'gettingStarted',
|
||||
builder: (context, state) => GettingStarted(),
|
||||
path: 'purpose',
|
||||
name: 'purpose',
|
||||
builder: (context, state) => Purpose(),
|
||||
),
|
||||
GoRoute(
|
||||
path: 'stayUpdated',
|
||||
name: 'stayUpdated',
|
||||
builder: (context, state) => StayUpdate(),
|
||||
),
|
||||
GoRoute(
|
||||
path: 'changeMyPassword',
|
||||
name: 'changeMyPassword',
|
||||
builder: (context, state) => ChangeMyPassword(),
|
||||
),
|
||||
GoRoute(
|
||||
path: 'appFeatures',
|
||||
name: 'appFeatures',
|
||||
builder: (context, state) => AppFeatures(),
|
||||
),
|
||||
GoRoute(
|
||||
path: 'editMyProfile',
|
||||
name: 'editMyProfile',
|
||||
builder: (context, state) => EditMyProfile(),
|
||||
),
|
||||
],
|
||||
),
|
||||
GoRoute(
|
||||
path: 'aboutApp',
|
||||
builder: (context, state) => aboutTheApp(),
|
||||
routes: <RouteBase>[
|
||||
GoRoute(
|
||||
path: 'aboutFCSC',
|
||||
name: 'aboutFCSC',
|
||||
builder: (context, state) => aboutFCSC(),
|
||||
),
|
||||
GoRoute(
|
||||
path: 'getStarted',
|
||||
name: 'getStarted',
|
||||
builder: (context, state) => GetStarted(),
|
||||
),
|
||||
]
|
||||
),
|
||||
GoRoute(
|
||||
path: '/faq',
|
||||
name: 'faq',
|
||||
builder: (context, state) => FAQPage(),
|
||||
),
|
||||
],
|
||||
),
|
||||
// GoRoute(
|
||||
// path: '/manageuser',
|
||||
// builder: (context, state) {
|
||||
|
||||
@ -0,0 +1,89 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
|
||||
class aboutFCSC extends StatelessWidget {
|
||||
const aboutFCSC({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
return BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
bottomColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Getting Started',
|
||||
style: TextStyle(
|
||||
fontFamily: 'Roboto',
|
||||
fontSize: 22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
// fontWeight: FontWeight.normal,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: Column(
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('About FCSC',
|
||||
style: TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
fontFamily: 'Roboto',
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/AboutFCSC.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 5,),
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
text: 'The ',
|
||||
style: TextStyle(
|
||||
color:Colors.grey,
|
||||
fontSize: 16,
|
||||
fontFamily: 'Roboto'
|
||||
),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: ' Federal Competitiveness and Statistics Centre (FCSC),',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color:Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text: ' in your App is designed to provide registered and approved users with access to accurate and comprehensive statistics about the UAE. The app serves as a centralized platform for exploring key datasets, trends, and insights across various sectors.'),
|
||||
],
|
||||
),
|
||||
),
|
||||
Spacer(),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
]
|
||||
),
|
||||
),);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,133 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
|
||||
class GetStarted extends StatelessWidget {
|
||||
const GetStarted({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
return Theme(
|
||||
data: ThemeData(
|
||||
fontFamily: 'Roboto', // Set default font family for this page
|
||||
textTheme: TextTheme(
|
||||
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
|
||||
),
|
||||
),
|
||||
child: BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
bottomColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Getting Started',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
height: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('How to Get Started',
|
||||
style:
|
||||
TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/getStarted.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'1. Download the app from the App Store or Google Play Store.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'2. Log in to unlock advanced features or continue as a guest.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'3. Log in to unlock advanced features or continue as a guest.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height:MediaQuery.of(context).size.height * 0.1,
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,193 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
import '../../../custom_drawer_routes.dart';
|
||||
|
||||
class AppFeatures extends StatelessWidget {
|
||||
AppFeatures({super.key});
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Theme(
|
||||
data: ThemeData(
|
||||
fontFamily: 'Roboto', // Set default font family for this page
|
||||
textTheme: TextTheme(
|
||||
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
|
||||
),
|
||||
),
|
||||
child: BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
bottomColor:Colors.white,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Key Features',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('App Features',
|
||||
style:
|
||||
TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/appFeatures.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
Text('1.Comprehensive Statistics:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 6.0),
|
||||
child: Icon(Icons.brightness_1, size: 5),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
text: 'Access detailed datasets across categories such as Economy, Environment, Social, ',
|
||||
style: TextStyle(
|
||||
color:Color(0xFF898C81),
|
||||
fontSize: 16,
|
||||
fontFamily: 'Roboto'
|
||||
),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'Economy, Environment, Social, ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text: 'and more.'),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Explore statistics presented as smart metrics, graphs, and charts for better understanding.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
SizedBox(height: 8),
|
||||
Text(' 2. Drilldown Navigation:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Start with high-level categories and drill down to specific KPIs and metrics for deeper insights.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('3. Interactive Visualizations:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'View trends and relationships with interactive graphs and charts, including bar graphs, line charts, and more.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
,);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,305 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
import '../../../custom_drawer_routes.dart';
|
||||
|
||||
class ChangeMyPassword extends StatelessWidget {
|
||||
ChangeMyPassword({super.key});
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Theme(
|
||||
data: ThemeData(
|
||||
fontFamily: 'Roboto', // Set default font family for this page
|
||||
textTheme: TextTheme(
|
||||
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
|
||||
),
|
||||
),
|
||||
child: BaseScaffold( showDivider: true,
|
||||
bottomColor: Colors.white,
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('App Features',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('How to Change My Password',
|
||||
style:
|
||||
TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/changePassword.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'Changing your password helps keep your account secure. Follow these steps to update your password:',
|
||||
),
|
||||
SizedBox(height: 12),
|
||||
Text('Steps to Change Password',
|
||||
style:TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('1. Access the Change Password Page:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
text: 'From the Profile page, tap on the ',
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: '"Change Password"',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:' link at the bottom.',)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('2. Enter Old Password:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Enter your current password in the first field.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('3. Set a New Password:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Enter your new password in the second field.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Re-enter the new password in the third field for confirmation.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('4. Password Requirements:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Your new password must be different from the previously used password.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('5. Save Your Password:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
text: 'Tap the ',
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'Save ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:'button',)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'A confirmation message will appear: “Password has been successfully updated.”',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('6. Re-Login:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Log in again using your new password to continue using the app',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
,);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,404 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
import '../../../custom_drawer_routes.dart';
|
||||
|
||||
class EditMyProfile extends StatelessWidget {
|
||||
EditMyProfile({super.key});
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Theme(
|
||||
data: ThemeData(
|
||||
fontFamily: 'Roboto', // Set default font family for this page
|
||||
textTheme: TextTheme(
|
||||
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
|
||||
),
|
||||
),
|
||||
child: BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
bottomColor: Colors.white,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('App Features',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('How to Edit My Profile',
|
||||
style:
|
||||
TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/editProfile.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'Editing your profile allows you to update specific information while ensuring that critical details remain secure. Follow the steps below to update your profile:',
|
||||
),
|
||||
SizedBox(height: 12),
|
||||
Text('Steps to Edit Profile',
|
||||
style:TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('1. Access the Profile Page:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
text: 'Tap on the ',
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: '"Profile"',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:' option from the navigation bar at the top left corner of the screen.',)
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('2. Editable Fields:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'Full Name:',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:' Tap the text box to enter your name (up to 40 alphanumeric characters).',)
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'Date of Birth: ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:' Use the calendar dropdown to select your date of birth.',)
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'Country/Region: ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:' Choose your current location from the dropdown menu.',),
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'User Image: ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:'Tap on the avatar icon to upload or change your profile picture.',),
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('3. Non-Editable Fields:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'Username ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:'and ',),
|
||||
TextSpan(text: 'Email Id: ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:'These fields cannot be edited to ensure the integrity of your account.',),
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('4. Agree to Terms and Conditions:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Ensure that the checkbox for "I agree to Terms & Conditions and Privacy Policy" is selected before saving changes.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('4. Save Your Changes:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
text: 'Tap the ',
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'Save',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:' button at the bottom of the screen.',)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'A confirmation dialog will appear with the message: “Are you sure you want to save this page? Once saved, you will not be able to change your name or date of birth.”',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child:RichText(
|
||||
text: TextSpan(
|
||||
text: 'Select ',
|
||||
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'Confirm',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:' to save the changes',),
|
||||
TextSpan(text: ' Cancel',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text:' to go back.',),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
,);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,187 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
import '../../../custom_drawer_routes.dart';
|
||||
|
||||
class HowUseTheApp extends StatelessWidget {
|
||||
HowUseTheApp({super.key});
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Theme(
|
||||
data: ThemeData(
|
||||
fontFamily: 'Roboto', // Set default font family for this page
|
||||
textTheme: TextTheme(
|
||||
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
|
||||
),
|
||||
),
|
||||
child: BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
bottomColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Key Features',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('How to Use the App',
|
||||
style:
|
||||
TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/howUse.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
Text('1. Registration and Approval:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Sign up for the app and wait for admin approval.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('2. Login and Navigation:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Once approved, log in to access the app. Navigate through the categories on the home screen.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('3. Access Data:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Drill down into specific categories like "Economy" or "Environment" to view detailed KPIs and visual insights.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Text('4. Bookmark Metrics:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Drill down into specific categories like "Economy" or "Environment" to view detailed KPIs and visual insights.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
,);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,150 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
import '../../../custom_drawer_routes.dart';
|
||||
|
||||
class Purpose extends StatelessWidget {
|
||||
Purpose({super.key});
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Theme(
|
||||
data: ThemeData(
|
||||
fontFamily: 'Roboto', // Set default font family for this page
|
||||
textTheme: TextTheme(
|
||||
bodyMedium: TextStyle(fontSize: 16, color:Color(0xFF898C81),),
|
||||
),
|
||||
),
|
||||
child: BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
bottomColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Key Features',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
height: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('Purpose of the App',
|
||||
style:
|
||||
TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/purpose.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
text: 'Provide ',
|
||||
style: TextStyle(
|
||||
color:Color(0xFF898C81),
|
||||
fontSize: 16,
|
||||
fontFamily: 'Roboto'
|
||||
),
|
||||
children: const <TextSpan>[
|
||||
TextSpan(text: 'official statistics ',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Color(0xFF414042),
|
||||
fontFamily: 'Roboto'
|
||||
),),
|
||||
TextSpan(text: 'on the UAE in an accessible format.'),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Support decision-making and research with reliable, up-to-date data.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Enable users to interact with data visually through graphs and metrics.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 40,),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
,);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,103 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
import '../../../custom_drawer_routes.dart';
|
||||
|
||||
class StayUpdate extends StatelessWidget {
|
||||
StayUpdate({super.key});
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Theme(
|
||||
data: ThemeData(
|
||||
fontFamily: 'Roboto', // Set default font family for this page
|
||||
textTheme: TextTheme(
|
||||
bodyMedium: TextStyle(fontSize: 16, color:Color(0xFF898C81),),
|
||||
),
|
||||
),
|
||||
child: BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
bottomColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Key Features',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
height: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('Stay Updated',
|
||||
style:
|
||||
TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/stayUpdate.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'The app regularly updates datasets and features to reflect the latest information. Notifications will alertyou about new data or improvements.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
SizedBox(height: 150,),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
,);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,143 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
import '../../../custom_drawer_routes.dart';
|
||||
|
||||
class WhoUseTheApp extends StatelessWidget {
|
||||
WhoUseTheApp({super.key});
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Theme(
|
||||
data: ThemeData(
|
||||
fontFamily: 'Roboto', // Set default font family for this page
|
||||
textTheme: TextTheme(
|
||||
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
|
||||
),
|
||||
),
|
||||
child: BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
bottomColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Key Features',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
height: double.infinity,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.all(16),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Text('Who Use the App',
|
||||
style:
|
||||
TextStyle(
|
||||
fontSize:20,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),),
|
||||
),
|
||||
SizedBox(
|
||||
width:MediaQuery.of(context).size.width,
|
||||
height:MediaQuery.of(context).size.height * 0.36,
|
||||
child: Image.asset(
|
||||
'assets/user_guide/whoUse.png',
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
Text('This app is intended for:',
|
||||
style:TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Government officials requiring UAE statistics for decision-making.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Business professionals and researchers analyzing market trends.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top : 8.0),
|
||||
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),),
|
||||
), // Bullet point
|
||||
SizedBox(width: 8), // Space between bullet and text
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Students and educators needing reliable data for study and teaching.',
|
||||
textAlign: TextAlign.justify, // Align the text
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 50,),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
,);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
99
lib/presentation/routes/drawer_routes/Drawer Items/user_guide/aboutApp.dart
Executable file
@ -0,0 +1,99 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
|
||||
class aboutTheApp extends StatelessWidget {
|
||||
const aboutTheApp({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
return BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
bottomColor: Colors.white,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Getting Started',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
fontFamily: 'Roboto',
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/aboutApp/aboutFCSC');
|
||||
},
|
||||
tileColor: Colors.white,
|
||||
title: Text('About FCSC',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/aboutApp/getStarted');
|
||||
},
|
||||
// tileColor: Colors.white,
|
||||
title: Text('How to Get Started?',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),
|
||||
),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
shape: Border(
|
||||
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line
|
||||
),
|
||||
|
||||
),
|
||||
),
|
||||
Spacer(),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 25,),
|
||||
],
|
||||
),
|
||||
|
||||
),);
|
||||
}
|
||||
}
|
||||
@ -1,57 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class CustomTextRich extends StatelessWidget {
|
||||
|
||||
const CustomTextRich({
|
||||
super.key,
|
||||
required this.textSpans,
|
||||
this.padding = const EdgeInsets.all(8.0),
|
||||
this.textAlign = TextAlign.left,
|
||||
});
|
||||
final List<TextSpan> textSpans;
|
||||
final EdgeInsetsGeometry padding;
|
||||
final TextAlign textAlign;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SingleChildScrollView(
|
||||
child :Padding(
|
||||
padding: padding,
|
||||
child: Text.rich(
|
||||
TextSpan(children: textSpans),
|
||||
textAlign: textAlign,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
static TextSpan createTextSpan(
|
||||
String text, {
|
||||
double? fontSize,
|
||||
Color color = const Color(0xFF898C81),
|
||||
FontWeight fontWeight = FontWeight.w500,
|
||||
double? height,
|
||||
double defaultFontSize = 14,
|
||||
TextDecoration textDecoration = TextDecoration.none,
|
||||
Color? decorationColor,
|
||||
double spacingTop = 0.0,
|
||||
double spacingBottom = 0.0,
|
||||
}) {
|
||||
String spacedText = (spacingTop > 0.0 || spacingBottom > 0.0)
|
||||
? '${'\n' * spacingTop.toInt()}$text${'\n' * spacingBottom.toInt()}'
|
||||
: text;
|
||||
return TextSpan(
|
||||
text: spacedText,
|
||||
style: TextStyle(
|
||||
fontSize: fontSize ?? defaultFontSize,
|
||||
color: color,
|
||||
fontWeight: fontWeight,
|
||||
height: height,
|
||||
decoration: textDecoration,
|
||||
decorationColor: decorationColor ?? color,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
630
lib/presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.dart
Normal file → Executable file
@ -1,360 +1,272 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
import '../../../../components/indicators/locale_provider.dart';
|
||||
import '../../../../components/my_toggle.dart';
|
||||
|
||||
class FAQPage extends StatefulWidget {
|
||||
const FAQPage({super.key});
|
||||
|
||||
@override
|
||||
State<FAQPage> createState() => _FAQPageState();
|
||||
}
|
||||
|
||||
class _FAQPageState extends State<FAQPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 3,
|
||||
shadowColor: Colors.black,
|
||||
title: Text('Key Features',),
|
||||
leading: IconButton(
|
||||
onPressed: (){
|
||||
context.go('/user-guide');
|
||||
},
|
||||
color: Colors.black,
|
||||
icon: const Icon(Icons.arrow_back_ios_new),),
|
||||
actions: [
|
||||
Consumer(
|
||||
builder: (context, ref, _) {
|
||||
final locale = ref.watch(localeProvider); // Current locale
|
||||
return MyToggle(
|
||||
isOn: locale?.languageCode == 'en',
|
||||
knobTextWhenOn: 'ع',
|
||||
knobTextWhenOff: 'EN',
|
||||
pathColorWhenOn: Colors.grey.shade300,
|
||||
pathColorWhenOff: Colors.grey.shade300,
|
||||
onTap: () {
|
||||
ref.read(localeProvider.notifier).toggleLocale();
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
|
||||
),
|
||||
body: SafeArea(
|
||||
child: Scrollbar(
|
||||
thumbVisibility: true,
|
||||
thickness: 6,
|
||||
radius: Radius.circular(10),
|
||||
interactive: true,
|
||||
child:SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container
|
||||
(
|
||||
color: Colors.white,
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Text.rich(
|
||||
TextSpan(
|
||||
text: 'Here are some common questions about the ',
|
||||
style: TextStyle(
|
||||
fontSize: 19,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.grey,
|
||||
),
|
||||
children: [
|
||||
TextSpan(
|
||||
text:' Federal Competitiveness and Statistics Centre (FCSC),',
|
||||
style: TextStyle(
|
||||
fontSize: 19,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'mobile application:',
|
||||
style: TextStyle(
|
||||
fontSize: 19,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.grey,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
padding: const EdgeInsets.all(0.0),
|
||||
color: Colors.grey[50],
|
||||
child: QuestionAnswerScrollView(),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
class QuestionAnswerScrollView extends StatelessWidget {
|
||||
const QuestionAnswerScrollView({super.key});
|
||||
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final List<Map<String, dynamic>> questionsAndAnswers = [
|
||||
{'question':'What is the purpose of this app?', 'answer': 'The app provides official UAE statistics across categories like Economy, Environment, and Social. It allows users to explore datasets, view trends, and access detailed metrics to make informed decisions.'},
|
||||
{'question':'Do I need to create an account to use the app?', 'answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Yes, the app is strictly for registered and approved users. To access the data:\n\n',
|
||||
style: TextStyle(fontWeight: FontWeight.normal, color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' 1. You need to sign up using the Register Now option on the login screen.\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' 2. Your registration must be approved by the admin.\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
|
||||
TextSpan(
|
||||
text: " 3. Once approved, you can log in to access the app's features and datasets.\n\nGuest access is not available for this application.\n ",
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'How can I navigate through the app?','answer':'• Use the main categories on the homepage (e.g., Economy, Environment) to access subcategories and detailed KPIs.\n• Drill down into specific metrics or graphical views by tapping on a KPI.\n• Access additional features like Bookmarks or Profile through the navigation bar.\n'},
|
||||
{'question':'What types of data are available?', 'answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'The app offers data on:\n\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' • Economy',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' GDP, growth rates, and economic trends\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
|
||||
TextSpan(
|
||||
text: ' • Environment:',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' Electricity production, water consumption, and more.\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' • Social:',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' Labor force distribution, participation rates, and demographic data.\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'How do I bookmark a metric?', 'answer': RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'When viewing a metric, tap on the',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' Bookmark ',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'icon. Your bookmarks are accessible from the',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
|
||||
TextSpan(
|
||||
text: 'My Bookmarks',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'section in the navigation bar.\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'Can I view the app in another language?', 'answer': RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Yes, the app supports both ',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'English ',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'and',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
|
||||
TextSpan(
|
||||
text: ' Arabic ',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: '. You can toggle the language using the switch in the top-right corner of the app.\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'What happens if I forget my password?','answer':'Tap on the Forgot Password? link on the login page. Follow the steps to reset your password via your registered email address.\n'},
|
||||
{'question':'Can I edit my profile details?','answer': 'Yes, you can edit specific fields such as Date of Birth and User Image. However, certain fields like Username and Email are non-editable for security reasons.\n'},
|
||||
{'question':'How often is the data updated?','answer':'The app updates its datasets regularly to ensure users have access to the latest statistics. Notifications are sent whenever significant updates are made.\n'},
|
||||
{'question':'What types of graphs and charts are available?','answer':'The app provides a variety of visualizations, including:\n • Line charts for trends.\n • Bar and column charts for comparisons.\n • Stacked charts for multi-layered data views.\n'},
|
||||
{'question':'Can I share the data or charts?','answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Yes, you can share data or charts directly from the app by tapping the ',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'Share ',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'button available on most pages.\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'What should I do if I encounter an issue?','answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'For technical support or feedback, navigate to the ',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'Help ',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'section in the app and contact the support team.\n',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'How do I log out of the app?','answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Go to the ',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'Profile ',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'section and tap the ',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'Logout ',
|
||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'option in the top-right corner.\n',
|
||||
style: TextStyle(color: Colors.grey), ),
|
||||
],
|
||||
),
|
||||
),},
|
||||
];
|
||||
|
||||
return SingleChildScrollView(
|
||||
child: Column(
|
||||
children: questionsAndAnswers.map((qa) => QuestionAnswerCard(qa: qa)).toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class QuestionAnswerCard extends StatefulWidget { // Use dynamic to accommodate RichText
|
||||
|
||||
const QuestionAnswerCard({super.key, required this.qa});
|
||||
final Map<String, dynamic> qa;
|
||||
|
||||
@override
|
||||
_QuestionAnswerCardState createState() => _QuestionAnswerCardState();
|
||||
}
|
||||
|
||||
class _QuestionAnswerCardState extends State<QuestionAnswerCard> {
|
||||
bool isExpanded = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Card(
|
||||
color: Colors.grey[50],
|
||||
elevation: 1,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.zero, // No rounding, it's a rectangle
|
||||
),
|
||||
margin: EdgeInsets.symmetric(vertical: 0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
ListTile(
|
||||
dense: true,
|
||||
textColor: Color(0xFF414042),
|
||||
title: Text(
|
||||
widget.qa['question']!,
|
||||
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 15),
|
||||
),
|
||||
trailing: Icon(isExpanded ? Icons.remove : Icons.add),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
isExpanded = !isExpanded;
|
||||
});
|
||||
},
|
||||
),
|
||||
if (isExpanded)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
child: widget.qa['answer'] is RichText
|
||||
? widget.qa['answer']
|
||||
: Text(
|
||||
widget.qa['answer'] ?? '',
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
class FAQPage extends StatefulWidget {
|
||||
const FAQPage({super.key});
|
||||
|
||||
@override
|
||||
State<FAQPage> createState() => _FAQPageState();
|
||||
}
|
||||
|
||||
class _FAQPageState extends State<FAQPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BaseScaffold(
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
bottomColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text(' FAQs',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: SafeArea(
|
||||
child: Container(
|
||||
height: double.infinity,
|
||||
color: Colors.white,
|
||||
child: Scrollbar(
|
||||
thumbVisibility: true,
|
||||
thickness: 8,
|
||||
radius: Radius.circular(10),
|
||||
interactive: true,
|
||||
child:SingleChildScrollView(
|
||||
child: QuestionAnswerScrollView(),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
class QuestionAnswerScrollView extends StatelessWidget {
|
||||
const QuestionAnswerScrollView({super.key});
|
||||
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final List<Map<String, dynamic>> questionsAndAnswers = [
|
||||
{'question':'What is the purpose of this app?', 'answer': 'The app provides official UAE statistics across categories like Economy, Environment, and Social. It allows users to explore datasets, view trends, and access detailed metrics to make informed decisions.'},
|
||||
{'question':'Do I need to create an account to use the app?', 'answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Yes, the app is strictly for registered and approved users. To access the data:\n\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: ' 1. You need to sign up using the Register Now option on the login screen.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: ' 2. Your registration must be approved by the admin.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
|
||||
TextSpan(
|
||||
text: " 3. Once approved, you can log in to access the app's features and datasets.\n\nGuest access is not available for this application.\n ",
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'How can I navigate through the app?','answer':'• Use the main categories on the homepage (e.g., Economy, Environment) to access subcategories and detailed KPIs.\n• Drill down into specific metrics or graphical views by tapping on a KPI.\n• Access additional features like Bookmarks or Profile through the navigation bar.\n'},
|
||||
{'question':'What types of data are available?', 'answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'The app offers data on:\n\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: ' • Economy',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: ' GDP, growth rates, and economic trends\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
|
||||
TextSpan(
|
||||
text: ' • Environment:',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: ' Electricity production, water consumption, and more.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: ' • Social:',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: ' Labor force distribution, participation rates, and demographic data.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'How do I bookmark a metric?', 'answer': RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'When viewing a metric, tap on the',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: ' Bookmark ',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: 'icon. Your bookmarks are accessible from the',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
|
||||
TextSpan(
|
||||
text: 'My Bookmarks',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: 'section in the navigation bar.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'Can I view the app in another language?', 'answer': RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Yes, the app supports both ',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: 'English ',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: 'and',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
|
||||
TextSpan(
|
||||
text: ' Arabic ',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: '. You can toggle the language using the switch in the top-right corner of the app.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'What happens if I forget my password?','answer':'Tap on the Forgot Password? link on the login page. Follow the steps to reset your password via your registered email address.\n'},
|
||||
{'question':'Can I edit my profile details?','answer': 'Yes, you can edit specific fields such as Date of Birth and User Image. However, certain fields like Username and Email are non-editable for security reasons.\n'},
|
||||
{'question':'How often is the data updated?','answer':'The app updates its datasets regularly to ensure users have access to the latest statistics. Notifications are sent whenever significant updates are made.\n'},
|
||||
{'question':'What types of graphs and charts are available?','answer':'The app provides a variety of visualizations, including:\n • Line charts for trends.\n • Bar and column charts for comparisons.\n • Stacked charts for multi-layered data views.\n'},
|
||||
{'question':'Can I share the data or charts?','answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Yes, you can share data or charts directly from the app by tapping the ',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: 'Share ',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: 'button available on most pages.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'What should I do if I encounter an issue?','answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'For technical support or feedback, navigate to the ',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: 'Help ',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: 'section in the app and contact the support team.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
],
|
||||
),
|
||||
),},
|
||||
{'question':'How do I log out of the app?','answer':RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Go to the ',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: 'Profile ',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||
TextSpan(
|
||||
text: 'section and tap the ',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||
TextSpan(
|
||||
text: 'Logout ',
|
||||
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16),
|
||||
),
|
||||
TextSpan(
|
||||
text: 'option in the top-right corner.\n',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ) ],
|
||||
),
|
||||
),},
|
||||
];
|
||||
|
||||
return SingleChildScrollView(
|
||||
child: Column(
|
||||
children: questionsAndAnswers.map((qa) => QuestionAnswerCard(qa: qa)).toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class QuestionAnswerCard extends StatefulWidget { // Use dynamic to accommodate RichText
|
||||
|
||||
const QuestionAnswerCard({super.key, required this.qa});
|
||||
final Map<String, dynamic> qa;
|
||||
|
||||
@override
|
||||
_QuestionAnswerCardState createState() => _QuestionAnswerCardState();
|
||||
}
|
||||
|
||||
class _QuestionAnswerCardState extends State<QuestionAnswerCard> {
|
||||
bool isExpanded = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Card(
|
||||
color: Colors.white,
|
||||
shape: Border(
|
||||
bottom: BorderSide(width: 0.5,color: Colors.grey.shade300),
|
||||
),
|
||||
margin: EdgeInsets.symmetric(vertical: 0, ),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
ListTile(
|
||||
|
||||
dense: true,
|
||||
textColor: Color(0xFF414042),
|
||||
title: Text(
|
||||
widget.qa['question']!,
|
||||
style: TextStyle(fontWeight: FontWeight.w500, fontSize: 16),
|
||||
),
|
||||
trailing: Icon(isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
isExpanded = !isExpanded;
|
||||
});
|
||||
},
|
||||
),
|
||||
if (isExpanded)
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16,top: 0),
|
||||
child: widget.qa['answer'] is RichText
|
||||
? widget.qa['answer']
|
||||
: Text(
|
||||
widget.qa['answer'] ?? '',
|
||||
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
829
lib/presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart
Normal file → Executable file
@ -1,595 +1,234 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/custom_text.dart';
|
||||
|
||||
import '../../../../components/indicators/locale_provider.dart';
|
||||
import '../../../../components/my_toggle.dart';
|
||||
|
||||
|
||||
|
||||
class UsingFeatures extends StatelessWidget {
|
||||
const UsingFeatures({super.key});
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
List<TextSpan> textSpans = [
|
||||
CustomTextRich.createTextSpan('1.Data-Driven Insights:',
|
||||
fontSize: 15,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'Access detailed datasets across categories such as Economy, Environment, Social, ',
|
||||
fontSize: 13, color:Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal ,
|
||||
spacingTop: 1.9,),
|
||||
|
||||
CustomTextRich.createTextSpan(
|
||||
' Economy, Environment, Social ',
|
||||
fontSize: 13, color:Colors.black,
|
||||
fontWeight: FontWeight.w600 ,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'and more.Explore statistics presented as smart metrics, graphs, and charts for better understanding.',
|
||||
fontSize: 13, color:Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal ,
|
||||
),
|
||||
|
||||
CustomTextRich.createTextSpan('\n2.Drilldown Navigation:', fontSize: 15,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2
|
||||
),
|
||||
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nStart with high-level categories and drill down to specific KPIs and metrics for deeper insights.',
|
||||
fontSize: 13, color:Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal ,
|
||||
),
|
||||
CustomTextRich.createTextSpan('\n3.Interactive Visualizations:', fontSize: 15,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2
|
||||
),
|
||||
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nStart with high-level categories and drill down to specific KPIs and metrics for deeper insights.',
|
||||
fontSize: 13, color:Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal ,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'View trends and relationships with interactive graphs and charts, including bar graphs, line charts, and more.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n4.Secure User Access:',
|
||||
fontSize: 14.0,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nAvailable only to registered users whose accounts have been approved by an admin. Login ensures secure access to sensitive statistical information.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n5.Profile Customization:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nUpdate your profile details, such as name, password, and region, to personalize your experience.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n6.Bookmark:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nSave frequently accessed metrics and datasets for quick reference via the Bookmarks section.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n7.Bilingual Support:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nToggle between English and Arabic for ease of use.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nWho Can Use the App?',
|
||||
fontSize: 18.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2.5
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nThis app is intended for:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n\n • Government officials requiring UAE statistics for decision-making.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n •Business professionals and researchers analyzing market trends.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n •Students and educators needing reliable data for study and teaching.\n\n',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'Purpose of the App\n',
|
||||
fontSize: 16.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2.0
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
' • Provide official statistics on the UAE in an accessible format.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n • Support decision-making and research with reliable, up-to-date data.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n • Enable users to interact with data visually through graphs and metrics.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nHow to Use the App',
|
||||
fontSize: 18.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2.3
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n1.Registration and Approval:',
|
||||
fontSize: 15.0,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2.0
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nSign up for the app and wait for admin approval.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n2.Login and Navigation:',
|
||||
fontSize: 15.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2.0,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nOnce approved, log in to access the app. Navigate through the categories on the home screen.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n3.Access Data:',
|
||||
fontSize: 15.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2.0,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nDrill down into specific categories like "Economy" or "Environment" to view detailed KPIs and visual insights.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n4.Bookmark Metrics:',
|
||||
fontSize: 15.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2.0,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nSave important statistics for easy reference.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nStay Updated',
|
||||
fontSize: 18.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 3,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nThe app is regularly updated with the latest datasets and features to ensure users have access to the most current information.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nHow to Change My Password',
|
||||
fontSize: 18.0,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 3,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nChanging your password helps keep your account secure. Follow these steps to update your password:\n \n',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'Steps to Change Password',
|
||||
fontSize: 16.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2.5
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n1.Access the Change Password Page:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 1.5,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nFrom the Profile page, tap on the "Change Password" link at the bottom.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n2.Enter Old Password:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 1.5,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nEnter your current password in the first field.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n3.Set a New Password:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 1.5,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n• Enter your new password in the second field.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n• Re-enter the new password in the third field for confirmation.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n4.Password Requirements:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nYour new password must be different from the previously used password.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n5.Save Your Password:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n• Tap the Save button.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n• A confirmation message will appear: “Password has been successfully updated.”',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n6.Re-Login:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nLog in again using your new password to continue using the app.\n\n',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'How to Edit My Profile',
|
||||
fontSize: 18.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2.5,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nEditing your profile allows you to update specific information while ensuring that critical details remain secure. Follow the steps below to update your profile:\n',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nSteps to Edit Profile',
|
||||
fontSize: 17.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n 1.Access the Profile Page:',
|
||||
fontSize: 14.0,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nTap on the "Profile" option from the navigation bar at the top left corner of the screen.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n 2. Editable Fields:',
|
||||
fontSize: 14.0,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n • Full Name:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
' Tap the text box to enter your name (up to 40 alphanumeric characters).',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n • Date of Birth:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
' Use the calendar dropdown to select your date of birth.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n • Country/Region: ',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'Choose your current location from the dropdown menu.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n •User Image: ',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'Tap on the avatar icon to upload or change your profile picture.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n 3. Non-Editable Fields:',
|
||||
fontSize: 14.0,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nUsername ',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'and ',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'Email ID: ',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'These fields cannot be edited to ensure the integrity of your account.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n 4.Agree to Terms and Conditions:',
|
||||
fontSize: 14.0,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2,
|
||||
),
|
||||
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nEnsure that the checkbox for "I agree to Terms & Conditions and Privacy Policy" is selected before saving changes.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n 5. Save Your Changes:',
|
||||
fontSize: 15.0,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.bold,
|
||||
height: 2,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n • Tap the Save button at the bottom of the screen.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n • A confirmation dialog will appear with the message:',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'“Are you sure you want to save this page? Once saved, you will not be able to change your name or date of birth.”',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'\n • Select Confirm to save the changes or Cancel to go back.',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
|
||||
];
|
||||
return
|
||||
Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 3,
|
||||
shadowColor: Colors.black,
|
||||
title: Text('Key Features',),
|
||||
leading: IconButton(
|
||||
onPressed: (){
|
||||
context.go('/user-guide');
|
||||
},
|
||||
color: Colors.black,
|
||||
icon: const Icon(Icons.arrow_back_ios_new),),
|
||||
actions: [
|
||||
Consumer(
|
||||
builder: (context, ref, _) {
|
||||
final locale = ref.watch(localeProvider); // Current locale
|
||||
return MyToggle(
|
||||
isOn: locale?.languageCode == 'en',
|
||||
knobTextWhenOn: 'ع',
|
||||
knobTextWhenOff: 'EN',
|
||||
pathColorWhenOn: Colors.grey.shade300,
|
||||
pathColorWhenOff: Colors.grey.shade300,
|
||||
onTap: () {
|
||||
ref.read(localeProvider.notifier).toggleLocale();
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
|
||||
),
|
||||
body:SafeArea(
|
||||
|
||||
child: Scrollbar(
|
||||
thumbVisibility: true,
|
||||
thickness: 6,
|
||||
radius: Radius.circular(10),
|
||||
interactive: true,
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
color: Colors.white,
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Text(
|
||||
'FEATURES',
|
||||
style: TextStyle(
|
||||
color: Colors.black,// Text color
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
color: Colors.grey[50], // Set the background color here
|
||||
// child: SingleChildScrollView(
|
||||
child: CustomTextRich(
|
||||
textSpans: textSpans,
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
|
||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
|
||||
|
||||
|
||||
class UsingFeatures extends StatelessWidget {
|
||||
const UsingFeatures({super.key});
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
return BaseScaffold( showDivider: true,
|
||||
showBackButton: true,
|
||||
dividerColor: Colors.grey[300],
|
||||
bottomColor: Colors.white,
|
||||
appbarColor: Colors.white,
|
||||
mycenterTitle: true,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('Key Features',
|
||||
style: TextStyle(
|
||||
fontSize:22,
|
||||
fontFamily: 'Roboto',
|
||||
color: Color(0xFF7DAFBC),
|
||||
fontWeight: FontWeight.w500,
|
||||
// fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
) ,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
color: Colors.white,
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/features/appFeatures');
|
||||
},
|
||||
tileColor: Colors.white,
|
||||
title: Text('App Features',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/features/whoUseApp');
|
||||
},
|
||||
// tileColor: Colors.white,
|
||||
title: Text('Who can use The App',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),
|
||||
),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
shape: Border(
|
||||
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line
|
||||
),
|
||||
|
||||
),
|
||||
),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/features/purpose');
|
||||
},
|
||||
// tileColor: Colors.white,
|
||||
title: Text('Purpose of the App ?',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),
|
||||
),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
shape: Border(
|
||||
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line
|
||||
),
|
||||
|
||||
),
|
||||
),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/features/howUseApp');
|
||||
},
|
||||
// tileColor: Colors.white,
|
||||
title: Text('How to Use the App',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),
|
||||
),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
shape: Border(
|
||||
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line
|
||||
),
|
||||
|
||||
),
|
||||
),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/features/stayUpdated');
|
||||
},
|
||||
// tileColor: Colors.white,
|
||||
title: Text('Stay Updated',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),
|
||||
),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
shape: Border(
|
||||
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line
|
||||
),
|
||||
|
||||
),
|
||||
),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/features/changeMyPassword');
|
||||
},
|
||||
// tileColor: Colors.white,
|
||||
title: Text('How to Change My Password',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),
|
||||
),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
shape: Border(
|
||||
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line
|
||||
),
|
||||
|
||||
),
|
||||
),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||
),
|
||||
),
|
||||
child: ListTile(
|
||||
onTap: (){
|
||||
context.push('/user-guide/features/editMyProfile');
|
||||
},
|
||||
// tileColor: Colors.white,
|
||||
title: Text('How to Edit My Profile',
|
||||
style: TextStyle(
|
||||
fontSize:16,
|
||||
color: Color(0xFF414042),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'Roboto',
|
||||
),
|
||||
),
|
||||
trailing: Icon(Icons.keyboard_arrow_right),
|
||||
shape: Border(
|
||||
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line
|
||||
),
|
||||
|
||||
),
|
||||
),
|
||||
Spacer(),
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: fcscBanner,
|
||||
),
|
||||
SizedBox(height: 30,),
|
||||
],
|
||||
),
|
||||
|
||||
),);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,219 +0,0 @@
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/custom_text.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
|
||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import '../../../../components/indicators/locale_provider.dart';
|
||||
import '../../../../components/my_toggle.dart';
|
||||
class GettingStarted extends StatelessWidget {
|
||||
GettingStarted({super.key});
|
||||
|
||||
final String url = 'https://fcsc.gov.ae/en-us/Pages/home.aspx';
|
||||
final fcscBanner = Image.asset(
|
||||
BannerAssetPath.fcsc,
|
||||
height: 56,
|
||||
alignment:Alignment.center,
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<TextSpan> textSpans = [
|
||||
|
||||
CustomTextRich.createTextSpan('How to Get Started\n', fontSize: 17,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
CustomTextRich.createTextSpan('1.Download the app from the App Store or Google Play Store.',
|
||||
fontSize: 13, color:Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal ,
|
||||
spacingTop: 1.9,
|
||||
),
|
||||
CustomTextRich.createTextSpan(
|
||||
'2.Log in to unlock advanced features or continue as a guest.\n',
|
||||
fontSize: 13, color:Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal ,
|
||||
spacingTop: 1.9,),
|
||||
|
||||
CustomTextRich.createTextSpan(
|
||||
'3.Navigate through categories, explore metrics, and bookmark essential information.\n',
|
||||
fontSize: 13, color:Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal ,
|
||||
),
|
||||
|
||||
CustomTextRich.createTextSpan('\nStay Updated', fontSize: 15,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 2,
|
||||
),
|
||||
|
||||
CustomTextRich.createTextSpan(
|
||||
'\nThe app regularly updates datasets and features to reflect the latest information. Notifications will alert you about new data or improvements.',
|
||||
fontSize: 13, color:Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal ,
|
||||
),
|
||||
|
||||
CustomTextRich.createTextSpan(
|
||||
'Support decision-making and research with reliable, up-to-date data.\n \n ',
|
||||
fontSize: 14.0,
|
||||
color: Color(0xFF898C81),
|
||||
fontWeight: FontWeight.normal,
|
||||
),
|
||||
|
||||
|
||||
];
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 3,
|
||||
shadowColor: Colors.black,
|
||||
title: Text('About the App',),
|
||||
leading: IconButton(
|
||||
onPressed: (){
|
||||
context.go('/user-guide');
|
||||
},
|
||||
color: Colors.black,
|
||||
icon: const Icon(Icons.arrow_back_ios_new),),
|
||||
actions: [
|
||||
Consumer(
|
||||
builder: (context, ref, _) {
|
||||
final locale = ref.watch(localeProvider); // Current locale
|
||||
return MyToggle(
|
||||
isOn: locale?.languageCode == 'en',
|
||||
knobTextWhenOn: 'ع',
|
||||
knobTextWhenOff: 'EN',
|
||||
pathColorWhenOn: Colors.grey.shade300,
|
||||
pathColorWhenOff: Colors.grey.shade300,
|
||||
onTap: () {
|
||||
ref.read(localeProvider.notifier).toggleLocale();
|
||||
},
|
||||
);
|
||||
// IconButton(
|
||||
// icon: Icon(locale?.languageCode == 'en'
|
||||
// ? Icons.toggle_off_outlined
|
||||
// : Icons.toggle_on_outlined,),
|
||||
// onPressed: () {
|
||||
// ref.read(localeProvider.notifier).toggleLocale();
|
||||
// },
|
||||
// );
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
// title: Text('About the App',),
|
||||
// showBackButton: true,
|
||||
body:SafeArea(
|
||||
child: Scrollbar(
|
||||
thumbVisibility: true,
|
||||
thickness: 6,
|
||||
radius: Radius.circular(10),
|
||||
interactive: true,
|
||||
child:SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
color: Colors.white,
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Text.rich(
|
||||
TextSpan(
|
||||
text: 'The',
|
||||
style: TextStyle(
|
||||
fontSize: 19,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.grey,
|
||||
),
|
||||
children: [
|
||||
TextSpan(
|
||||
text:' Federal Competitiveness and Statistics Centre (FCSC),',
|
||||
style: TextStyle(
|
||||
fontSize: 19,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text:' in your App is designed to provide registered and approved users with access to accurate and comprehensive statistics about the UAE. The app serves as a centralized platform for exploring key datasets, trends, and insights across various sectors.',
|
||||
style: TextStyle(
|
||||
fontSize: 19,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.grey,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
Column(
|
||||
children: [
|
||||
Container(
|
||||
color: Colors.grey[50], // Set the background color here
|
||||
// child: SingleChildScrollView(
|
||||
child: CustomTextRich(
|
||||
textSpans: textSpans,
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
textAlign: TextAlign.start,
|
||||
),
|
||||
),
|
||||
Container(
|
||||
color: Colors.grey[50],
|
||||
padding: EdgeInsets.only(bottom: 26.0),
|
||||
child:Text.rich(
|
||||
TextSpan(
|
||||
text: 'For more information please visit ',
|
||||
style: TextStyle(
|
||||
fontSize: 16.0,
|
||||
color: Color(0xFF265E84),
|
||||
fontWeight: FontWeight.normal,),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'www.fcsc.gov.ae',
|
||||
style: TextStyle(
|
||||
fontSize: 16.0,
|
||||
color: Color(0xFF568898),
|
||||
fontWeight: FontWeight.normal,
|
||||
decoration: TextDecoration.underline,
|
||||
decorationColor:Color(0xFF568898),
|
||||
),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () async {
|
||||
final Uri uri = Uri.parse(url);
|
||||
if (await launchUrl(uri)) {
|
||||
await launchUrl(uri, mode: LaunchMode.externalApplication);
|
||||
} else {
|
||||
throw 'Could not launch $url';
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
color: Colors.grey[50],
|
||||
padding: EdgeInsets.only(bottom: 26.0),
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Center(
|
||||
child: fcscBanner,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -1,148 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
class UserGuide extends StatefulWidget {
|
||||
const UserGuide({super.key});
|
||||
|
||||
@override
|
||||
State<UserGuide> createState() => _UserGuideState();
|
||||
}
|
||||
|
||||
class _UserGuideState extends State<UserGuide> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
List<Widget> createRows(List<List<Map<String, dynamic>>> items) {
|
||||
return items.map((pair) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 20),
|
||||
child: Row(
|
||||
mainAxisAlignment: pair.length == 1
|
||||
? MainAxisAlignment.center
|
||||
: MainAxisAlignment.spaceEvenly,
|
||||
children: pair.map((item) {
|
||||
return userGuides(
|
||||
color: item['color'] as Color,
|
||||
text: item['text'] as String,
|
||||
dynamicIcon: item['icon'],
|
||||
routePath:item['routePath']as String,
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
);
|
||||
}).toList();
|
||||
}
|
||||
|
||||
return BaseScaffold(
|
||||
title: Text('User Guide'),
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(16.0), // Padding around content
|
||||
child: Column(
|
||||
children: createRows([
|
||||
// Each pair defines a row of (Color, Text) pairs
|
||||
[
|
||||
{'routePath':'gettingStarted','color': Color(0xFF90B0D5), 'text': 'Getting Started', 'icon': 'START',},
|
||||
{'routePath':'features','color': Color(0xFFAA8E83), 'text': 'Using Features', 'icon': Icons.stars_outlined,},
|
||||
],
|
||||
[
|
||||
{'routePath':'faq','color': Color(0xFF7296BE), 'text': 'FAQs', 'icon': Icons.question_answer_sharp,},
|
||||
// {'routePath':'features','color': Color(0xFF7DAFBC), 'text': 'Advanced Settings', 'icon': Icons.settings_outlined, 'index': '6'},
|
||||
],
|
||||
]),
|
||||
),
|
||||
),
|
||||
), );
|
||||
}
|
||||
}
|
||||
|
||||
class userGuides extends StatelessWidget {
|
||||
|
||||
const userGuides({super.key, required this.routePath ,required this.color, required this.text,required this.dynamicIcon});
|
||||
final Color color;
|
||||
final String text;
|
||||
final dynamic dynamicIcon;
|
||||
final String routePath;
|
||||
|
||||
|
||||
Widget buildDynamicWidget(dynamic icons, Color iconColor) {
|
||||
if (dynamicIcon is IconData) {
|
||||
|
||||
return Icon(
|
||||
icons,
|
||||
size: 38,
|
||||
color: iconColor,
|
||||
);
|
||||
} else if (dynamicIcon is String) {
|
||||
// Create a Text widget if variable is a String
|
||||
return Text(
|
||||
icons,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 20,
|
||||
color: iconColor,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
// Handle unsupported types
|
||||
return Text(
|
||||
'Unsupported type',
|
||||
style: TextStyle(color: Colors.red),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final double screenWidth= MediaQuery.of(context).size.width;
|
||||
final double screenHeight= MediaQuery.of(context).size.height;
|
||||
return InkWell(
|
||||
onTap: (){
|
||||
context.push('/user-guide/$routePath');
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 4),
|
||||
height: 110,
|
||||
width: screenWidth * 0.40,
|
||||
margin: EdgeInsets.all(1),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
border: Border.all(color: color,
|
||||
width: 2.0)
|
||||
),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
// Icon(
|
||||
// size:38,
|
||||
// icons, // Home icon
|
||||
// color: Colors.white,
|
||||
// ),
|
||||
buildDynamicWidget(dynamicIcon, color),
|
||||
|
||||
SizedBox(width: 10,height: 10,), // Space between icon and text
|
||||
Container(
|
||||
width: double.infinity,
|
||||
padding: EdgeInsets.symmetric(horizontal: 4, vertical: 5), // Padding inside the text background
|
||||
decoration: BoxDecoration(
|
||||
color: color, // Background color for text
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
color: Colors.white, // Text color
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
175
lib/presentation/routes/drawer_routes/Drawer Items/user_guide/userguide.dart
Executable file
@ -0,0 +1,175 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||
import 'package:iconify_design/iconify_design.dart';
|
||||
|
||||
class Userguide extends StatefulWidget {
|
||||
Userguide({super.key});
|
||||
|
||||
@override
|
||||
State<Userguide> createState() => _UserguideState();
|
||||
}
|
||||
|
||||
class _UserguideState extends State<Userguide> {
|
||||
final List<Map<String, dynamic>> guideList = [
|
||||
{'routePath':'aboutApp','color': Color(0xFF90B0D5), 'text': 'Getting Started', 'icon': 'cbi:start-tv', },
|
||||
{'routePath':'features','color': Color(0xFFAA8E83), 'text': 'Using Features', 'icon': 'pajamas:issue-type-feature',},
|
||||
{'routePath':'faq','color': Color(0xFF7296BE), 'text': 'FAQs', 'icon': 'mdi:faq',},
|
||||
];
|
||||
|
||||
@override
|
||||
Widget buildDynamicWidget(dynamic icons, Color color) {
|
||||
if (icons is IconData) {
|
||||
return Icon(
|
||||
icons,
|
||||
size: 38,
|
||||
color: color, // Apply color dynamically
|
||||
);
|
||||
} else if (icons is String) {
|
||||
return Text(
|
||||
icons,
|
||||
style: TextStyle(
|
||||
// fontFamily: 'Handel',
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 20,
|
||||
letterSpacing: 1.6,
|
||||
color: color, // Apply color dynamically
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Text(
|
||||
'Unsupported type',
|
||||
style: TextStyle(color: Colors.red),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Widget build(BuildContext context) {
|
||||
return BaseScaffold(
|
||||
showDivider: true,
|
||||
bottomColor: Colors.white,
|
||||
dividerColor: Colors.grey[300],
|
||||
appbarColor: Colors.white,
|
||||
title: Padding(
|
||||
padding:EdgeInsets.only(bottom:8.0),
|
||||
child: Text('User Guide'),
|
||||
) ,
|
||||
body: Container(
|
||||
color: Colors.white,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16 , vertical: 20),
|
||||
child: GridView.builder(
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2, // Two columns
|
||||
crossAxisSpacing: 10.0,
|
||||
mainAxisSpacing: 10.0,
|
||||
mainAxisExtent:MediaQuery.of(context).size.height* 0.15 ,
|
||||
),
|
||||
itemCount: guideList.length,
|
||||
itemBuilder: (context, index) {
|
||||
return HoverContainer(
|
||||
iconName: guideList[index]['icon'],
|
||||
title: guideList[index]['text'],
|
||||
routePath: guideList[index]['routePath'],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
class HoverContainer extends StatefulWidget {
|
||||
final String iconName;
|
||||
final String title;
|
||||
final String routePath;
|
||||
|
||||
|
||||
const HoverContainer({Key? key, required this.iconName, required this.title, required this.routePath}) : super(key: key);
|
||||
|
||||
@override
|
||||
_HoverContainerState createState() => _HoverContainerState();
|
||||
}
|
||||
|
||||
class _HoverContainerState extends State<HoverContainer> {
|
||||
bool isHovered = true;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final double screenWidth= MediaQuery.of(context).size.width;
|
||||
final double screenHeight= MediaQuery.of(context).size.height;
|
||||
return GestureDetector(
|
||||
onTap: () { context.push('/user-guide/${widget.routePath}');},
|
||||
child: MouseRegion(
|
||||
onEnter: (_) => setState(() => isHovered = true),
|
||||
onExit: (_) => setState(() => isHovered = true),
|
||||
child : Container(
|
||||
padding: EdgeInsets.only(top: 4, right: 4, left: 4, bottom: 6),
|
||||
height: screenHeight* 0.23 ,
|
||||
width: screenWidth*0.30,
|
||||
margin: EdgeInsets.all(1),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
boxShadow: isHovered
|
||||
? [
|
||||
BoxShadow(
|
||||
color: Colors.black.withOpacity(0.2),
|
||||
blurRadius:2,
|
||||
spreadRadius: 1,
|
||||
offset: Offset(0, 4),
|
||||
),
|
||||
]
|
||||
: [],
|
||||
border: Border.all(
|
||||
color: Color(0xFF7DAFBC),
|
||||
width: 1.0
|
||||
),
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
// duration: Duration(milliseconds: 200),
|
||||
|
||||
child: LayoutBuilder(builder: (context, constraints){
|
||||
double containerWidth = constraints.maxWidth;
|
||||
// double containerHeight = constraints.maxHeight;
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
IconifyIcon(icon: widget.iconName,
|
||||
color: Color((0xFF7DAFBC)),
|
||||
size: containerWidth * 0.25,),
|
||||
// buildDynamicWidget(data['icon'], Color(0xFF7DAFBC)),
|
||||
SizedBox(width: 10,height: containerWidth * 0.04,), // Space between icon and text
|
||||
Container(
|
||||
width: containerWidth* 0.85,
|
||||
padding: EdgeInsets.symmetric(horizontal: 4, vertical: 4),
|
||||
margin: EdgeInsets.only(bottom: 3),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFF7DAFBC),
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
border: Border.all(color: Color(0xFF7DAFBC))
|
||||
),
|
||||
child: Text(
|
||||
widget.title,
|
||||
style: TextStyle(
|
||||
color: Colors.white, // Text color
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
})
|
||||
|
||||
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -28,16 +28,22 @@ class BaseScaffold extends ConsumerStatefulWidget {
|
||||
required this.body,
|
||||
required this.title,
|
||||
this.actions,
|
||||
this.showDivider =false,
|
||||
this.dividerColor ,
|
||||
this.showBackButton = false,
|
||||
this.mycenterTitle = false,
|
||||
this.appbarColor,
|
||||
this.mytitleColor,
|
||||
this.bottomColor=null,
|
||||
});
|
||||
final Widget body;
|
||||
final Widget title;
|
||||
final bool? showBackButton;
|
||||
final Color? dividerColor;
|
||||
final bool showDivider;
|
||||
final bool showBackButton;
|
||||
final bool? mycenterTitle;
|
||||
final List<Widget>? actions;
|
||||
final Color? bottomColor;
|
||||
final Color? appbarColor, mytitleColor;
|
||||
|
||||
@override
|
||||
@ -619,6 +625,15 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
|
||||
appBar: AppBar(
|
||||
title: widget.title,
|
||||
backgroundColor: widget.appbarColor,
|
||||
leadingWidth: widget.showBackButton ? mywidth * 0.25 : null,
|
||||
bottom: widget.showDivider
|
||||
? PreferredSize(
|
||||
preferredSize: Size.fromHeight(1), // Height of the line
|
||||
child: Container(
|
||||
color: widget.dividerColor, // Line color
|
||||
height: 1, // Line thickness
|
||||
),
|
||||
): null,
|
||||
actions: widget.actions ??
|
||||
[
|
||||
// IconButton(
|
||||
@ -838,6 +853,7 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
|
||||
),
|
||||
])),
|
||||
bottomNavigationBar: BottomNavigationBar(
|
||||
backgroundColor: widget.bottomColor ?? null,
|
||||
currentIndex: _getSelectedIndex(currentRoute),
|
||||
onTap: (index) => _onItemTapped(context, index),
|
||||
type: BottomNavigationBarType.fixed,
|
||||
|
||||
72
pubspec.lock
@ -294,6 +294,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
dartz:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dartz
|
||||
sha256: e6acf34ad2e31b1eb00948692468c30ab48ac8250e0f0df661e29f12dd252168
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.10.1"
|
||||
dbus:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -302,6 +310,22 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.11"
|
||||
dio:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dio
|
||||
sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.8.0+1"
|
||||
dio_web_adapter:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dio_web_adapter
|
||||
sha256: e485c7a39ff2b384fa1d7e09b4e25f755804de8384358049124830b04fc4f93a
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
equatable:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -543,6 +567,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.0"
|
||||
flutter_svg:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_svg
|
||||
sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.17"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
@ -665,6 +697,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.2"
|
||||
iconify_design:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: iconify_design
|
||||
sha256: "4e8593d994b94f2be6942fafa7392042df457a970763b5bed1bc0eb37ca6e776"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
image:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -953,6 +993,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.9.0"
|
||||
path_parsing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_parsing
|
||||
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
path_provider:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1452,6 +1500,30 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.5.1"
|
||||
vector_graphics:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_graphics
|
||||
sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.18"
|
||||
vector_graphics_codec:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_graphics_codec
|
||||
sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.13"
|
||||
vector_graphics_compiler:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_graphics_compiler
|
||||
sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.16"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@ -22,7 +22,7 @@ dependencies:
|
||||
cupertino_icons: ^1.0.6
|
||||
|
||||
fl_chart: ^0.70.2
|
||||
|
||||
iconify_design: ^1.0.1
|
||||
marquee: ^2.2.3
|
||||
url_launcher: ^6.3.1
|
||||
# dynamic_layouts:
|
||||
|
||||