back button changes

This commit is contained in:
venbaittech 2025-02-07 12:30:59 +05:30
parent e198cfaa7c
commit ffb2a6baf3
24 changed files with 2266 additions and 1951 deletions

View File

@ -301,7 +301,6 @@ import 'package:uae_stat/presentation/Screens/charts/chart.dart';
import 'package:uae_stat/presentation/Screens/charts/screens/chart_screen.dart'; 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/drawer_routes/Drawer%20Items/user_guide/AboutTheApp/AboutFCSC.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/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/AppFeatures.dart';
@ -335,7 +334,6 @@ import '../presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.da
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/manage_users.dart'; import '../presentation/routes/drawer_routes/Drawer Items/manage_users.dart';
final pbService = PocketBaseService();
final FlutterSecureStorage _secureStorage = const FlutterSecureStorage(); final FlutterSecureStorage _secureStorage = const FlutterSecureStorage();
Future<String?> _checkSession() async { Future<String?> _checkSession() async {
@ -474,75 +472,74 @@ final GoRouter router = GoRouter(
return ProfileScreen(userId: userId); return ProfileScreen(userId: userId);
}, },
), ),
GoRoute(
path: '/user-guide',
builder: (context, state) => Userguide(),
routes: <RouteBase>[
GoRoute( GoRoute(
path: '/features', path: '/user-guide',
name: 'features', builder: (context, state) => Userguide(),
builder: (context, state) => UsingFeatures(),
routes: <RouteBase>[ routes: <RouteBase>[
GoRoute( GoRoute(
path: 'whoUseApp', path: '/features',
name: 'whoUseApp', name: 'features',
builder: (context, state) => WhoUseTheApp(), 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( GoRoute(
path: 'howUseApp', path: 'aboutApp',
name: 'howUseApp', builder: (context, state) => aboutTheApp(),
builder: (context, state) => HowUseTheApp(), routes: <RouteBase>[
), GoRoute(
path: 'aboutFCSC',
name: 'aboutFCSC',
builder: (context, state) => aboutFCSC(),
),
GoRoute(
path: 'getStarted',
name: 'getStarted',
builder: (context, state) => GetStarted(),
),
]),
GoRoute( GoRoute(
path: 'purpose', path: '/faq',
name: 'purpose', name: 'faq',
builder: (context, state) => Purpose(), builder: (context, state) => FAQPage(),
),
GoRoute(
path: 'stayUpdated',
name: 'stayUpdated',
builder: (context, state) => StayUpdate(),
),
GoRoute(
path: 'changeMyPassword',
name: 'changeMyPassword',
builder: (context, state) => ChangeMyPassword(),
),
GoRoute(
path: 'appFeatures',
name: 'appFeatures',
builder: (context, state) => AppFeatures(),
),
GoRoute(
path: 'editMyProfile',
name: 'editMyProfile',
builder: (context, state) => EditMyProfile(),
), ),
], ],
), ),
GoRoute(
path: 'aboutApp',
builder: (context, state) => aboutTheApp(),
routes: <RouteBase>[
GoRoute(
path: 'aboutFCSC',
name: 'aboutFCSC',
builder: (context, state) => aboutFCSC(),
),
GoRoute(
path: 'getStarted',
name: 'getStarted',
builder: (context, state) => GetStarted(),
),
]
),
GoRoute(
path: '/faq',
name: 'faq',
builder: (context, state) => FAQPage(),
),
],
),
// GoRoute( // GoRoute(
// path: '/manageuser', // path: '/manageuser',
// builder: (context, state) { // builder: (context, state) {

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; 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/presentation/routes/drawer_routes/custom_drawer_routes.dart';
class Competitiveness extends StatelessWidget { class Competitiveness extends StatelessWidget {
@ -8,16 +9,23 @@ class Competitiveness extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
double myheight = MediaQuery.of(context).size.height; double myheight = MediaQuery.of(context).size.height;
double mywidth = MediaQuery.of(context).size.width; double mywidth = MediaQuery.of(context).size.width;
return BaseScaffold( return PopScope(
title: Center( onPopInvokedWithResult: (didPop, result) {
child: SizedBox( if (didPop) return;
height: myheight / 5, context.go('/myhomepage');
width: mywidth / 3, },
child: Image(image: AssetImage('assets/logos/uae_stat.png')))), child: BaseScaffold(
body: CompetitivenessState(context), title: Center(
child: SizedBox(
height: myheight / 5,
width: mywidth / 3,
child: Image(image: AssetImage('assets/logos/uae_stat.png')))),
body: CompetitivenessState(context),
),
); );
} }
Widget CompetitivenessState(BuildContext context) {return Center(child: Text("Competitiveness"));}
Widget CompetitivenessState(BuildContext context) {
return Center(child: Text("Competitiveness"));
}
} }

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; 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/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
@ -9,16 +10,23 @@ class CountryProfile extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
double myheight = MediaQuery.of(context).size.height; double myheight = MediaQuery.of(context).size.height;
double mywidth = MediaQuery.of(context).size.width; double mywidth = MediaQuery.of(context).size.width;
return BaseScaffold( return PopScope(
title: Center( onPopInvokedWithResult: (didPop, result) {
child: SizedBox( if (didPop) return;
height: myheight / 5, context.go('/myhomepage');
width: mywidth / 3, },
child: Image(image: AssetImage('assets/logos/uae_stat.png')))), child: BaseScaffold(
body: CountryProfileWidget(), title: Center(
child: SizedBox(
height: myheight / 5,
width: mywidth / 3,
child: Image(image: AssetImage('assets/logos/uae_stat.png')))),
body: CountryProfileWidget(),
),
); );
} }
} }
class CountryProfileWidget extends StatelessWidget { class CountryProfileWidget extends StatelessWidget {
const CountryProfileWidget({super.key}); const CountryProfileWidget({super.key});
@ -28,99 +36,20 @@ class CountryProfileWidget extends StatelessWidget {
} }
} }
class HorizontalBarChart extends StatelessWidget { class HorizontalBarChart extends StatelessWidget {
final List<String> xAxisData = ['2019', '2020', '2021', '2022', '2023']; final List<String> xAxisData = ['2019', '2020', '2021', '2022', '2023'];
final List<double> yAxisData = [2, 4, 1, 5, 3]; final List<double> yAxisData = [2, 4, 1, 5, 3];
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
double myheight = MediaQuery.of(context).size.height; double myheight = MediaQuery.of(context).size.height;
return Scaffold( return Scaffold(
appBar: AppBar(title: Text('Horizontal Bar Chart')), // appBar: AppBar(title: Text('Horizontal Bar Chart')),
body: Padding( body: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: child: Center(
Container( child: Text('Coming Soon'),
height: myheight/4, )),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.black12,
blurRadius: 8,
offset: Offset(0, 4),
),
],
),
child:
Padding(
padding: const EdgeInsets.only(top: 16,left: 8.0,right: 8.0,bottom: 8.0),
child: BarChart(
BarChartData(
alignment: BarChartAlignment.spaceAround,
maxY: 8,
barTouchData: BarTouchData(enabled: false),
titlesData: FlTitlesData(
leftTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
interval: 2,
getTitlesWidget: (value, meta) {
return Padding(
padding: const EdgeInsets.only(right: 8.0),
child: Text('${value.toInt()}K'),
);
},
reservedSize: 60,
),
),
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
getTitlesWidget: (value, meta) {
return Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Text(xAxisData[value.toInt()]),
);
},
reservedSize: 40,
),
),
topTitles: AxisTitles(
sideTitles: SideTitles(showTitles: false), // Hides top titles
),
rightTitles: AxisTitles(
sideTitles: SideTitles(showTitles: false), // Hides right titles
),
),
gridData: FlGridData(show: false),
borderData: FlBorderData(show: false),
barGroups: List.generate(
xAxisData.length,
(index) => BarChartGroupData(
x: index,
barRods: [
BarChartRodData(
toY: yAxisData[index],
color: Colors.blueAccent,
//colors: [Colors.blueAccent],
borderRadius: BorderRadius.circular(4),
width: 20,
),
],
),
),
),
),
),
),
),
); );
} }
} }
@ -129,14 +58,6 @@ void main() {
runApp(MaterialApp(home: HorizontalBarChart())); runApp(MaterialApp(home: HorizontalBarChart()));
} }
// void main() { // void main() {
// runApp(MaterialApp(home: HorizontalBarChart())); // runApp(MaterialApp(home: HorizontalBarChart()));
// } // }

View File

