added notification some design and added item to navbar
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M10 7.5V11.6667" stroke="#E5821E" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M9.99998 17.8414H4.94998C2.05832 17.8414 0.849985 15.7747 2.24998 13.2497L4.84998 8.56641L7.29998 4.16641C8.78332 1.49141 11.2167 1.49141 12.7 4.16641L15.15 8.57474L17.75 13.2581C19.15 15.7831 17.9333 17.8497 15.05 17.8497H9.99998V17.8414Z" stroke="#E5821E" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M9.99536 14.167H10.0028" stroke="#E5821E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 666 B |
@@ -0,0 +1,13 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_2374_308)">
|
||||||
|
<path d="M21 7V17C21 20 19.5 22 16 22H8C4.5 22 3 20 3 17V7C3 4 4.5 2 8 2H16C19.5 2 21 4 21 7Z" stroke="#777777" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M15.5 2V9.85999C15.5 10.3 14.98 10.52 14.66 10.23L12.34 8.09003C12.15 7.91003 11.85 7.91003 11.66 8.09003L9.34003 10.23C9.02003 10.52 8.5 10.3 8.5 9.85999V2H15.5Z" stroke="#777777" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M13.25 14H17.5" stroke="#777777" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M9 18H17.5" stroke="#777777" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_2374_308">
|
||||||
|
<rect width="24" height="24" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 993 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M12 5C9.5 5 7.5 7 7.5 9.5V12C7.5 12.5 7.3 13.3 7.1 13.7L6.3 15C5.7 16 6.1 17.3 7.2 17.7C10.4 18.7 13.6 18.7 16.8 17.7C17.8 17.4 18.2 16.2 17.7 15.3L16.9 13.7C16.7 13.3 16.5 12.5 16.5 12V9.5C16.5 7 14.5 5 12 5Z" stroke="#777777" stroke-width="1.5" stroke-linecap="round"/>
|
||||||
|
<path d="M13 18.5C13 19.3 12.3 20 11.5 20C10.7 20 10 19.3 10 18.5" stroke="#777777" stroke-width="1.5" stroke-linecap="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 516 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M12 5C9.5 5 7.5 7 7.5 9.5V12C7.5 12.5 7.3 13.3 7.1 13.7L6.3 15C5.7 16 6.1 17.3 7.2 17.7C10.4 18.7 13.6 18.7 16.8 17.7C17.8 17.4 18.2 16.2 17.7 15.3L16.9 13.7C16.7 13.3 16.5 12.5 16.5 12V9.5C16.5 7 14.5 5 12 5Z" fill="#0164FF"/>
|
||||||
|
<path d="M13 18.5C13 19.3 12.3 20 11.5 20C10.7 20 10 19.3 10 18.5" fill="#0164FF"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 428 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M9.99996 18.3337C14.5833 18.3337 18.3333 14.5837 18.3333 10.0003C18.3333 5.41699 14.5833 1.66699 9.99996 1.66699C5.41663 1.66699 1.66663 5.41699 1.66663 10.0003C1.66663 14.5837 5.41663 18.3337 9.99996 18.3337Z" stroke="#289744" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M6.45837 9.99993L8.81671 12.3583L13.5417 7.6416" stroke="#289744" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 551 B |
@@ -12,6 +12,9 @@ class AssetsManager {
|
|||||||
static const tendersActive = 'assets/icons/task-square_active.svg';
|
static const tendersActive = 'assets/icons/task-square_active.svg';
|
||||||
static const profile = 'assets/icons/profile-circle.svg';
|
static const profile = 'assets/icons/profile-circle.svg';
|
||||||
static const profileActive = 'assets/icons/profile-circle_active.svg';
|
static const profileActive = 'assets/icons/profile-circle_active.svg';
|
||||||
|
static const contracts = 'assets/icons/icon_contracts.svg';
|
||||||
|
static const notify = 'assets/icons/notify_icon.svg';
|
||||||
|
static const notifyActive = 'assets/icons/notify_icon_active.svg';
|
||||||
|
|
||||||
// login page
|
// login page
|
||||||
static const logo = 'assets/pngs/logo.png';
|
static const logo = 'assets/pngs/logo.png';
|
||||||
@@ -45,6 +48,7 @@ class AssetsManager {
|
|||||||
static const edit = 'assets/icons/edit.svg';
|
static const edit = 'assets/icons/edit.svg';
|
||||||
static const arrowRight = 'assets/icons/arrow-right.svg';
|
static const arrowRight = 'assets/icons/arrow-right.svg';
|
||||||
static const notification = 'assets/icons/notification.svg';
|
static const notification = 'assets/icons/notification.svg';
|
||||||
|
static const danger = 'assets/icons/danger.svg';
|
||||||
static const calendar = 'assets/icons/calendar.svg';
|
static const calendar = 'assets/icons/calendar.svg';
|
||||||
static const menu = 'assets/icons/menu.svg';
|
static const menu = 'assets/icons/menu.svg';
|
||||||
static const thumbLike = 'assets/icons/thumb_like.svg';
|
static const thumbLike = 'assets/icons/thumb_like.svg';
|
||||||
|
|||||||
@@ -48,6 +48,22 @@ class MobileShellPage extends StatelessWidget {
|
|||||||
iconPath: AssetsManager.tenders,
|
iconPath: AssetsManager.tenders,
|
||||||
activeIconPath: AssetsManager.tendersActive,
|
activeIconPath: AssetsManager.tendersActive,
|
||||||
),
|
),
|
||||||
|
_bottomNavigationItem(
|
||||||
|
context: context,
|
||||||
|
text: TendersStrings.contracts,
|
||||||
|
isActive: navigationShell.currentIndex == 4,
|
||||||
|
onTap: () => onTap(4),
|
||||||
|
iconPath: AssetsManager.contracts,
|
||||||
|
activeIconPath: AssetsManager.contracts,
|
||||||
|
),
|
||||||
|
_bottomNavigationItem(
|
||||||
|
context: context,
|
||||||
|
text: TendersStrings.notifications,
|
||||||
|
isActive: navigationShell.currentIndex == 3,
|
||||||
|
onTap: () => onTap(3),
|
||||||
|
iconPath: AssetsManager.notify,
|
||||||
|
activeIconPath: AssetsManager.notifyActive,
|
||||||
|
),
|
||||||
_bottomNavigationItem(
|
_bottomNavigationItem(
|
||||||
context: context,
|
context: context,
|
||||||
text: ProfileStrings.profileTitle,
|
text: ProfileStrings.profileTitle,
|
||||||
@@ -76,7 +92,10 @@ class MobileShellPage extends StatelessWidget {
|
|||||||
width: 64.0.w(),
|
width: 64.0.w(),
|
||||||
height: 72.0.h(),
|
height: 72.0.h(),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.only(top: 12.0.h(), bottom: 14.0.h()),
|
padding:
|
||||||
|
iconPath != AssetsManager.notify
|
||||||
|
? EdgeInsets.only(top: 12.0.h(), bottom: 14.0.h())
|
||||||
|
: EdgeInsets.only(top: 6.0.h(), bottom: 12.0.h()),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
@@ -84,10 +103,11 @@ class MobileShellPage extends StatelessWidget {
|
|||||||
|
|
||||||
Text(
|
Text(
|
||||||
text,
|
text,
|
||||||
|
maxLines: 1,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12.0.sp(),
|
fontSize:
|
||||||
|
iconPath == AssetsManager.notify ? 11.0.sp() : 12.0.sp(),
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
|
|
||||||
color: isActive ? AppColors.primaryColor : AppColors.grey60,
|
color: isActive ? AppColors.primaryColor : AppColors.grey60,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -128,7 +128,8 @@ class TabletHomePage extends StatelessWidget {
|
|||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: 148,
|
height: 148,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
YourTendersRouteData().push(context);
|
//YourTendersRouteData().push(context);
|
||||||
|
NotificationRouteData().push(context);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,10 +1,205 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:tm_app/core/constants/assets.dart';
|
||||||
|
import 'package:tm_app/core/theme/colors.dart';
|
||||||
|
import 'package:tm_app/core/utils/size_config.dart';
|
||||||
|
import 'package:tm_app/views/notification/strings/notification_strings.dart';
|
||||||
|
import 'package:tm_app/views/shared/desktop_navigation_widget.dart';
|
||||||
|
|
||||||
class DesktopNotificationPage extends StatelessWidget {
|
import '../../shared/main_tab_bar.dart';
|
||||||
|
import '../widgets/notification_all_tab.dart';
|
||||||
|
import '../widgets/notification_important_tab.dart';
|
||||||
|
import '../widgets/notification_unread_tab.dart';
|
||||||
|
|
||||||
|
class DesktopNotificationPage extends StatefulWidget {
|
||||||
const DesktopNotificationPage({super.key});
|
const DesktopNotificationPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<DesktopNotificationPage> createState() =>
|
||||||
|
_DesktopNotificationPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DesktopNotificationPageState extends State<DesktopNotificationPage>
|
||||||
|
with SingleTickerProviderStateMixin {
|
||||||
|
late TabController controller;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
controller = TabController(length: 3, vsync: this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
controller.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return const Scaffold();
|
return Scaffold(
|
||||||
|
backgroundColor: AppColors.backgroundColor,
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
DesktopNavigationWidget(currentIndex: 3),
|
||||||
|
|
||||||
|
SizedBox(height: 60.0.h()),
|
||||||
|
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: SizedBox(
|
||||||
|
width: 740,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
MainTabBar(
|
||||||
|
controller: controller,
|
||||||
|
titles: [
|
||||||
|
NotificationStrings.all,
|
||||||
|
NotificationStrings.unread,
|
||||||
|
NotificationStrings.important,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
|
||||||
|
SizedBox(height: 12.0.h()),
|
||||||
|
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsetsDirectional.only(end: 24.0.w()),
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.centerRight,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {},
|
||||||
|
borderRadius: BorderRadius.circular(99),
|
||||||
|
child: Container(
|
||||||
|
width: 132.0.w(),
|
||||||
|
height: 32.0.h(),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppColors.primary20,
|
||||||
|
borderRadius: BorderRadius.circular(99),
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
NotificationStrings.markAllAsReadButton,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14.0.sp(),
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: AppColors.mainBlue,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 12.0.h()),
|
||||||
|
Expanded(
|
||||||
|
child: TabBarView(
|
||||||
|
controller: controller,
|
||||||
|
children: const [
|
||||||
|
NotificationAllTab(),
|
||||||
|
NotificationUnreadTab(),
|
||||||
|
NotificationImportantTab(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10.0.h()),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
const Spacer(),
|
||||||
|
Text(
|
||||||
|
'page',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 13.0.sp(),
|
||||||
|
fontWeight: FontWeight.w300,
|
||||||
|
color: AppColors.grey60,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 10.0.w()),
|
||||||
|
InkWell(
|
||||||
|
onTap: () async {
|
||||||
|
final _ = await showDialog<int>(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('selectPage'),
|
||||||
|
content: SizedBox(
|
||||||
|
width: 200,
|
||||||
|
height: 300,
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: 1,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final pageNumber = index + 1;
|
||||||
|
return ListTile(
|
||||||
|
title: Text(
|
||||||
|
'{LikedTendersStrings.page} $pageNumber',
|
||||||
|
),
|
||||||
|
onTap:
|
||||||
|
() => Navigator.pop(
|
||||||
|
context,
|
||||||
|
pageNumber,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColors.grey30,
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
borderRadius: BorderRadius.circular(4),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
Text(
|
||||||
|
'currentPage',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14.0.sp(),
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: AppColors.grey70,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
SvgPicture.asset(AssetsManager.arrowdownSmall),
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
Text(
|
||||||
|
'of',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14.0.sp(),
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: AppColors.grey60,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
Text(
|
||||||
|
'totalPages',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 13.0.sp(),
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: AppColors.grey60,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
|
||||||
|
SizedBox(height: 30.0.h()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,196 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:tm_app/core/constants/assets.dart';
|
||||||
|
import 'package:tm_app/core/theme/colors.dart';
|
||||||
|
import 'package:tm_app/core/utils/size_config.dart';
|
||||||
|
import 'package:tm_app/views/notification/strings/notification_strings.dart';
|
||||||
|
import 'package:tm_app/views/shared/tablet_navigation_widget.dart';
|
||||||
|
import 'package:tm_app/views/shared/tender_app_bar.dart';
|
||||||
|
|
||||||
class TabletNotificationPage extends StatelessWidget {
|
import '../../shared/main_tab_bar.dart';
|
||||||
|
import '../widgets/notification_all_tab.dart';
|
||||||
|
import '../widgets/notification_important_tab.dart';
|
||||||
|
import '../widgets/notification_unread_tab.dart';
|
||||||
|
|
||||||
|
class TabletNotificationPage extends StatefulWidget {
|
||||||
const TabletNotificationPage({super.key});
|
const TabletNotificationPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<TabletNotificationPage> createState() => _TabletNotificationPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TabletNotificationPageState extends State<TabletNotificationPage>
|
||||||
|
with SingleTickerProviderStateMixin {
|
||||||
|
late TabController controller;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
controller = TabController(length: 3, vsync: this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
controller.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return const Scaffold();
|
final GlobalKey<ScaffoldState> key = GlobalKey();
|
||||||
|
return Scaffold(
|
||||||
|
key: key,
|
||||||
|
backgroundColor: AppColors.backgroundColor,
|
||||||
|
appBar: tabletAppBar(
|
||||||
|
title: NotificationStrings.notificationTitle,
|
||||||
|
key: key,
|
||||||
|
),
|
||||||
|
drawer: TabletNavigationWidget(currentIndex: 3),
|
||||||
|
body: Center(
|
||||||
|
child: SizedBox(
|
||||||
|
width: 720,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
MainTabBar(
|
||||||
|
controller: controller,
|
||||||
|
titles: [
|
||||||
|
NotificationStrings.all,
|
||||||
|
NotificationStrings.unread,
|
||||||
|
NotificationStrings.important,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 12.0.h()),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsetsDirectional.only(end: 24.0.w()),
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.centerRight,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {},
|
||||||
|
borderRadius: BorderRadius.circular(99),
|
||||||
|
child: Container(
|
||||||
|
width: 132.0.w(),
|
||||||
|
height: 32.0.h(),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppColors.primary20,
|
||||||
|
borderRadius: BorderRadius.circular(99),
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
NotificationStrings.markAllAsReadButton,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14.0.sp(),
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: AppColors.mainBlue,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 12.0.h()),
|
||||||
|
Expanded(
|
||||||
|
child: TabBarView(
|
||||||
|
controller: controller,
|
||||||
|
children: [
|
||||||
|
NotificationAllTab(),
|
||||||
|
NotificationUnreadTab(),
|
||||||
|
NotificationImportantTab(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10.0.h()),
|
||||||
|
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
const Spacer(),
|
||||||
|
Text(
|
||||||
|
'page',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 13.0.sp(),
|
||||||
|
fontWeight: FontWeight.w300,
|
||||||
|
color: AppColors.grey60,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 10.0.w()),
|
||||||
|
InkWell(
|
||||||
|
onTap: () async {
|
||||||
|
final _ = await showDialog<int>(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('selectPage'),
|
||||||
|
content: SizedBox(
|
||||||
|
width: 200,
|
||||||
|
height: 300,
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: 1,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final pageNumber = index + 1;
|
||||||
|
return ListTile(
|
||||||
|
title: Text(
|
||||||
|
'{LikedTendersStrings.page} $pageNumber',
|
||||||
|
),
|
||||||
|
onTap:
|
||||||
|
() =>
|
||||||
|
Navigator.pop(context, pageNumber),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(color: AppColors.grey30, width: 1),
|
||||||
|
borderRadius: BorderRadius.circular(4),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
Text(
|
||||||
|
'currentPage',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14.0.sp(),
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: AppColors.grey70,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
SvgPicture.asset(AssetsManager.arrowdownSmall),
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
Text(
|
||||||
|
'of',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14.0.sp(),
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: AppColors.grey60,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 5.0.w()),
|
||||||
|
Text(
|
||||||
|
'totalPages',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 13.0.sp(),
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: AppColors.grey60,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
|
||||||
|
SizedBox(height: 30.0.h()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,16 +18,34 @@ class NotificationCard extends StatelessWidget {
|
|||||||
margin: EdgeInsets.symmetric(horizontal: 24.0.w()),
|
margin: EdgeInsets.symmetric(horizontal: 24.0.w()),
|
||||||
padding: EdgeInsets.symmetric(horizontal: 16.0.w(), vertical: 16.0.h()),
|
padding: EdgeInsets.symmetric(horizontal: 16.0.w(), vertical: 16.0.h()),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: AppColors.mainBlue.withValues(alpha: 0.03),
|
color:
|
||||||
|
notification.title == 'Tender Submitted'
|
||||||
|
? AppColors.orange10
|
||||||
|
: notification.title == 'New Tender Invitation'
|
||||||
|
? AppColors.mainBlue.withValues(alpha: 0.03)
|
||||||
|
: AppColors.green0,
|
||||||
borderRadius: BorderRadius.circular(4),
|
borderRadius: BorderRadius.circular(4),
|
||||||
border: Border.all(color: AppColors.mainBlue.withValues(alpha: 0.15)),
|
border: Border.all(
|
||||||
|
color:
|
||||||
|
notification.title == 'Tender Submitted'
|
||||||
|
? AppColors.warningColor
|
||||||
|
: notification.title == 'New Tender Invitation'
|
||||||
|
? AppColors.mainBlue.withValues(alpha: 0.15)
|
||||||
|
: AppColors.green20,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
SvgPicture.asset(AssetsManager.notification),
|
SvgPicture.asset(
|
||||||
|
notification.title == 'Tender Submitted'
|
||||||
|
? AssetsManager.danger
|
||||||
|
: notification.title == 'New Tender Invitation'
|
||||||
|
? AssetsManager.notification
|
||||||
|
: AssetsManager.tickCircle,
|
||||||
|
),
|
||||||
SizedBox(width: 8.0.w()),
|
SizedBox(width: 8.0.w()),
|
||||||
Text(
|
Text(
|
||||||
notification.title,
|
notification.title,
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
|
|||||||
backgroundColor: AppColors.backgroundColor,
|
backgroundColor: AppColors.backgroundColor,
|
||||||
appBar: tabletAppBar(title: ProfileStrings.profileTitle, key: key),
|
appBar: tabletAppBar(title: ProfileStrings.profileTitle, key: key),
|
||||||
|
|
||||||
drawer: TabletNavigationWidget(currentIndex: 2),
|
drawer: TabletNavigationWidget(currentIndex: 4),
|
||||||
body: Padding(
|
body: Padding(
|
||||||
padding: EdgeInsets.symmetric(
|
padding: EdgeInsets.symmetric(
|
||||||
horizontal: 24.0.w(),
|
horizontal: 24.0.w(),
|
||||||
|
|||||||
@@ -11,4 +11,6 @@ class ProfileStrings {
|
|||||||
static const String businessType = 'Business Type';
|
static const String businessType = 'Business Type';
|
||||||
static const String founded = 'Founded';
|
static const String founded = 'Founded';
|
||||||
static const String logout = 'Logout';
|
static const String logout = 'Logout';
|
||||||
|
static const String contracts = 'Contracts';
|
||||||
|
static const String notifications = 'Notifications';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,41 @@ class DesktopNavigationWidget extends StatelessWidget {
|
|||||||
activeIconPath: AssetsManager.tendersActive,
|
activeIconPath: AssetsManager.tendersActive,
|
||||||
),
|
),
|
||||||
SizedBox(width: 24),
|
SizedBox(width: 24),
|
||||||
|
_navigationItem(
|
||||||
|
context: context,
|
||||||
|
text: TendersStrings.contracts,
|
||||||
|
isActive: currentIndex == 2,
|
||||||
|
onTap: () {
|
||||||
|
if (currentIndex == 2) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
// Router.neglect(context, () => TendersRouteData().go(context));
|
||||||
|
// context.read<TendersViewModel>().getTenders();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
iconPath: AssetsManager.contracts,
|
||||||
|
activeIconPath: AssetsManager.contracts,
|
||||||
|
),
|
||||||
|
SizedBox(width: 24),
|
||||||
|
_navigationItem(
|
||||||
|
context: context,
|
||||||
|
text: TendersStrings.notifications,
|
||||||
|
isActive: currentIndex == 3,
|
||||||
|
onTap: () {
|
||||||
|
if (currentIndex == 3) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
Router.neglect(
|
||||||
|
context,
|
||||||
|
() => NotificationRouteData().go(context),
|
||||||
|
);
|
||||||
|
//context.read<notificationViewModel>().getTenders();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
iconPath: AssetsManager.notify,
|
||||||
|
activeIconPath: AssetsManager.notifyActive,
|
||||||
|
),
|
||||||
|
SizedBox(width: 24),
|
||||||
_navigationItem(
|
_navigationItem(
|
||||||
context: context,
|
context: context,
|
||||||
text: ProfileStrings.profileTitle,
|
text: ProfileStrings.profileTitle,
|
||||||
@@ -96,7 +131,7 @@ class DesktopNavigationWidget extends StatelessWidget {
|
|||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: 100.0,
|
width: 115.0,
|
||||||
height: 64,
|
height: 64,
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
|||||||
@@ -59,11 +59,41 @@ class TabletNavigationWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
_navigationItem(
|
_navigationItem(
|
||||||
context: context,
|
context: context,
|
||||||
text: ProfileStrings.profileTitle,
|
text: ProfileStrings.contracts,
|
||||||
isActive: currentIndex == 2,
|
isActive: currentIndex == 2,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (currentIndex == 2) {
|
if (currentIndex == 2) {
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
// context.pop();
|
||||||
|
// Router.neglect(context, () => ProfileRouteData().go(context));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
iconPath: AssetsManager.contracts,
|
||||||
|
activeIconPath: AssetsManager.contracts,
|
||||||
|
),
|
||||||
|
_navigationItem(
|
||||||
|
context: context,
|
||||||
|
text: ProfileStrings.notifications,
|
||||||
|
isActive: currentIndex == 3,
|
||||||
|
onTap: () {
|
||||||
|
if (currentIndex == 3) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
context.pop();
|
||||||
|
Router.neglect(context, () => NotificationRouteData().go(context));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
iconPath: AssetsManager.notify,
|
||||||
|
activeIconPath: AssetsManager.notifyActive,
|
||||||
|
),
|
||||||
|
_navigationItem(
|
||||||
|
context: context,
|
||||||
|
text: ProfileStrings.profileTitle,
|
||||||
|
isActive: currentIndex == 4,
|
||||||
|
onTap: () {
|
||||||
|
if (currentIndex == 4) {
|
||||||
|
return;
|
||||||
} else {
|
} else {
|
||||||
context.pop();
|
context.pop();
|
||||||
Router.neglect(context, () => ProfileRouteData().go(context));
|
Router.neglect(context, () => ProfileRouteData().go(context));
|
||||||
|
|||||||
@@ -8,4 +8,6 @@ class TendersStrings {
|
|||||||
static const String dislike = 'Dislike';
|
static const String dislike = 'Dislike';
|
||||||
static const String like = 'Like';
|
static const String like = 'Like';
|
||||||
static const String tenderDeadlineLabel = 'Deadline';
|
static const String tenderDeadlineLabel = 'Deadline';
|
||||||
|
static const String contracts = 'Contracts';
|
||||||
|
static const String notifications = 'Notifications';
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-24
@@ -177,14 +177,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
country_flags:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: country_flags
|
|
||||||
sha256: "78a7bf8aabd7ae1a90087f0c517471ac9ebfe07addc652692f58da0f0f833196"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.3.0"
|
|
||||||
crypto:
|
crypto:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -456,22 +448,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.5"
|
version: "1.0.5"
|
||||||
jovial_misc:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: jovial_misc
|
|
||||||
sha256: "4301011027d87b8b919cb862db84071a34448eadbb32cc8d40fe505424dfe69a"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.9.2"
|
|
||||||
jovial_svg:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: jovial_svg
|
|
||||||
sha256: "6791b1435547bdc0793081a166d41a8a313ebc61e4e5136fb7a3218781fb9e50"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.1.27"
|
|
||||||
js:
|
js:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -608,6 +584,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
|
path_provider:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: path_provider
|
||||||
|
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.5"
|
||||||
|
path_provider_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_android
|
||||||
|
sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.18"
|
||||||
|
path_provider_foundation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_foundation
|
||||||
|
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.2"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
Reference in New Issue
Block a user