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/demo_home2.dart';
|
||||||
import 'package:uae_stat/presentation/Screens/online_offline_verification/internet_check.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/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/routes/drawer_routes/custom_drawer_routes.dart';
|
||||||
|
|
||||||
import 'package:uae_stat/presentation/Screens/Bottom Navigation Pages/UAE_Numbers/uae_numbers.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/feedback.dart';
|
||||||
import '../presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.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/features.dart';
|
||||||
import '../presentation/routes/drawer_routes/Drawer Items/user_guide/user_guide.dart';
|
|
||||||
import '../presentation/routes/drawer_routes/Drawer Items/manage_users.dart';
|
import '../presentation/routes/drawer_routes/Drawer Items/manage_users.dart';
|
||||||
|
|
||||||
final pbService = PocketBaseService();
|
final pbService = PocketBaseService();
|
||||||
@ -465,27 +474,75 @@ final GoRouter router = GoRouter(
|
|||||||
return ProfileScreen(userId: userId);
|
return ProfileScreen(userId: userId);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/user-guide',
|
path: '/user-guide',
|
||||||
builder: (context, state) => UserGuide(),
|
builder: (context, state) => Userguide(),
|
||||||
routes: <RouteBase>[
|
routes: <RouteBase>[
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/features',
|
path: '/features',
|
||||||
name: 'features',
|
name: 'features',
|
||||||
builder: (context, state) => UsingFeatures(),
|
builder: (context, state) => UsingFeatures(),
|
||||||
|
routes: <RouteBase>[
|
||||||
|
GoRoute(
|
||||||
|
path: 'whoUseApp',
|
||||||
|
name: 'whoUseApp',
|
||||||
|
builder: (context, state) => WhoUseTheApp(),
|
||||||
|
),
|
||||||
|
GoRoute(
|
||||||
|
path: 'howUseApp',
|
||||||
|
name: 'howUseApp',
|
||||||
|
builder: (context, state) => HowUseTheApp(),
|
||||||
|
),
|
||||||
|
GoRoute(
|
||||||
|
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(
|
GoRoute(
|
||||||
path: '/faq',
|
path: '/faq',
|
||||||
name: 'faq',
|
name: 'faq',
|
||||||
builder: (context, state) => FAQPage(),
|
builder: (context, state) => FAQPage(),
|
||||||
),
|
),
|
||||||
GoRoute(
|
|
||||||
path: '/gettingStarted',
|
|
||||||
name: 'gettingStarted',
|
|
||||||
builder: (context, state) => GettingStarted(),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
// GoRoute(
|
// GoRoute(
|
||||||
// path: '/manageuser',
|
// path: '/manageuser',
|
||||||
// builder: (context, state) {
|
// 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,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
208
lib/presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.dart
Normal file → Executable file
@ -1,12 +1,7 @@
|
|||||||
import 'package:flutter/material.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/custom_drawer_routes.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 {
|
class FAQPage extends StatefulWidget {
|
||||||
const FAQPage({super.key});
|
const FAQPage({super.key});
|
||||||
|
|
||||||
@ -17,87 +12,35 @@ class FAQPage extends StatefulWidget {
|
|||||||
class _FAQPageState extends State<FAQPage> {
|
class _FAQPageState extends State<FAQPage> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return BaseScaffold(
|
||||||
appBar: AppBar(
|
showBackButton: true,
|
||||||
elevation: 3,
|
dividerColor: Colors.grey[300],
|
||||||
shadowColor: Colors.black,
|
appbarColor: Colors.white,
|
||||||
title: Text('Key Features',),
|
bottomColor: Colors.white,
|
||||||
leading: IconButton(
|
mycenterTitle: true,
|
||||||
onPressed: (){
|
title: Padding(
|
||||||
context.go('/user-guide');
|
padding:EdgeInsets.only(bottom:8.0),
|
||||||
},
|
child: Text(' FAQs',
|
||||||
color: Colors.black,
|
style: TextStyle(
|
||||||
icon: const Icon(Icons.arrow_back_ios_new),),
|
fontSize:22,
|
||||||
actions: [
|
color: Color(0xFF7DAFBC),
|
||||||
Consumer(
|
fontWeight: FontWeight.w500,
|
||||||
builder: (context, ref, _) {
|
// fontWeight: FontWeight.w500,
|
||||||
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(
|
body: SafeArea(
|
||||||
|
child: Container(
|
||||||
|
height: double.infinity,
|
||||||
|
color: Colors.white,
|
||||||
child: Scrollbar(
|
child: Scrollbar(
|
||||||
thumbVisibility: true,
|
thumbVisibility: true,
|
||||||
thickness: 6,
|
thickness: 8,
|
||||||
radius: Radius.circular(10),
|
radius: Radius.circular(10),
|
||||||
interactive: true,
|
interactive: true,
|
||||||
child:SingleChildScrollView(
|
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(),
|
child: QuestionAnswerScrollView(),
|
||||||
),
|
),
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
@ -122,21 +65,17 @@ class QuestionAnswerScrollView extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Yes, the app is strictly for registered and approved users. To access the data:\n\n',
|
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),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' 1. You need to sign up using the Register Now option on the login screen.\n',
|
text: ' 1. You need to sign up using the Register Now option on the login screen.\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' 2. Your registration must be approved by the admin.\n',
|
text: ' 2. Your registration must be approved by the admin.\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
|
|
||||||
TextSpan(
|
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 ",
|
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),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),},
|
),},
|
||||||
@ -146,33 +85,26 @@ class QuestionAnswerScrollView extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'The app offers data on:\n\n',
|
text: 'The app offers data on:\n\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' • Economy',
|
text: ' • Economy',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' GDP, growth rates, and economic trends\n',
|
text: ' GDP, growth rates, and economic trends\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' • Environment:',
|
text: ' • Environment:',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' Electricity production, water consumption, and more.\n',
|
text: ' Electricity production, water consumption, and more.\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' • Social:',
|
text: ' • Social:',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' Labor force distribution, participation rates, and demographic data.\n',
|
text: ' Labor force distribution, participation rates, and demographic data.\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),},
|
),},
|
||||||
@ -181,25 +113,20 @@ class QuestionAnswerScrollView extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'When viewing a metric, tap on the',
|
text: 'When viewing a metric, tap on the',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' Bookmark ',
|
text: ' Bookmark ',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'icon. Your bookmarks are accessible from the',
|
text: 'icon. Your bookmarks are accessible from the',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'My Bookmarks',
|
text: 'My Bookmarks',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'section in the navigation bar.\n',
|
text: 'section in the navigation bar.\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),},
|
),},
|
||||||
@ -208,25 +135,20 @@ class QuestionAnswerScrollView extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Yes, the app supports both ',
|
text: 'Yes, the app supports both ',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'English ',
|
text: 'English ',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'and',
|
text: 'and',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' Arabic ',
|
text: ' Arabic ',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: '. You can toggle the language using the switch in the top-right corner of the app.\n',
|
text: '. You can toggle the language using the switch in the top-right corner of the app.\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),},
|
),},
|
||||||
@ -239,16 +161,13 @@ class QuestionAnswerScrollView extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Yes, you can share data or charts directly from the app by tapping the ',
|
text: 'Yes, you can share data or charts directly from the app by tapping the ',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Share ',
|
text: 'Share ',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'button available on most pages.\n',
|
text: 'button available on most pages.\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),},
|
),},
|
||||||
@ -257,16 +176,13 @@ class QuestionAnswerScrollView extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'For technical support or feedback, navigate to the ',
|
text: 'For technical support or feedback, navigate to the ',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Help ',
|
text: 'Help ',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'section in the app and contact the support team.\n',
|
text: 'section in the app and contact the support team.\n',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),},
|
),},
|
||||||
@ -275,24 +191,20 @@ class QuestionAnswerScrollView extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Go to the ',
|
text: 'Go to the ',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Profile ',
|
text: 'Profile ',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'section and tap the ',
|
text: 'section and tap the ',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ),
|
||||||
),
|
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Logout ',
|
text: 'Logout ',
|
||||||
style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500),
|
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16),
|
||||||
),
|
),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'option in the top-right corner.\n',
|
text: 'option in the top-right corner.\n',
|
||||||
style: TextStyle(color: Colors.grey), ),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ) ],
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),},
|
),},
|
||||||
];
|
];
|
||||||
@ -320,23 +232,23 @@ class _QuestionAnswerCardState extends State<QuestionAnswerCard> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Card(
|
return Card(
|
||||||
color: Colors.grey[50],
|
color: Colors.white,
|
||||||
elevation: 1,
|
shape: Border(
|
||||||
shape: RoundedRectangleBorder(
|
bottom: BorderSide(width: 0.5,color: Colors.grey.shade300),
|
||||||
borderRadius: BorderRadius.zero, // No rounding, it's a rectangle
|
|
||||||
),
|
),
|
||||||
margin: EdgeInsets.symmetric(vertical: 0),
|
margin: EdgeInsets.symmetric(vertical: 0, ),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|
||||||
dense: true,
|
dense: true,
|
||||||
textColor: Color(0xFF414042),
|
textColor: Color(0xFF414042),
|
||||||
title: Text(
|
title: Text(
|
||||||
widget.qa['question']!,
|
widget.qa['question']!,
|
||||||
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 15),
|
style: TextStyle(fontWeight: FontWeight.w500, fontSize: 16),
|
||||||
),
|
),
|
||||||
trailing: Icon(isExpanded ? Icons.remove : Icons.add),
|
trailing: Icon(isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
isExpanded = !isExpanded;
|
isExpanded = !isExpanded;
|
||||||
@ -345,12 +257,12 @@ class _QuestionAnswerCardState extends State<QuestionAnswerCard> {
|
|||||||
),
|
),
|
||||||
if (isExpanded)
|
if (isExpanded)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16,top: 0),
|
||||||
child: widget.qa['answer'] is RichText
|
child: widget.qa['answer'] is RichText
|
||||||
? widget.qa['answer']
|
? widget.qa['answer']
|
||||||
: Text(
|
: Text(
|
||||||
widget.qa['answer'] ?? '',
|
widget.qa['answer'] ?? '',
|
||||||
style: TextStyle(color: Colors.grey),
|
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
767
lib/presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart
Normal file → Executable file
@ -3,10 +3,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||||||
import 'package:go_router/go_router.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/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 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
|
||||||
import '../../../../components/my_toggle.dart';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -16,580 +14,221 @@ class UsingFeatures extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final fcscBanner = Image.asset(
|
||||||
List<TextSpan> textSpans = [
|
BannerAssetPath.fcsc,
|
||||||
CustomTextRich.createTextSpan('1.Data-Driven Insights:',
|
height: 56,
|
||||||
fontSize: 15,
|
alignment:Alignment.center,
|
||||||
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();
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
},
|
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:SafeArea(
|
) ,
|
||||||
|
body: Container(
|
||||||
child: Scrollbar(
|
width: double.infinity,
|
||||||
thumbVisibility: true,
|
color: Colors.white,
|
||||||
thickness: 6,
|
|
||||||
radius: Radius.circular(10),
|
|
||||||
interactive: true,
|
|
||||||
child: SingleChildScrollView(
|
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
color: Colors.white,
|
decoration: BoxDecoration(
|
||||||
padding: const EdgeInsets.all(16.0),
|
border: Border(
|
||||||
width: MediaQuery.of(context).size.width,
|
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||||
child: Text(
|
|
||||||
'FEATURES',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.black,// Text color
|
|
||||||
fontSize: 18,
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
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(
|
Container(
|
||||||
color: Colors.grey[50], // Set the background color here
|
decoration: BoxDecoration(
|
||||||
// child: SingleChildScrollView(
|
border: Border(
|
||||||
child: CustomTextRich(
|
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line
|
||||||
textSpans: textSpans,
|
|
||||||
padding: const EdgeInsets.all(16.0),
|
|
||||||
textAlign: TextAlign.start,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
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.body,
|
||||||
required this.title,
|
required this.title,
|
||||||
this.actions,
|
this.actions,
|
||||||
|
this.showDivider =false,
|
||||||
|
this.dividerColor ,
|
||||||
this.showBackButton = false,
|
this.showBackButton = false,
|
||||||
this.mycenterTitle = false,
|
this.mycenterTitle = false,
|
||||||
this.appbarColor,
|
this.appbarColor,
|
||||||
this.mytitleColor,
|
this.mytitleColor,
|
||||||
|
this.bottomColor=null,
|
||||||
});
|
});
|
||||||
final Widget body;
|
final Widget body;
|
||||||
final Widget title;
|
final Widget title;
|
||||||
final bool? showBackButton;
|
final Color? dividerColor;
|
||||||
|
final bool showDivider;
|
||||||
|
final bool showBackButton;
|
||||||
final bool? mycenterTitle;
|
final bool? mycenterTitle;
|
||||||
final List<Widget>? actions;
|
final List<Widget>? actions;
|
||||||
|
final Color? bottomColor;
|
||||||
final Color? appbarColor, mytitleColor;
|
final Color? appbarColor, mytitleColor;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -619,6 +625,15 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
|
|||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: widget.title,
|
title: widget.title,
|
||||||
backgroundColor: widget.appbarColor,
|
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 ??
|
actions: widget.actions ??
|
||||||
[
|
[
|
||||||
// IconButton(
|
// IconButton(
|
||||||
@ -838,6 +853,7 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
|
|||||||
),
|
),
|
||||||
])),
|
])),
|
||||||
bottomNavigationBar: BottomNavigationBar(
|
bottomNavigationBar: BottomNavigationBar(
|
||||||
|
backgroundColor: widget.bottomColor ?? null,
|
||||||
currentIndex: _getSelectedIndex(currentRoute),
|
currentIndex: _getSelectedIndex(currentRoute),
|
||||||
onTap: (index) => _onItemTapped(context, index),
|
onTap: (index) => _onItemTapped(context, index),
|
||||||
type: BottomNavigationBarType.fixed,
|
type: BottomNavigationBarType.fixed,
|
||||||
|
|||||||
72
pubspec.lock
@ -294,6 +294,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1"
|
version: "3.0.1"
|
||||||
|
dartz:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dartz
|
||||||
|
sha256: e6acf34ad2e31b1eb00948692468c30ab48ac8250e0f0df661e29f12dd252168
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.10.1"
|
||||||
dbus:
|
dbus:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -302,6 +310,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.11"
|
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:
|
equatable:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -543,6 +567,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.0"
|
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:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -665,6 +697,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.2"
|
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:
|
image:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -953,6 +993,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
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:
|
path_provider:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1452,6 +1500,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.5.1"
|
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:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -22,7 +22,7 @@ dependencies:
|
|||||||
cupertino_icons: ^1.0.6
|
cupertino_icons: ^1.0.6
|
||||||
|
|
||||||
fl_chart: ^0.70.2
|
fl_chart: ^0.70.2
|
||||||
|
iconify_design: ^1.0.1
|
||||||
marquee: ^2.2.3
|
marquee: ^2.2.3
|
||||||
url_launcher: ^6.3.1
|
url_launcher: ^6.3.1
|
||||||
# dynamic_layouts:
|
# dynamic_layouts:
|
||||||
|
|||||||