@ -12,16 +12,33 @@ import 'package:http/http.dart' as http;
class UaeNumbers extends StatelessWidget { class UaeNumbers extends StatelessWidget {
const UaeNumbers({super.key}); const UaeNumbers({super.key});
@override
// Widget build(BuildContext context) {
// double myheight = MediaQuery.of(context).size.height;
// double mywidth = MediaQuery.of(context).size.width;
// return BaseScaffold(
// title: Text("UAE Numbers"),
// body:
// //EconomicDashboard(),
// //EconomyExpandTile()
// uaenumberWidget());
// }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
double myheight = MediaQuery.of(context).size.height; double myheight = MediaQuery.of(context).size.height;
double mywidth = MediaQuery.of(context).size.width; double mywidth = MediaQuery.of(context).size.width;
return BaseScaffold(
return PopScope(
onPopInvokedWithResult: (didPop, result) {
if (didPop) return;
context.go('/myhomepage');
},
child: BaseScaffold(
title: Text("UAE Numbers"), title: Text("UAE Numbers"),
body: body: uaenumberWidget(),
//EconomicDashboard(), ),
//EconomyExpandTile() );
uaenumberWidget());
} }
} }
@ -81,15 +98,18 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
children: [ children: [
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(30.0), borderRadius: BorderRadius.circular(30.0),
border: Border.all(width: 1,color: Color(0xFFAA8E83)),), border: Border.all(width: 1, color: Color(0xFFAA8E83)),
),
child: TextField( child: TextField(
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Search", hintText: "Search",
prefixIcon: Icon(Icons.search, prefixIcon: Icon(
color: Color(0xFFAA8E83),), Icons.search,
border: InputBorder.none, color: Color(0xFFAA8E83),
),
border: InputBorder.none,
contentPadding: contentPadding:
EdgeInsets.symmetric(vertical: 15.0, horizontal: 20.0), EdgeInsets.symmetric(vertical: 15.0, horizontal: 20.0),
), ),
@ -109,7 +129,7 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
return CustomExpandableTile( return CustomExpandableTile(
index: index, index: index,
isExpanded: expandedIndex == index, // Compare with expandedIndex isExpanded: expandedIndex == index, // Compare with expandedIndex
onTap: (index) { onTap: (index) {
setState(() { setState(() {
expandedIndex = (expandedIndex == index) ? null : index; expandedIndex = (expandedIndex == index) ? null : index;
@ -297,7 +317,6 @@ class CustomExpandableTile extends StatefulWidget {
final bool isExpanded; final bool isExpanded;
final ValueChanged<int> onTap; final ValueChanged<int> onTap;
const CustomExpandableTile({ const CustomExpandableTile({
required this.title, required this.title,
required this.titleBackgroundColor, required this.titleBackgroundColor,
@ -305,7 +324,6 @@ class CustomExpandableTile extends StatefulWidget {
required this.index, required this.index,
required this.isExpanded, required this.isExpanded,
required this.onTap, required this.onTap,
}); });
@override @override
@ -329,8 +347,7 @@ class _CustomExpandableTileState extends State<CustomExpandableTile> {
child: Column( child: Column(
children: [ children: [
GestureDetector( GestureDetector(
onTap: () => widget.onTap(widget.index), onTap: () => widget.onTap(widget.index),
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: widget.titleBackgroundColor, color: widget.titleBackgroundColor,

View File

@ -20,7 +20,6 @@ import 'package:uae_stat/presentation/components/lang_toggle.dart';
import 'package:uae_stat/presentation/components/my_bottom_nav_bar.dart'; import 'package:uae_stat/presentation/components/my_bottom_nav_bar.dart';
import 'package:uae_stat/presentation/components/space.dart'; import 'package:uae_stat/presentation/components/space.dart';
import 'package:uae_stat/presentation/components/themed_text_field.dart'; import 'package:uae_stat/presentation/components/themed_text_field.dart';
import 'package:uae_stat/presentation/routes/auth_routes/pocketbase_service.dart';
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart'; import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import '../../Screens/auth_verification/registration.dart'; import '../../Screens/auth_verification/registration.dart';
@ -32,7 +31,6 @@ import '../../components/my_toggle.dart';
class LoginRoute extends HookConsumerWidget { class LoginRoute extends HookConsumerWidget {
final pb = PocketBase('https://pb.venbait.in'); final pb = PocketBase('https://pb.venbait.in');
final FlutterSecureStorage _secureStorage = const FlutterSecureStorage(); final FlutterSecureStorage _secureStorage = const FlutterSecureStorage();
final _pbService = PocketBaseService();
// final _pb = PocketBase('http://127.0.0.1:8090'); // final _pb = PocketBase('http://127.0.0.1:8090');
// final bool isLoginScreen; // Pass `true` if this is the login screen // final bool isLoginScreen; // Pass `true` if this is the login screen
// LoginRoute({Key? key, required this.isLoginScreen}) : super(key: key); // LoginRoute({Key? key, required this.isLoginScreen}) : super(key: key);
@ -241,13 +239,13 @@ class LoginRoute extends HookConsumerWidget {
), ),
); );
}, },
style: TextButton.styleFrom( style: TextButton.styleFrom(
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
// maximumSize: Size.zero, // maximumSize: Size.zero,
tapTargetSize: MaterialTapTargetSize.shrinkWrap, tapTargetSize: MaterialTapTargetSize.shrinkWrap,
visualDensity: VisualDensity.compact, visualDensity: VisualDensity.compact,
overlayColor: Colors.white overlayColor: Colors.white
), ),
child: Text( child: Text(
context.translate( context.translate(
'Forgot Password?', 'Forgot Password?',

View File

@ -1,66 +0,0 @@
import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart';
class PocketBaseService {
final PocketBase pb = PocketBase('https://pb.venbait.in');
// Save session to local storage
Future<void> saveSession() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString('pb_auth', pb.authStore.token);
await prefs.setString('pb_user', pb.authStore.model.toJson());
await prefs.setInt('pb_auth_time', DateTime.now().millisecondsSinceEpoch);
}
// Load session from local storage
Future<bool> loadSession() async {
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('pb_auth');
final userJson = prefs.getString('pb_user');
if (token != null && userJson != null) {
pb.authStore
.save(token, RecordModel.fromJson(userJson as Map<String, dynamic>));
if (!pb.authStore.isValid || isSessionExpired(prefs)) {
await clearSession();
return false;
}
return true;
}
return false;
}
// Check if the session is expired (4 days)
bool isSessionExpired(SharedPreferences prefs) {
final savedTime = prefs.getInt('pb_auth_time') ?? 0;
final currentTime = DateTime.now().millisecondsSinceEpoch;
const sessionDuration = Duration(days: 4);
return (currentTime - savedTime) > sessionDuration.inMilliseconds;
}
// User login
Future<bool> loginUser(String email, String password) async {
try {
await pb.collection('users').authWithPassword(email, password);
await saveSession();
return true;
} catch (e) {
return false;
}
}
// User logout
Future<void> logoutUser() async {
pb.authStore.clear();
await clearSession();
}
// Clear session from local storage
Future<void> clearSession() async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove('pb_auth');
await prefs.remove('pb_user');
await prefs.remove('pb_auth_time');
}
}

View File

@ -1,8 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.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';
class BookMark extends ConsumerStatefulWidget { class BookMark extends ConsumerStatefulWidget {
const BookMark({super.key}); const BookMark({super.key});
@ -59,23 +59,29 @@ class _BookMarkState extends ConsumerState<BookMark> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final filteredList = dataList.where((item) => item['isBookmark'] == true) final filteredList =
.toList(); dataList.where((item) => item['isBookmark'] == true).toList();
return BaseScaffold( return PopScope(
title: Text('Bookmark'), onPopInvokedWithResult: (didPop, result) {
body: Padding( if (didPop) return;
padding: const EdgeInsets.all(8.0), context.go('/myhomepage');
child: GridView.builder( },
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( child: BaseScaffold(
crossAxisCount: 2, // Two columns title: Text('Bookmark'),
crossAxisSpacing: 10.0, body: Padding(
mainAxisSpacing: 10.0, padding: const EdgeInsets.all(8.0),
mainAxisExtent: 100, child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, // Two columns
crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0,
mainAxisExtent: 100,
),
itemCount: filteredList.length,
itemBuilder: (context, index) {
return _buildBox(filteredList[index], context);
},
), ),
itemCount: filteredList.length,
itemBuilder: (context, index) {
return _buildBox(filteredList[index], context);
},
), ),
), ),
); );
@ -88,10 +94,7 @@ class _BookMarkState extends ConsumerState<BookMark> {
debugPrint("Box clicked: ${data['title']}"); debugPrint("Box clicked: ${data['title']}");
}, },
child: Container( child: Container(
width: MediaQuery width: MediaQuery.of(context).size.width * 0.4,
.of(context)
.size
.width * 0.4,
height: 100, height: 100,
padding: EdgeInsets.all(8.0), padding: EdgeInsets.all(8.0),
decoration: BoxDecoration( decoration: BoxDecoration(
@ -131,14 +134,16 @@ class _BookMarkState extends ConsumerState<BookMark> {
setState(() { setState(() {
// Change isOpen to false when icon is clicked // Change isOpen to false when icon is clicked
int index = dataList.indexWhere( int index = dataList.indexWhere(
(item) => item['title'] == data['title'],); (item) => item['title'] == data['title'],
);
if (index != -1) { if (index != -1) {
dataList[index]['isBookmark'] = false; dataList[index]['isBookmark'] = false;
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
content: Text( content: Text(
'Removed From Bookmark', 'Removed From Bookmark',
style: TextStyle(color: Color(0xFF2F692C), style: TextStyle(
color: Color(0xFF2F692C),
fontWeight: FontWeight.w600), fontWeight: FontWeight.w600),
), ),
backgroundColor: Color(0xFFD6E9C6), backgroundColor: Color(0xFFD6E9C6),
@ -150,7 +155,8 @@ class _BookMarkState extends ConsumerState<BookMark> {
SnackBar( SnackBar(
content: Text( content: Text(
'Failed to Remove', 'Failed to Remove',
style: TextStyle(color: Color(0xFFEB5F24), style: TextStyle(
color: Color(0xFFEB5F24),
fontWeight: FontWeight.w600), fontWeight: FontWeight.w600),
), ),
backgroundColor: Color(0xFF544C4C), backgroundColor: Color(0xFF544C4C),

View File

@ -237,43 +237,50 @@ class _FeedbackFormState extends State<FeedbackForm>
// final userName = uri.queryParameters['userName'] ?? 'Guest User'; // final userName = uri.queryParameters['userName'] ?? 'Guest User';
final userName = GoRouterState.of(context).extra as String? ?? 'Guest User'; final userName = GoRouterState.of(context).extra as String? ?? 'Guest User';
return BaseScaffold( return PopScope(
// title: Text("Feedback"), onPopInvokedWithResult: (didPop, result) {
title: Text( if (didPop) return;
AppLocalizations.of(context)!.feedback_title, context.go('/myhomepage');
style: TextStyle( },
fontSize: 24, fontFamily: 'Roboto', fontWeight: FontWeight.w500), child: BaseScaffold(
), // title: Text("Feedback"),
// appBar: AppBar( title: Text(
// backgroundColor: const Color(0xFFf8f9ff), AppLocalizations.of(context)!.feedback_title,
// title: Text(AppLocalizations.of(context)!.feedback_title), style: TextStyle(
// actions: [ fontSize: 24,
// Align( fontFamily: 'Roboto',
// alignment: AlignmentDirectional.topEnd, fontWeight: FontWeight.w500),
// child: LangToggle( ),
// onSaveFeedback: _saveFeedbackText, // appBar: AppBar(
// onLoadFeedback: _loadFeedbackText, // backgroundColor: const Color(0xFFf8f9ff),
// selectedEmojiIndex: _selectedEmojiIndex ?? 0, // title: Text(AppLocalizations.of(context)!.feedback_title),
// easeOfUseRating: _easeOfUseRating, // actions: [
// qualityRating: _qualityRating, // Align(
// designRating: _designRating, // alignment: AlignmentDirectional.topEnd,
// redundancyRating: _redundancyRating, // child: LangToggle(
// ), // onSaveFeedback: _saveFeedbackText,
// ), // onLoadFeedback: _loadFeedbackText,
// ], // selectedEmojiIndex: _selectedEmojiIndex ?? 0,
// ), // easeOfUseRating: _easeOfUseRating,
body: Padding( // qualityRating: _qualityRating,
padding: const EdgeInsets.only( // designRating: _designRating,
top: 8.0, bottom: 16.0, left: 23.0, right: 23.0), // redundancyRating: _redundancyRating,
child: SingleChildScrollView( // ),
child: _isFeedbackSubmitted // ),
? _buildThankYouMessage(userName) // ],
: _isFeedbackFailed // ),
? _buildFailureMessage() body: Padding(
: _buildFeedbackForm(), padding: const EdgeInsets.only(
), top: 8.0, bottom: 16.0, left: 23.0, right: 23.0),
), child: SingleChildScrollView(
); child: _isFeedbackSubmitted
? _buildThankYouMessage(userName)
: _isFeedbackFailed
? _buildFailureMessage()
: _buildFeedbackForm(),
),
),
));
} }
Widget _buildFeedbackForm() { Widget _buildFeedbackForm() {
@ -295,20 +302,21 @@ class _FeedbackFormState extends State<FeedbackForm>
), ),
const SizedBox(height: 20), const SizedBox(height: 20),
Center( Center(
child: FittedBox( child: FittedBox(
fit: BoxFit fit: BoxFit
.scaleDown, // This will make the text smaller to fit within the available space .scaleDown, // This will make the text smaller to fit within the available space
child: Text( child: Text(
context.translate('How was your experience with us today?', context.translate('How was your experience with us today?',
'كيف كانت تجربتك معنا اليوم؟'), 'كيف كانت تجربتك معنا اليوم؟'),
style: const TextStyle( style: const TextStyle(
fontSize: 18, fontSize: 18,
fontFamily: 'Roboto', fontFamily: 'Roboto',
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
color: Color(0xff898C81), color: Color(0xff898C81),
),
), ),
), ),
),), ),
const SizedBox(height: 15), const SizedBox(height: 15),
Container( Container(
width: double.infinity, width: double.infinity,
@ -586,19 +594,22 @@ class _FeedbackFormState extends State<FeedbackForm>
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Image.asset( Image.asset(
FeedBackAssetPath.errorfb, FeedBackAssetPath.errorfb,
width: 40, width: 40,
height: 40, height: 40,
),])), ),
])),
// Icon(Icons.error, size: 80, color: Colors.red), // Icon(Icons.error, size: 80, color: Colors.red),
const SizedBox(height: 20), const SizedBox(height: 20),
const Text("Failed to Share Feedback", const Text(
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, "Failed to Share Feedback",
color: Color(0xFF414042)),), style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: Color(0xFF414042)),
),
const SizedBox(height: 10), const SizedBox(height: 10),
Text(AppLocalizations.of(context)!.feedback_failed_msg, Text(AppLocalizations.of(context)!.feedback_failed_msg,
style: const TextStyle(fontSize: 16, color: Color(0xFF898C81)), style: const TextStyle(fontSize: 16, color: Color(0xFF898C81)),
@ -642,7 +653,6 @@ class _FeedbackFormState extends State<FeedbackForm>
), ),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
icon, // Assuming `icon` is an Icon widget icon, // Assuming `icon` is an Icon widget
SizedBox(height: 3), SizedBox(height: 3),
@ -656,7 +666,7 @@ class _FeedbackFormState extends State<FeedbackForm>
fontFamily: 'Roboto', fontFamily: 'Roboto',
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
fontSize: 14, fontSize: 14,
color: Colors.black, color: Colors.black,
// color: isSelected ? Colors.green : Colors.black, // color: isSelected ? Colors.green : Colors.black,
), ),
), ),
@ -697,7 +707,6 @@ class _FeedbackFormState extends State<FeedbackForm>
Function(double) onRatingUpdate, Function(double) onRatingUpdate,
) { ) {
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text(label, Text(label,

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:pocketbase/pocketbase.dart'; import 'package:pocketbase/pocketbase.dart';
import 'package:uae_stat/presentation/components/my_bottom_nav_bar.dart'; import 'package:uae_stat/presentation/components/my_bottom_nav_bar.dart';
@ -224,135 +225,148 @@ class _ManageUserRouterState extends State<ManageUserRouter> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final Map<String, String> statusOptions = { final Map<String, String> statusOptions = {
'Approved': AppLocalizations.of(context)!.approved, 'Approved': AppLocalizations.of(context)!.approved,
'Denied': AppLocalizations.of(context)!.denied, 'Denied': AppLocalizations.of(context)!.denied,
'Pending': AppLocalizations.of(context)!.pending, 'Pending': AppLocalizations.of(context)!.pending,
}; };
double myheight = MediaQuery.of(context).size.height; double myheight = MediaQuery.of(context).size.height;
return BaseScaffold(
// title: Text("Manage User"), return PopScope(
title: Text( onPopInvokedWithResult: (didPop, result) {
AppLocalizations.of(context)!.manage_user, if (didPop) return;
), context.go('/myhomepage');
body: SingleChildScrollView( },
child: Padding( child: BaseScaffold(
padding: const EdgeInsets.only(left: 10.0, right: 10.0, top: 3.0), // title: Text("Manage User"),
child: Column( title: Text(
children: [ AppLocalizations.of(context)!.manage_user,
TextField( ),
decoration: InputDecoration( body: SingleChildScrollView(
prefixIcon: const Icon(Icons.search), child: Padding(
hintText: 'Search', padding: const EdgeInsets.only(left: 10.0, right: 10.0, top: 3.0),
border: OutlineInputBorder( child: Column(
borderRadius: BorderRadius.all(Radius.circular(20)), children: [
TextField(
decoration: InputDecoration(
prefixIcon: const Icon(Icons.search),
hintText: 'Search',
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
),
), ),
onChanged: filterUsers,
), ),
onChanged: filterUsers, SizedBox(height: myheight / 40),
), SingleChildScrollView(
SizedBox(height: myheight / 40), scrollDirection: Axis.horizontal,
SingleChildScrollView( child: ConstrainedBox(
scrollDirection: Axis.horizontal, constraints: BoxConstraints(
child: ConstrainedBox( minWidth: MediaQuery.of(context).size.width,
constraints: BoxConstraints( ),
minWidth: MediaQuery.of(context).size.width, child: DataTable(
), sortColumnIndex: _sortColumnIndex,
child: DataTable( sortAscending: _isAscending,
sortColumnIndex: _sortColumnIndex, columns: [
sortAscending: _isAscending, DataColumn(
columns: [ label: Text(
DataColumn( AppLocalizations.of(context)!.user_name,
label: Text( ),
AppLocalizations.of(context)!.user_name, onSort: (columnIndex, ascending) {
_sort((user) => user.userName.toLowerCase(),
columnIndex, ascending);
},
), ),
onSort: (columnIndex, ascending) { DataColumn(
_sort((user) => user.userName.toLowerCase(), label: Text(
columnIndex, ascending); AppLocalizations.of(context)!.email_id,
}, ),
), onSort: (columnIndex, ascending) {
DataColumn( _sort((user) => user.emailId.toLowerCase(),
label: Text( AppLocalizations.of(context)!.email_id,), columnIndex, ascending);
onSort: (columnIndex, ascending) { },
_sort((user) => user.emailId.toLowerCase(), ),
columnIndex, ascending); DataColumn(
}, label: Text(
), AppLocalizations.of(context)!.reg_date,
DataColumn( ),
label: Text(AppLocalizations.of(context)!.reg_date,), onSort: (columnIndex, ascending) {
onSort: (columnIndex, ascending) { _sort(
_sort( (user) => DateFormat('dd/MM/yyyy')
(user) => DateFormat('dd/MM/yyyy') .parse(user.registrationDate),
.parse(user.registrationDate), columnIndex,
columnIndex, ascending,
ascending, );
); },
}, ),
), DataColumn(
DataColumn( label: Text(
label: Text(AppLocalizations.of(context)!.status,), AppLocalizations.of(context)!.status,
onSort: (columnIndex, ascending) { ),
_sort((user) => user.status.toLowerCase(), onSort: (columnIndex, ascending) {
columnIndex, ascending); _sort((user) => user.status.toLowerCase(),
}, columnIndex, ascending);
), },
], ),
rows: filteredUserData.isEmpty ],
? [ rows: filteredUserData.isEmpty
DataRow( ? [
cells: List<DataCell>.generate( DataRow(
4, // Ensure it matches the number of DataColumns cells: List<DataCell>.generate(
(index) => DataCell( 4, // Ensure it matches the number of DataColumns
index == 0 (index) => DataCell(
? Text( index == 0
'No results found', ? Text(
style: TextStyle( 'No results found',
fontStyle: FontStyle.italic), style: TextStyle(
) fontStyle: FontStyle.italic),
: const Text( )
''), // Empty cells for other columns : const Text(
placeholder: true, ''), // Empty cells for other columns
), placeholder: true,
),
),
]
: filteredUserData.map((user) {
return DataRow(
cells: [
DataCell(Text(user.userName)),
DataCell(Text(user.emailId)),
DataCell(Text(user.registrationDate)),
DataCell(
DropdownButton<String>(
value: user.status,
items: statusOptions.entries.map((status) {
return DropdownMenuItem<String>(
value: status.key,
child: Text(
status.value,
style: TextStyle(
color: getStatusColor(status.key),),
),
);
}).toList(),
onChanged: (newStatus) {
print(user);
if (newStatus != null) {
_showConfirmationDialog(
user, newStatus);
}
},
), ),
), ),
], ),
); ]
}).toList(), : filteredUserData.map((user) {
return DataRow(
cells: [
DataCell(Text(user.userName)),
DataCell(Text(user.emailId)),
DataCell(Text(user.registrationDate)),
DataCell(
DropdownButton<String>(
value: user.status,
items:
statusOptions.entries.map((status) {
return DropdownMenuItem<String>(
value: status.key,
child: Text(
status.value,
style: TextStyle(
color: getStatusColor(status.key),
),
),
);
}).toList(),
onChanged: (newStatus) {
print(user);
if (newStatus != null) {
_showConfirmationDialog(
user, newStatus);
}
},
),
),
],
);
}).toList(),
),
), ),
), ),
), ],
], ),
), ),
), ),
), ),

View File

@ -12,78 +12,85 @@ class aboutFCSC extends StatelessWidget {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
return BaseScaffold( showDivider: true, return BaseScaffold(
showBackButton: true, showDivider: true,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
bottomColor: Colors.white, bottomColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('Getting Started', child: Text(
style: TextStyle( 'Getting Started',
fontFamily: 'Roboto', style: TextStyle(
fontSize: 22, fontFamily: 'Roboto',
color: Color(0xFF7DAFBC), fontSize: 22,
// fontWeight: FontWeight.normal, color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, // fontWeight: FontWeight.normal,
), fontWeight: FontWeight.w500,
), ),
) , ),
body: Container( ),
width: double.infinity, body: Container(
color: Colors.white, width: double.infinity,
padding: EdgeInsets.all(16), color: Colors.white,
child: Column( padding: EdgeInsets.all(16),
children: [ child: Column(children: [
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text('About FCSC', 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( style: TextStyle(
fontSize:20, fontWeight: FontWeight.bold,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontFamily: 'Roboto'),
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,
), ),
), TextSpan(
SizedBox(height: 5,), text:
RichText( ' 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.'),
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( Spacer(),
alignment: Alignment.bottomCenter, Align(
child: fcscBanner, alignment: Alignment.bottomCenter,
), child: fcscBanner,
SizedBox(height: 25,), ),
] SizedBox(
), height: 25,
),); ),
]),
),
);
} }
} }

View File

@ -12,122 +12,138 @@ class GetStarted extends StatelessWidget {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
return Theme( return Theme(
data: ThemeData( data: ThemeData(
fontFamily: 'Roboto', // Set default font family for this page fontFamily: 'Roboto', // Set default font family for this page
textTheme: TextTheme( textTheme: TextTheme(
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
),
), ),
), child: BaseScaffold(
child: BaseScaffold( showDivider: true, showDivider: true,
showBackButton: true, dividerColor: Colors.grey[300],
dividerColor: Colors.grey[300], appbarColor: Colors.white,
appbarColor: Colors.white, bottomColor: Colors.white,
bottomColor: Colors.white, mycenterTitle: true,
mycenterTitle: true, title: Padding(
title: Padding( padding: EdgeInsets.only(bottom: 8.0),
padding:EdgeInsets.only(bottom:8.0), child: Text(
child: Text('Getting Started', 'Getting Started',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
),
), ),
), ),
) , body: Container(
body: Container( height: double.infinity,
height: double.infinity, color: Colors.white,
color: Colors.white, padding: EdgeInsets.all(16),
padding: EdgeInsets.all(16), child: SingleChildScrollView(
child: SingleChildScrollView( child: Column(
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Align(
Align( alignment: Alignment.topLeft,
alignment: Alignment.topLeft, child: Text(
child: Text('How to Get Started', 'How to Get Started',
style: style: TextStyle(
TextStyle( fontSize: 20,
fontSize:20, color: Color(0xFF414042),
color: Color(0xFF414042), fontWeight: FontWeight.w600,
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,
), ),
), SizedBox(
Row( width: MediaQuery.of(context).size.width,
crossAxisAlignment: CrossAxisAlignment.start, height: MediaQuery.of(context).size.height * 0.36,
children: [ child: Image.asset(
Padding( 'assets/user_guide/getStarted.png',
padding: const EdgeInsets.only(top : 8.0), fit: BoxFit.contain,
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(
Row( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Padding(
Padding( padding: const EdgeInsets.only(top: 8.0),
padding: const EdgeInsets.only(top : 8.0), child: Icon(
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), Icons.brightness_1,
), // Bullet point size: 5,
SizedBox(width: 8), // Space between bullet and text color: Color(0xFF414042),
Expanded( ),
child: Text( ), // Bullet point
'2. Log in to unlock advanced features or continue as a guest.', SizedBox(width: 8), // Space between bullet and text
textAlign: TextAlign.justify, // Align the text Expanded(
softWrap: true, child: Text(
'1. Download the app from the App Store or Google Play Store.',
textAlign: TextAlign.justify, // Align the text
softWrap: true,
),
), ),
), ],
], ),
), Row(
Row( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Padding(
Padding( padding: const EdgeInsets.only(top: 8.0),
padding: const EdgeInsets.only(top : 8.0), child: Icon(
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), Icons.brightness_1,
), // Bullet point size: 5,
SizedBox(width: 8), // Space between bullet and text color: Color(0xFF414042),
Expanded( ),
child: Text( ), // Bullet point
'3. Log in to unlock advanced features or continue as a guest.', SizedBox(width: 8), // Space between bullet and text
textAlign: TextAlign.justify, // Align the text Expanded(
softWrap: true, child: Text(
'2. Log in to unlock advanced features or continue as a guest.',
textAlign: TextAlign.justify, // Align the text
softWrap: true,
),
), ),
), ],
], ),
), Row(
SizedBox( crossAxisAlignment: CrossAxisAlignment.start,
height:MediaQuery.of(context).size.height * 0.1, children: [
), Padding(
Align( padding: const EdgeInsets.only(top: 8.0),
alignment: Alignment.bottomCenter, child: Icon(
child: fcscBanner, Icons.brightness_1,
), size: 5,
SizedBox(height: 25,), 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,
),
],
),
), ),
), ),
), ),
),); );
} }
} }

View File

@ -4,11 +4,11 @@ import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_p
import '../../../custom_drawer_routes.dart'; import '../../../custom_drawer_routes.dart';
class AppFeatures extends StatelessWidget { class AppFeatures extends StatelessWidget {
AppFeatures({super.key}); AppFeatures({super.key});
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -19,24 +19,25 @@ class AppFeatures extends StatelessWidget {
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
), ),
), ),
child: BaseScaffold( showDivider: true, child: BaseScaffold(
showBackButton: true, showDivider: true,
bottomColor:Colors.white, bottomColor: Colors.white,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('Key Features', child: Text(
'Key Features',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: Container( body: Container(
width: double.infinity, width: double.infinity,
color: Colors.white, color: Colors.white,
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
@ -45,55 +46,58 @@ class AppFeatures extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text('App Features', child: Text(
style: 'App Features',
TextStyle( style: TextStyle(
fontSize:20, fontSize: 20,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, 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(
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), SizedBox(height: 8),
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 6.0), padding: const EdgeInsets.only(top: 6.0),
child: Icon(Icons.brightness_1, size: 5), child: Icon(Icons.brightness_1, size: 5),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'Access detailed datasets across categories such as Economy, Environment, Social, ', text:
'Access detailed datasets across categories such as Economy, Environment, Social, ',
style: TextStyle( style: TextStyle(
color:Color(0xFF898C81), color: Color(0xFF898C81),
fontSize: 16, fontSize: 16,
fontFamily: 'Roboto' fontFamily: 'Roboto'),
),
children: const <TextSpan>[ children: const <TextSpan>[
TextSpan(text: 'Economy, Environment, Social, ', TextSpan(
text: 'Economy, Environment, Social, ',
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Color(0xFF414042), color: Color(0xFF414042),
fontFamily: 'Roboto' fontFamily: 'Roboto'),
),), ),
TextSpan(text: 'and more.'), TextSpan(text: 'and more.'),
], ],
), ),
@ -105,8 +109,12 @@ class AppFeatures extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -118,11 +126,11 @@ class AppFeatures extends StatelessWidget {
), ),
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text(' 2. Drilldown Navigation:', Text(
style:TextStyle( ' 2. Drilldown Navigation:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -132,8 +140,12 @@ class AppFeatures extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -146,9 +158,10 @@ class AppFeatures extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('3. Interactive Visualizations:', Text(
style:TextStyle( '3. Interactive Visualizations:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -158,8 +171,12 @@ class AppFeatures extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -171,23 +188,21 @@ class AppFeatures extends StatelessWidget {
), ),
], ],
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
], ),
), ],
),
), ),
), ),
) ),
,); );
} }
} }

View File

@ -8,7 +8,7 @@ class ChangeMyPassword extends StatelessWidget {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -19,24 +19,25 @@ class ChangeMyPassword extends StatelessWidget {
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
), ),
), ),
child: BaseScaffold( showDivider: true, child: BaseScaffold(
showDivider: true,
bottomColor: Colors.white, bottomColor: Colors.white,
showBackButton: true,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('App Features', child: Text(
'App Features',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: Container( body: Container(
width: double.infinity, width: double.infinity,
color: Colors.white, color: Colors.white,
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
@ -46,37 +47,40 @@ class ChangeMyPassword extends StatelessWidget {
children: [ children: [
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text('How to Change My Password', child: Text(
style: 'How to Change My Password',
TextStyle( style: TextStyle(
fontSize:20, fontSize: 20,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
),), ),
),
), ),
SizedBox( SizedBox(
width:MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height:MediaQuery.of(context).size.height * 0.36, height: MediaQuery.of(context).size.height * 0.36,
child: Image.asset( child: Image.asset(
'assets/user_guide/changePassword.png', 'assets/user_guide/changePassword.png',
fit: BoxFit.contain, fit: BoxFit.contain,
), ),
), ),
Text( Text(
'Changing your password helps keep your account secure. Follow these steps to update your password:', 'Changing your password helps keep your account secure. Follow these steps to update your password:',
), ),
SizedBox(height: 12), SizedBox(height: 12),
Text('Steps to Change Password', Text(
style:TextStyle( 'Steps to Change Password',
fontSize:22, style: TextStyle(
fontSize: 22,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('1. Access the Change Password Page:', Text(
style:TextStyle( '1. Access the Change Password Page:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -86,23 +90,33 @@ class ChangeMyPassword extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'From the Profile page, tap on the ', text: 'From the Profile page, tap on the ',
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
fontSize: 16,
color: Color(0xFF898C81),
fontFamily: 'Roboto'),
children: const <TextSpan>[ children: const <TextSpan>[
TextSpan(text: '"Change Password"', TextSpan(
text: '"Change Password"',
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Color(0xFF414042), color: Color(0xFF414042),
fontFamily: 'Roboto' fontFamily: 'Roboto'),
),), ),
TextSpan(text:' link at the bottom.',) TextSpan(
text: ' link at the bottom.',
)
], ],
), ),
), ),
@ -110,9 +124,10 @@ class ChangeMyPassword extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('2. Enter Old Password:', Text(
style:TextStyle( '2. Enter Old Password:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -122,7 +137,7 @@ class ChangeMyPassword extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5), child: Icon(Icons.brightness_1, size: 5),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
@ -136,9 +151,10 @@ class ChangeMyPassword extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('3. Set a New Password:', Text(
style:TextStyle( '3. Set a New Password:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -148,8 +164,12 @@ class ChangeMyPassword extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -165,8 +185,12 @@ class ChangeMyPassword extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -179,9 +203,10 @@ class ChangeMyPassword extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('4. Password Requirements:', Text(
style:TextStyle( '4. Password Requirements:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -191,8 +216,12 @@ class ChangeMyPassword extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -205,9 +234,10 @@ class ChangeMyPassword extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('5. Save Your Password:', Text(
style:TextStyle( '5. Save Your Password:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -217,23 +247,33 @@ class ChangeMyPassword extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'Tap the ', text: 'Tap the ',
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
fontSize: 16,
color: Color(0xFF898C81),
fontFamily: 'Roboto'),
children: const <TextSpan>[ children: const <TextSpan>[
TextSpan(text: 'Save ', TextSpan(
text: 'Save ',
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Color(0xFF414042), color: Color(0xFF414042),
fontFamily: 'Roboto' fontFamily: 'Roboto'),
),), ),
TextSpan(text:'button',) TextSpan(
text: 'button',
)
], ],
), ),
), ),
@ -244,8 +284,12 @@ class ChangeMyPassword extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -258,9 +302,10 @@ class ChangeMyPassword extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('6. Re-Login:', Text(
style:TextStyle( '6. Re-Login:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -270,8 +315,12 @@ class ChangeMyPassword extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -283,23 +332,21 @@ class ChangeMyPassword extends StatelessWidget {
), ),
], ],
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
], ],
), ),
), ),
), ),
) ),
,); );
} }
} }

View File

@ -8,7 +8,7 @@ class EditMyProfile extends StatelessWidget {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -19,24 +19,25 @@ class EditMyProfile extends StatelessWidget {
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
), ),
), ),
child: BaseScaffold( showDivider: true, child: BaseScaffold(
showBackButton: true, showDivider: true,
bottomColor: Colors.white, bottomColor: Colors.white,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('App Features', child: Text(
'App Features',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: Container( body: Container(
width: double.infinity, width: double.infinity,
color: Colors.white, color: Colors.white,
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
@ -46,17 +47,18 @@ class EditMyProfile extends StatelessWidget {
children: [ children: [
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text('How to Edit My Profile', child: Text(
style: 'How to Edit My Profile',
TextStyle( style: TextStyle(
fontSize:20, fontSize: 20,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
),), ),
),
), ),
SizedBox( SizedBox(
width:MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height:MediaQuery.of(context).size.height * 0.36, height: MediaQuery.of(context).size.height * 0.36,
child: Image.asset( child: Image.asset(
'assets/user_guide/editProfile.png', 'assets/user_guide/editProfile.png',
fit: BoxFit.contain, fit: BoxFit.contain,
@ -66,17 +68,19 @@ class EditMyProfile extends StatelessWidget {
'Editing your profile allows you to update specific information while ensuring that critical details remain secure. Follow the steps below to update your profile:', '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), SizedBox(height: 12),
Text('Steps to Edit Profile', Text(
style:TextStyle( 'Steps to Edit Profile',
fontSize:22, style: TextStyle(
fontSize: 22,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('1. Access the Profile Page:', Text(
style:TextStyle( '1. Access the Profile Page:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -86,33 +90,44 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'Tap on the ', text: 'Tap on the ',
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
children: const <TextSpan>[ fontSize: 16,
TextSpan(text: '"Profile"', color: Color(0xFF898C81),
style: TextStyle( fontFamily: 'Roboto'),
fontWeight: FontWeight.w600, children: const <TextSpan>[
color: Color(0xFF414042), TextSpan(
fontFamily: 'Roboto' text: '"Profile"',
),), style: TextStyle(
TextSpan(text:' option from the navigation bar at the top left corner of the screen.',) 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), SizedBox(height: 8),
Text('2. Editable Fields:', Text(
style:TextStyle( '2. Editable Fields:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -122,26 +137,32 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5), child: Icon(Icons.brightness_1, size: 5),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
children: const <TextSpan>[ fontSize: 16,
TextSpan(text: 'Full Name:', color: Color(0xFF898C81),
style: TextStyle( fontFamily: 'Roboto'),
fontWeight: FontWeight.w600, children: const <TextSpan>[
color: Color(0xFF414042), TextSpan(
fontFamily: 'Roboto' text: 'Full Name:',
),), style: TextStyle(
TextSpan(text:' Tap the text box to enter your name (up to 40 alphanumeric characters).',) 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), SizedBox(height: 8),
@ -149,26 +170,32 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5), child: Icon(Icons.brightness_1, size: 5),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
children: const <TextSpan>[ fontSize: 16,
TextSpan(text: 'Date of Birth: ', color: Color(0xFF898C81),
style: TextStyle( fontFamily: 'Roboto'),
fontWeight: FontWeight.w600, children: const <TextSpan>[
color: Color(0xFF414042), TextSpan(
fontFamily: 'Roboto' text: 'Date of Birth: ',
),), style: TextStyle(
TextSpan(text:' Use the calendar dropdown to select your date of birth.',) fontWeight: FontWeight.w600,
], color: Color(0xFF414042),
fontFamily: 'Roboto'),
), ),
) TextSpan(
), text:
' Use the calendar dropdown to select your date of birth.',
)
],
),
)),
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
@ -176,26 +203,32 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5), child: Icon(Icons.brightness_1, size: 5),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
children: const <TextSpan>[ fontSize: 16,
TextSpan(text: 'Country/Region: ', color: Color(0xFF898C81),
style: TextStyle( fontFamily: 'Roboto'),
fontWeight: FontWeight.w600, children: const <TextSpan>[
color: Color(0xFF414042), TextSpan(
fontFamily: 'Roboto' text: 'Country/Region: ',
),), style: TextStyle(
TextSpan(text:' Choose your current location from the dropdown menu.',), fontWeight: FontWeight.w600,
], color: Color(0xFF414042),
fontFamily: 'Roboto'),
), ),
) TextSpan(
), text:
' Choose your current location from the dropdown menu.',
),
],
),
)),
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
@ -203,32 +236,39 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5), child: Icon(Icons.brightness_1, size: 5),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
children: const <TextSpan>[ fontSize: 16,
TextSpan(text: 'User Image: ', color: Color(0xFF898C81),
style: TextStyle( fontFamily: 'Roboto'),
fontWeight: FontWeight.w600, children: const <TextSpan>[
color: Color(0xFF414042), TextSpan(
fontFamily: 'Roboto' text: 'User Image: ',
),), style: TextStyle(
TextSpan(text:'Tap on the avatar icon to upload or change your profile picture.',), 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), SizedBox(height: 8),
Text('3. Non-Editable Fields:', Text(
style:TextStyle( '3. Non-Editable Fields:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -238,39 +278,49 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5), child: Icon(Icons.brightness_1, size: 5),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
children: const <TextSpan>[ fontSize: 16,
TextSpan(text: 'Username ', color: Color(0xFF898C81),
style: TextStyle( fontFamily: 'Roboto'),
fontWeight: FontWeight.w600, children: const <TextSpan>[
color: Color(0xFF414042), TextSpan(
fontFamily: 'Roboto' text: 'Username ',
),), style: TextStyle(
TextSpan(text:'and ',), fontWeight: FontWeight.w600,
TextSpan(text: 'Email Id: ', color: Color(0xFF414042),
style: TextStyle( fontFamily: 'Roboto'),
fontWeight: FontWeight.w600,
color: Color(0xFF414042),
fontFamily: 'Roboto'
),),
TextSpan(text:'These fields cannot be edited to ensure the integrity of your account.',),
],
), ),
) 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), SizedBox(height: 8),
Text('4. Agree to Terms and Conditions:', Text(
style:TextStyle( '4. Agree to Terms and Conditions:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -280,8 +330,12 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -294,9 +348,10 @@ class EditMyProfile extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('4. Save Your Changes:', Text(
style:TextStyle( '4. Save Your Changes:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -306,26 +361,36 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'Tap the ', text: 'Tap the ',
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
children: const <TextSpan>[ fontSize: 16,
TextSpan(text: 'Save', color: Color(0xFF898C81),
style: TextStyle( fontFamily: 'Roboto'),
fontWeight: FontWeight.w600, children: const <TextSpan>[
color: Color(0xFF414042), TextSpan(
fontFamily: 'Roboto' text: 'Save',
),), style: TextStyle(
TextSpan(text:' button at the bottom of the screen.',) fontWeight: FontWeight.w600,
], color: Color(0xFF414042),
), fontFamily: 'Roboto'),
),
TextSpan(
text: ' button at the bottom of the screen.',
)
],
), ),
),
), ),
], ],
), ),
@ -334,8 +399,12 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -352,53 +421,64 @@ class EditMyProfile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child:RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'Select ', text: 'Select ',
style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), style: TextStyle(
fontSize: 16,
color: Color(0xFF898C81),
fontFamily: 'Roboto'),
children: const <TextSpan>[ children: const <TextSpan>[
TextSpan(text: 'Confirm', TextSpan(
text: 'Confirm',
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Color(0xFF414042), color: Color(0xFF414042),
fontFamily: 'Roboto' fontFamily: 'Roboto'),
),), ),
TextSpan(text:' to save the changes',), TextSpan(
TextSpan(text: ' Cancel', text: ' to save the changes',
),
TextSpan(
text: ' Cancel',
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Color(0xFF414042), color: Color(0xFF414042),
fontFamily: 'Roboto' fontFamily: 'Roboto'),
),), ),
TextSpan(text:' to go back.',), TextSpan(
text: ' to go back.',
),
], ],
), ),
), ),
), ),
], ],
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
], ],
), ),
), ),
), ),
) ),
,); );
} }
} }

View File

@ -8,7 +8,7 @@ class HowUseTheApp extends StatelessWidget {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -19,24 +19,25 @@ class HowUseTheApp extends StatelessWidget {
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
), ),
), ),
child: BaseScaffold( showDivider: true, child: BaseScaffold(
showBackButton: true, showDivider: true,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
bottomColor: Colors.white, bottomColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('Key Features', child: Text(
'Key Features',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: Container( body: Container(
width: double.infinity, width: double.infinity,
color: Colors.white, color: Colors.white,
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
@ -46,25 +47,27 @@ class HowUseTheApp extends StatelessWidget {
children: [ children: [
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text('How to Use the App', child: Text(
style: 'How to Use the App',
TextStyle( style: TextStyle(
fontSize:20, fontSize: 20,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
),), ),
),
), ),
SizedBox( SizedBox(
width:MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height:MediaQuery.of(context).size.height * 0.36, height: MediaQuery.of(context).size.height * 0.36,
child: Image.asset( child: Image.asset(
'assets/user_guide/howUse.png', 'assets/user_guide/howUse.png',
fit: BoxFit.contain, fit: BoxFit.contain,
), ),
), ),
Text('1. Registration and Approval:', Text(
style:TextStyle( '1. Registration and Approval:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -74,8 +77,12 @@ class HowUseTheApp extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -88,9 +95,10 @@ class HowUseTheApp extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('2. Login and Navigation:', Text(
style:TextStyle( '2. Login and Navigation:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -100,8 +108,12 @@ class HowUseTheApp extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -114,9 +126,10 @@ class HowUseTheApp extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('3. Access Data:', Text(
style:TextStyle( '3. Access Data:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -126,8 +139,12 @@ class HowUseTheApp extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -140,9 +157,10 @@ class HowUseTheApp extends StatelessWidget {
], ],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Text('4. Bookmark Metrics:', Text(
style:TextStyle( '4. Bookmark Metrics:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -152,8 +170,12 @@ class HowUseTheApp extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -165,23 +187,21 @@ class HowUseTheApp extends StatelessWidget {
), ),
], ],
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
], ],
), ),
), ),
), ),
) ),
,); );
} }
} }

View File

@ -8,7 +8,7 @@ class Purpose extends StatelessWidget {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -16,27 +16,31 @@ class Purpose extends StatelessWidget {
data: ThemeData( data: ThemeData(
fontFamily: 'Roboto', // Set default font family for this page fontFamily: 'Roboto', // Set default font family for this page
textTheme: TextTheme( textTheme: TextTheme(
bodyMedium: TextStyle(fontSize: 16, color:Color(0xFF898C81),), bodyMedium: TextStyle(
fontSize: 16,
color: Color(0xFF898C81),
),
), ),
), ),
child: BaseScaffold( showDivider: true, child: BaseScaffold(
showBackButton: true, showDivider: true,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
bottomColor: Colors.white, bottomColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('Key Features', child: Text(
'Key Features',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: Container( body: Container(
height: double.infinity, height: double.infinity,
color: Colors.white, color: Colors.white,
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
@ -46,17 +50,18 @@ class Purpose extends StatelessWidget {
children: [ children: [
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text('Purpose of the App', child: Text(
style: 'Purpose of the App',
TextStyle( style: TextStyle(
fontSize:20, fontSize: 20,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
),), ),
),
), ),
SizedBox( SizedBox(
width:MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height:MediaQuery.of(context).size.height * 0.36, height: MediaQuery.of(context).size.height * 0.36,
child: Image.asset( child: Image.asset(
'assets/user_guide/purpose.png', 'assets/user_guide/purpose.png',
fit: BoxFit.contain, fit: BoxFit.contain,
@ -67,27 +72,32 @@ class Purpose extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'Provide ', text: 'Provide ',
style: TextStyle( style: TextStyle(
color:Color(0xFF898C81), color: Color(0xFF898C81),
fontSize: 16, fontSize: 16,
fontFamily: 'Roboto' fontFamily: 'Roboto'),
),
children: const <TextSpan>[ children: const <TextSpan>[
TextSpan(text: 'official statistics ', TextSpan(
text: 'official statistics ',
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Color(0xFF414042), color: Color(0xFF414042),
fontFamily: 'Roboto' fontFamily: 'Roboto'),
),), ),
TextSpan(text: 'on the UAE in an accessible format.'), TextSpan(
text: 'on the UAE in an accessible format.'),
], ],
), ),
), ),
@ -98,8 +108,12 @@ class Purpose extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -115,8 +129,12 @@ class Purpose extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -128,23 +146,21 @@ class Purpose extends StatelessWidget {
), ),
], ],
), ),
SizedBox(height: 40,), SizedBox(
height: 40,
),
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
], ],
), ),
), ),
), ),
) ),
,); );
} }
} }

View File

@ -8,7 +8,7 @@ class StayUpdate extends StatelessWidget {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -16,27 +16,31 @@ class StayUpdate extends StatelessWidget {
data: ThemeData( data: ThemeData(
fontFamily: 'Roboto', // Set default font family for this page fontFamily: 'Roboto', // Set default font family for this page
textTheme: TextTheme( textTheme: TextTheme(
bodyMedium: TextStyle(fontSize: 16, color:Color(0xFF898C81),), bodyMedium: TextStyle(
fontSize: 16,
color: Color(0xFF898C81),
),
), ),
), ),
child: BaseScaffold( showDivider: true, child: BaseScaffold(
showBackButton: true, showDivider: true,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
bottomColor: Colors.white, bottomColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('Key Features', child: Text(
'Key Features',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: Container( body: Container(
height: double.infinity, height: double.infinity,
color: Colors.white, color: Colors.white,
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
@ -46,17 +50,18 @@ class StayUpdate extends StatelessWidget {
children: [ children: [
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text('Stay Updated', child: Text(
style: 'Stay Updated',
TextStyle( style: TextStyle(
fontSize:20, fontSize: 20,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
),), ),
),
), ),
SizedBox( SizedBox(
width:MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height:MediaQuery.of(context).size.height * 0.36, height: MediaQuery.of(context).size.height * 0.36,
child: Image.asset( child: Image.asset(
'assets/user_guide/stayUpdate.png', 'assets/user_guide/stayUpdate.png',
fit: BoxFit.contain, fit: BoxFit.contain,
@ -67,8 +72,12 @@ class StayUpdate extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -80,24 +89,21 @@ class StayUpdate extends StatelessWidget {
), ),
], ],
), ),
SizedBox(
SizedBox(height: 150,), height: 150,
),
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
], ],
), ),
), ),
), ),
) ),
,); );
} }
} }

View File

@ -8,7 +8,7 @@ class WhoUseTheApp extends StatelessWidget {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -19,24 +19,25 @@ class WhoUseTheApp extends StatelessWidget {
bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)),
), ),
), ),
child: BaseScaffold( showDivider: true, child: BaseScaffold(
showBackButton: true, showDivider: true,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
bottomColor: Colors.white, bottomColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('Key Features', child: Text(
'Key Features',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: Container( body: Container(
height: double.infinity, height: double.infinity,
color: Colors.white, color: Colors.white,
padding: EdgeInsets.all(16), padding: EdgeInsets.all(16),
@ -46,25 +47,27 @@ class WhoUseTheApp extends StatelessWidget {
children: [ children: [
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text('Who Use the App', child: Text(
style: 'Who Use the App',
TextStyle( style: TextStyle(
fontSize:20, fontSize: 20,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
),), ),
),
), ),
SizedBox( SizedBox(
width:MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height:MediaQuery.of(context).size.height * 0.36, height: MediaQuery.of(context).size.height * 0.36,
child: Image.asset( child: Image.asset(
'assets/user_guide/whoUse.png', 'assets/user_guide/whoUse.png',
fit: BoxFit.contain, fit: BoxFit.contain,
), ),
), ),
Text('This app is intended for:', Text(
style:TextStyle( 'This app is intended for:',
fontSize:16, style: TextStyle(
fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -74,8 +77,12 @@ class WhoUseTheApp extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -91,8 +98,12 @@ class WhoUseTheApp extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -108,8 +119,12 @@ class WhoUseTheApp extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only(top : 8.0), padding: const EdgeInsets.only(top: 8.0),
child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), child: Icon(
Icons.brightness_1,
size: 5,
color: Color(0xFF414042),
),
), // Bullet point ), // Bullet point
SizedBox(width: 8), // Space between bullet and text SizedBox(width: 8), // Space between bullet and text
Expanded( Expanded(
@ -121,23 +136,21 @@ class WhoUseTheApp extends StatelessWidget {
), ),
], ],
), ),
SizedBox(height: 50,), SizedBox(
height: 50,
),
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 25,), SizedBox(
height: 25,
),
], ],
), ),
), ),
), ),
) ),
,); );
} }
} }

View File

@ -9,91 +9,100 @@ class aboutTheApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
return BaseScaffold( showDivider: true, return BaseScaffold(
showBackButton: true, showDivider: true,
bottomColor: Colors.white, bottomColor: Colors.white,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('Getting Started', child: Text(
style: TextStyle( 'Getting Started',
fontSize:22, style: TextStyle(
fontFamily: 'Roboto', fontSize: 22,
color: Color(0xFF7DAFBC), fontFamily: 'Roboto',
fontWeight: FontWeight.w500, color: Color(0xFF7DAFBC),
// fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500,
),
),
), ),
), body: Container(
) , width: double.infinity,
body: Container( color: Colors.white,
width: double.infinity, child: Column(
color: Colors.white, children: [
child: Column(
children: [
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line bottom: BorderSide(
color: Colors.grey.shade300,
width: 0.5), // Grey bottom line
), ),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
context.push('/user-guide/aboutApp/aboutFCSC'); context.push('/user-guide/aboutApp/aboutFCSC');
}, },
tileColor: Colors.white, tileColor: Colors.white,
title: Text('About FCSC', title: Text(
style: TextStyle( 'About FCSC',
fontSize:16, style: TextStyle(
color: Color(0xFF414042), fontSize: 16,
fontWeight: FontWeight.w500, color: Color(0xFF414042),
fontWeight: FontWeight.w500,
fontFamily: 'Roboto', fontFamily: 'Roboto',
),), ),
),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
), ),
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line 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), child: ListTile(
shape: Border( onTap: () {
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line 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(), Spacer(),
Align( Align(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 25,), SizedBox(
], height: 25,
),
],
),
), ),
);
),);
} }
} }

View File

@ -13,211 +13,342 @@ class _FAQPageState extends State<FAQPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BaseScaffold( return BaseScaffold(
showBackButton: true,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
appbarColor: Colors.white, appbarColor: Colors.white,
bottomColor: Colors.white, bottomColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text(' FAQs', child: Text(
' FAQs',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: SafeArea( body: SafeArea(
child: Container( child: Container(
height: double.infinity, height: double.infinity,
color: Colors.white, color: Colors.white,
child: Scrollbar( child: Scrollbar(
thumbVisibility: true, thumbVisibility: true,
thickness: 8, thickness: 8,
radius: Radius.circular(10), radius: Radius.circular(10),
interactive: true, interactive: true,
child:SingleChildScrollView( child: SingleChildScrollView(
child: QuestionAnswerScrollView(), child: QuestionAnswerScrollView(),
),
), ),
),
), ),
), ),
); );
} }
} }
class QuestionAnswerScrollView extends StatelessWidget { class QuestionAnswerScrollView extends StatelessWidget {
const QuestionAnswerScrollView({super.key}); const QuestionAnswerScrollView({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final List<Map<String, dynamic>> questionsAndAnswers = [ final List<Map<String, dynamic>> questionsAndAnswers = [
{'question':'What is the purpose of this app?', 'answer': 'The app provides official UAE statistics across categories like Economy, Environment, and Social. It allows users to explore datasets, view trends, and access detailed metrics to make informed decisions.'}, {
{'question':'Do I need to create an account to use the app?', 'answer':RichText( 'question': 'What is the purpose of this app?',
text: TextSpan( 'answer':
children: [ 'The app provides official UAE statistics across categories like Economy, Environment, and Social. It allows users to explore datasets, view trends, and access detailed metrics to make informed decisions.'
TextSpan( },
text: 'Yes, the app is strictly for registered and approved users. To access the data:\n\n', {
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), 'question': 'Do I need to create an account to use the app?',
TextSpan( 'answer': RichText(
text: ' 1. You need to sign up using the Register Now option on the login screen.\n', text: TextSpan(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), children: [
TextSpan( TextSpan(
text: ' 2. Your registration must be approved by the admin.\n', text:
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), 'Yes, the app is strictly for registered and approved users. To access the data:\n\n',
style: TextStyle(
TextSpan( color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
text: " 3. Once approved, you can log in to access the app's features and datasets.\n\nGuest access is not available for this application.\n ", ),
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), TextSpan(
], text:
' 1. You need to sign up using the Register Now option on the login screen.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
TextSpan(
text: ' 2. Your registration must be approved by the admin.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
TextSpan(
text:
" 3. Once approved, you can log in to access the app's features and datasets.\n\nGuest access is not available for this application.\n ",
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
],
),
), ),
),}, },
{'question':'How can I navigate through the app?','answer':'• Use the main categories on the homepage (e.g., Economy, Environment) to access subcategories and detailed KPIs.\n• Drill down into specific metrics or graphical views by tapping on a KPI.\n• Access additional features like Bookmarks or Profile through the navigation bar.\n'}, {
{'question':'What types of data are available?', 'answer':RichText( 'question': 'How can I navigate through the app?',
text: TextSpan( 'answer':
children: [ '• Use the main categories on the homepage (e.g., Economy, Environment) to access subcategories and detailed KPIs.\n• Drill down into specific metrics or graphical views by tapping on a KPI.\n• Access additional features like Bookmarks or Profile through the navigation bar.\n'
TextSpan( },
text: 'The app offers data on:\n\n', {
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), 'question': 'What types of data are available?',
TextSpan( 'answer': RichText(
text: ' • Economy', text: TextSpan(
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), children: [
TextSpan( TextSpan(
text: ' GDP, growth rates, and economic trends\n', text: 'The app offers data on:\n\n',
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
TextSpan( ),
text: ' • Environment:', TextSpan(
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), text: ' • Economy',
TextSpan( style: TextStyle(
text: ' Electricity production, water consumption, and more.\n', color: Color(0xFF414042),
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), fontWeight: FontWeight.w500,
TextSpan( fontSize: 16),
text: ' • Social:', ),
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), TextSpan(
TextSpan( text: ' GDP, growth rates, and economic trends\n',
text: ' Labor force distribution, participation rates, and demographic data.\n', style: TextStyle(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
], ),
TextSpan(
text: ' • Environment:',
style: TextStyle(
color: Color(0xFF414042),
fontWeight: FontWeight.w500,
fontSize: 16),
),
TextSpan(
text: ' Electricity production, water consumption, and more.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
TextSpan(
text: ' • Social:',
style: TextStyle(
color: Color(0xFF414042),
fontWeight: FontWeight.w500,
fontSize: 16),
),
TextSpan(
text:
' Labor force distribution, participation rates, and demographic data.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
],
),
), ),
),}, },
{'question':'How do I bookmark a metric?', 'answer': RichText( {
text: TextSpan( 'question': 'How do I bookmark a metric?',
children: [ 'answer': RichText(
TextSpan( text: TextSpan(
text: 'When viewing a metric, tap on the', children: [
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), TextSpan(
TextSpan( text: 'When viewing a metric, tap on the',
text: ' Bookmark ', style: TextStyle(
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
TextSpan( ),
text: 'icon. Your bookmarks are accessible from the', TextSpan(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), text: ' Bookmark ',
style: TextStyle(
TextSpan( color: Color(0xFF414042),
text: 'My Bookmarks', fontWeight: FontWeight.w500,
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), fontSize: 16),
TextSpan( ),
text: 'section in the navigation bar.\n', TextSpan(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), text: 'icon. Your bookmarks are accessible from the',
], style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
TextSpan(
text: 'My Bookmarks',
style: TextStyle(
color: Color(0xFF414042),
fontWeight: FontWeight.w500,
fontSize: 16),
),
TextSpan(
text: 'section in the navigation bar.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
],
),
), ),
),}, },
{'question':'Can I view the app in another language?', 'answer': RichText( {
text: TextSpan( 'question': 'Can I view the app in another language?',
children: [ 'answer': RichText(
TextSpan( text: TextSpan(
text: 'Yes, the app supports both ', children: [
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), TextSpan(
TextSpan( text: 'Yes, the app supports both ',
text: 'English ', style: TextStyle(
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
TextSpan( ),
text: 'and', TextSpan(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), text: 'English ',
style: TextStyle(
TextSpan( color: Color(0xFF414042),
text: ' Arabic ', fontWeight: FontWeight.w500,
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), fontSize: 16),
TextSpan( ),
text: '. You can toggle the language using the switch in the top-right corner of the app.\n', TextSpan(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), text: 'and',
], style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
TextSpan(
text: ' Arabic ',
style: TextStyle(
color: Color(0xFF414042),
fontWeight: FontWeight.w500,
fontSize: 16),
),
TextSpan(
text:
'. You can toggle the language using the switch in the top-right corner of the app.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
],
),
), ),
),}, },
{'question':'What happens if I forget my password?','answer':'Tap on the Forgot Password? link on the login page. Follow the steps to reset your password via your registered email address.\n'}, {
{'question':'Can I edit my profile details?','answer': 'Yes, you can edit specific fields such as Date of Birth and User Image. However, certain fields like Username and Email are non-editable for security reasons.\n'}, 'question': 'What happens if I forget my password?',
{'question':'How often is the data updated?','answer':'The app updates its datasets regularly to ensure users have access to the latest statistics. Notifications are sent whenever significant updates are made.\n'}, 'answer':
{'question':'What types of graphs and charts are available?','answer':'The app provides a variety of visualizations, including:\n • Line charts for trends.\n • Bar and column charts for comparisons.\n • Stacked charts for multi-layered data views.\n'}, 'Tap on the Forgot Password? link on the login page. Follow the steps to reset your password via your registered email address.\n'
{'question':'Can I share the data or charts?','answer':RichText( },
text: TextSpan( {
children: [ 'question': 'Can I edit my profile details?',
TextSpan( 'answer':
text: 'Yes, you can share data or charts directly from the app by tapping the ', 'Yes, you can edit specific fields such as Date of Birth and User Image. However, certain fields like Username and Email are non-editable for security reasons.\n'
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), },
TextSpan( {
text: 'Share ', 'question': 'How often is the data updated?',
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), 'answer':
TextSpan( 'The app updates its datasets regularly to ensure users have access to the latest statistics. Notifications are sent whenever significant updates are made.\n'
text: 'button available on most pages.\n', },
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), {
], 'question': 'What types of graphs and charts are available?',
'answer':
'The app provides a variety of visualizations, including:\n • Line charts for trends.\n • Bar and column charts for comparisons.\n • Stacked charts for multi-layered data views.\n'
},
{
'question': 'Can I share the data or charts?',
'answer': RichText(
text: TextSpan(
children: [
TextSpan(
text:
'Yes, you can share data or charts directly from the app by tapping the ',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
TextSpan(
text: 'Share ',
style: TextStyle(
color: Color(0xFF414042),
fontWeight: FontWeight.w500,
fontSize: 16),
),
TextSpan(
text: 'button available on most pages.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
],
),
), ),
),}, },
{'question':'What should I do if I encounter an issue?','answer':RichText( {
text: TextSpan( 'question': 'What should I do if I encounter an issue?',
children: [ 'answer': RichText(
TextSpan( text: TextSpan(
text: 'For technical support or feedback, navigate to the ', children: [
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), TextSpan(
TextSpan( text: 'For technical support or feedback, navigate to the ',
text: 'Help ', style: TextStyle(
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
TextSpan( ),
text: 'section in the app and contact the support team.\n', TextSpan(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), text: 'Help ',
], style: TextStyle(
color: Color(0xFF414042),
fontWeight: FontWeight.w500,
fontSize: 16),
),
TextSpan(
text: 'section in the app and contact the support team.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
],
),
), ),
),}, },
{'question':'How do I log out of the app?','answer':RichText( {
text: TextSpan( 'question': 'How do I log out of the app?',
children: [ 'answer': RichText(
TextSpan( text: TextSpan(
text: 'Go to the ', children: [
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), TextSpan(
TextSpan( text: 'Go to the ',
text: 'Profile ', style: TextStyle(
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
TextSpan( ),
text: 'section and tap the ', TextSpan(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), text: 'Profile ',
TextSpan( style: TextStyle(
text: 'Logout ', color: Color(0xFF414042),
style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), fontWeight: FontWeight.w500,
), fontSize: 16),
TextSpan( ),
text: 'option in the top-right corner.\n', TextSpan(
style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ) ], text: 'section and tap the ',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
),
TextSpan(
text: 'Logout ',
style: TextStyle(
color: Color(0xFF414042),
fontWeight: FontWeight.w500,
fontSize: 16),
),
TextSpan(
text: 'option in the top-right corner.\n',
style: TextStyle(
color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'),
)
],
),
), ),
),}, },
]; ];
return SingleChildScrollView( return SingleChildScrollView(
child: Column( child: Column(
children: questionsAndAnswers.map((qa) => QuestionAnswerCard(qa: qa)).toList(), children: questionsAndAnswers
.map((qa) => QuestionAnswerCard(qa: qa))
.toList(),
), ),
); );
} }
} }
class QuestionAnswerCard extends StatefulWidget { // Use dynamic to accommodate RichText class QuestionAnswerCard extends StatefulWidget {
// Use dynamic to accommodate RichText
const QuestionAnswerCard({super.key, required this.qa}); const QuestionAnswerCard({super.key, required this.qa});
final Map<String, dynamic> qa; final Map<String, dynamic> qa;
@ -234,21 +365,24 @@ class _QuestionAnswerCardState extends State<QuestionAnswerCard> {
return Card( return Card(
color: Colors.white, color: Colors.white,
shape: Border( shape: Border(
bottom: BorderSide(width: 0.5,color: Colors.grey.shade300), bottom: BorderSide(width: 0.5, color: Colors.grey.shade300),
),
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.w500, fontSize: 16), style: TextStyle(fontWeight: FontWeight.w500, fontSize: 16),
), ),
trailing: Icon(isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down), trailing: Icon(isExpanded
? Icons.keyboard_arrow_up
: Icons.keyboard_arrow_down),
onTap: () { onTap: () {
setState(() { setState(() {
isExpanded = !isExpanded; isExpanded = !isExpanded;
@ -257,13 +391,17 @@ class _QuestionAnswerCardState extends State<QuestionAnswerCard> {
), ),
if (isExpanded) if (isExpanded)
Padding( Padding(
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16,top: 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, fontSize: 16, fontFamily: 'Roboto'), style: TextStyle(
), color: Colors.grey,
fontSize: 16,
fontFamily: 'Roboto'),
),
), ),
], ],
), ),

View File

@ -3,41 +3,38 @@ 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/infrastructure/services/img_asset_paths/banner_asset_path.dart'; import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
class UsingFeatures extends StatelessWidget { class UsingFeatures extends StatelessWidget {
const UsingFeatures({super.key}); const UsingFeatures({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final fcscBanner = Image.asset( final fcscBanner = Image.asset(
BannerAssetPath.fcsc, BannerAssetPath.fcsc,
height: 56, height: 56,
alignment:Alignment.center, alignment: Alignment.center,
); );
return BaseScaffold( showDivider: true, return BaseScaffold(
showBackButton: true, showDivider: true,
dividerColor: Colors.grey[300], dividerColor: Colors.grey[300],
bottomColor: Colors.white, bottomColor: Colors.white,
appbarColor: Colors.white, appbarColor: Colors.white,
mycenterTitle: true, mycenterTitle: true,
title: Padding( title: Padding(
padding:EdgeInsets.only(bottom:8.0), padding: EdgeInsets.only(bottom: 8.0),
child: Text('Key Features', child: Text(
'Key Features',
style: TextStyle( style: TextStyle(
fontSize:22, fontSize: 22,
fontFamily: 'Roboto', fontFamily: 'Roboto',
color: Color(0xFF7DAFBC), color: Color(0xFF7DAFBC),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
// fontWeight: FontWeight.w500, // fontWeight: FontWeight.w500,
), ),
), ),
) , ),
body: Container( body: Container(
width: double.infinity, width: double.infinity,
color: Colors.white, color: Colors.white,
child: Column( child: Column(
@ -45,38 +42,45 @@ class UsingFeatures extends StatelessWidget {
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line bottom: BorderSide(
color: Colors.grey.shade300,
width: 0.5), // Grey bottom line
), ),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
context.push('/user-guide/features/appFeatures'); context.push('/user-guide/features/appFeatures');
}, },
tileColor: Colors.white, tileColor: Colors.white,
title: Text('App Features', title: Text(
'App Features',
style: TextStyle( style: TextStyle(
fontSize:16, fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontFamily: 'Roboto', fontFamily: 'Roboto',
),), ),
),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
), ),
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line bottom: BorderSide(
color: Colors.grey.shade300,
width: 0.5), // Grey bottom line
), ),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
context.push('/user-guide/features/whoUseApp'); context.push('/user-guide/features/whoUseApp');
}, },
// tileColor: Colors.white, // tileColor: Colors.white,
title: Text('Who can use The App', title: Text(
'Who can use The App',
style: TextStyle( style: TextStyle(
fontSize:16, fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontFamily: 'Roboto', fontFamily: 'Roboto',
@ -84,25 +88,28 @@ class UsingFeatures extends StatelessWidget {
), ),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
shape: Border( shape: Border(
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line bottom: BorderSide(
color: Colors.black, width: 3), // Grey bottom line
), ),
), ),
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line bottom: BorderSide(
color: Colors.grey.shade300,
width: 0.5), // Grey bottom line
), ),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
context.push('/user-guide/features/purpose'); context.push('/user-guide/features/purpose');
}, },
// tileColor: Colors.white, // tileColor: Colors.white,
title: Text('Purpose of the App ?', title: Text(
'Purpose of the App ?',
style: TextStyle( style: TextStyle(
fontSize:16, fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontFamily: 'Roboto', fontFamily: 'Roboto',
@ -110,25 +117,28 @@ class UsingFeatures extends StatelessWidget {
), ),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
shape: Border( shape: Border(
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line bottom: BorderSide(
color: Colors.black, width: 3), // Grey bottom line
), ),
), ),
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line bottom: BorderSide(
color: Colors.grey.shade300,
width: 0.5), // Grey bottom line
), ),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
context.push('/user-guide/features/howUseApp'); context.push('/user-guide/features/howUseApp');
}, },
// tileColor: Colors.white, // tileColor: Colors.white,
title: Text('How to Use the App', title: Text(
'How to Use the App',
style: TextStyle( style: TextStyle(
fontSize:16, fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontFamily: 'Roboto', fontFamily: 'Roboto',
@ -136,25 +146,28 @@ class UsingFeatures extends StatelessWidget {
), ),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
shape: Border( shape: Border(
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line bottom: BorderSide(
color: Colors.black, width: 3), // Grey bottom line
), ),
), ),
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line bottom: BorderSide(
color: Colors.grey.shade300,
width: 0.5), // Grey bottom line
), ),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
context.push('/user-guide/features/stayUpdated'); context.push('/user-guide/features/stayUpdated');
}, },
// tileColor: Colors.white, // tileColor: Colors.white,
title: Text('Stay Updated', title: Text(
'Stay Updated',
style: TextStyle( style: TextStyle(
fontSize:16, fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontFamily: 'Roboto', fontFamily: 'Roboto',
@ -162,25 +175,28 @@ class UsingFeatures extends StatelessWidget {
), ),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
shape: Border( shape: Border(
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line bottom: BorderSide(
color: Colors.black, width: 3), // Grey bottom line
), ),
), ),
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line bottom: BorderSide(
color: Colors.grey.shade300,
width: 0.5), // Grey bottom line
), ),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
context.push('/user-guide/features/changeMyPassword'); context.push('/user-guide/features/changeMyPassword');
}, },
// tileColor: Colors.white, // tileColor: Colors.white,
title: Text('How to Change My Password', title: Text(
'How to Change My Password',
style: TextStyle( style: TextStyle(
fontSize:16, fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontFamily: 'Roboto', fontFamily: 'Roboto',
@ -188,25 +204,28 @@ class UsingFeatures extends StatelessWidget {
), ),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
shape: Border( shape: Border(
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line bottom: BorderSide(
color: Colors.black, width: 3), // Grey bottom line
), ),
), ),
), ),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line bottom: BorderSide(
color: Colors.grey.shade300,
width: 0.5), // Grey bottom line
), ),
), ),
child: ListTile( child: ListTile(
onTap: (){ onTap: () {
context.push('/user-guide/features/editMyProfile'); context.push('/user-guide/features/editMyProfile');
}, },
// tileColor: Colors.white, // tileColor: Colors.white,
title: Text('How to Edit My Profile', title: Text(
'How to Edit My Profile',
style: TextStyle( style: TextStyle(
fontSize:16, fontSize: 16,
color: Color(0xFF414042), color: Color(0xFF414042),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontFamily: 'Roboto', fontFamily: 'Roboto',
@ -214,9 +233,9 @@ class UsingFeatures extends StatelessWidget {
), ),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
shape: Border( shape: Border(
bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line bottom: BorderSide(
color: Colors.black, width: 3), // Grey bottom line
), ),
), ),
), ),
Spacer(), Spacer(),
@ -224,11 +243,12 @@ class UsingFeatures extends StatelessWidget {
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
child: fcscBanner, child: fcscBanner,
), ),
SizedBox(height: 30,), SizedBox(
height: 30,
),
], ],
), ),
),
),); );
} }
} }

View File

@ -28,17 +28,17 @@ class BaseScaffold extends ConsumerStatefulWidget {
required this.body, required this.body,
required this.title, required this.title,
this.actions, this.actions,
this.showDivider =false, this.showDivider = false,
this.dividerColor , 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, this.bottomColor = null,
}); });
final Widget body; final Widget body;
final Widget title; final Widget title;
final Color? dividerColor; final Color? dividerColor;
final bool showDivider; final bool showDivider;
final bool showBackButton; final bool showBackButton;
final bool? mycenterTitle; final bool? mycenterTitle;
@ -622,19 +622,20 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
double mywidth = MediaQuery.of(context).size.width; double mywidth = MediaQuery.of(context).size.width;
return Scaffold( return Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
appBar: AppBar( appBar: AppBar(
title: widget.title, title: widget.title,
backgroundColor: Colors.white, backgroundColor: Colors.white,
leadingWidth: widget.showBackButton ? mywidth * 0.25 : null, leadingWidth: widget.showBackButton ? mywidth * 0.25 : null,
bottom: widget.showDivider bottom: widget.showDivider
? PreferredSize( ? PreferredSize(
preferredSize: Size.fromHeight(1), // Height of the line preferredSize: Size.fromHeight(1), // Height of the line
child: Container( child: Container(
color: widget.dividerColor, // Line color color: widget.dividerColor, // Line color
height: 1, // Line thickness height: 1, // Line thickness
), ),
): null, )
: null,
actions: widget.actions ?? actions: widget.actions ??
[ [
// IconButton( // IconButton(
@ -672,10 +673,8 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
builder: (BuildContext context) { builder: (BuildContext context) {
return IconButton( return IconButton(
key: drawerKey, key: drawerKey,
color: (widget.showBackButton == true) color: Colors.black,
? Colors.white icon: const Icon(Icons.menu, size: 30),
: Colors.black,
icon: const Icon(Icons.menu),
onPressed: () { onPressed: () {
Scaffold.of(context).openDrawer(); Scaffold.of(context).openDrawer();
}, },
@ -763,13 +762,13 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
ListTile( ListTile(
leading: Image.asset( leading: Image.asset(
DrawerAssetIconPath.feedback, DrawerAssetIconPath.feedback,
color: Colors.black , color: Colors.black,
width: 20, width: 20,
height: 20, height: 20,
), ),
// title: const Text('Feedback'), // title: const Text('Feedback'),
title: Text(AppLocalizations.of(context)!.feedback_title), title: Text(AppLocalizations.of(context)!.feedback_title),
onTap: () => context.go('/feedback', extra: userName), onTap: () => context.go('/feedback', extra: userName),
), ),
if (role == 'admin') if (role == 'admin')
ListTile( ListTile(
@ -854,7 +853,7 @@ onTap: () => context.go('/feedback', extra: userName),
), ),
])), ])),
bottomNavigationBar: BottomNavigationBar( bottomNavigationBar: BottomNavigationBar(
backgroundColor: widget.bottomColor ?? null, backgroundColor: Colors.white,
currentIndex: _getSelectedIndex(currentRoute), currentIndex: _getSelectedIndex(currentRoute),
onTap: (index) => _onItemTapped(context, index), onTap: (index) => _onItemTapped(context, index),
type: BottomNavigationBarType.fixed, type: BottomNavigationBarType.fixed,

View File

@ -128,6 +128,8 @@ flutter:
- assets/feedback/smilingopenface.png - assets/feedback/smilingopenface.png
- assets/feedback/errorfb.png - assets/feedback/errorfb.png
- assets/feedback/thumbfb.png - assets/feedback/thumbfb.png
- assets/user_guide/
- assets/app_tour/
fonts: fonts:
- family: Segoe - family: Segoe