Merge pull request 'added notification some design and added item to navbar' (#119) from notification_design into main
Reviewed-on: https://repo.ravanertebat.com/TM/tm_app/pulls/119
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 profile = 'assets/icons/profile-circle.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
|
||||
static const logo = 'assets/pngs/logo.png';
|
||||
@@ -45,6 +48,7 @@ class AssetsManager {
|
||||
static const edit = 'assets/icons/edit.svg';
|
||||
static const arrowRight = 'assets/icons/arrow-right.svg';
|
||||
static const notification = 'assets/icons/notification.svg';
|
||||
static const danger = 'assets/icons/danger.svg';
|
||||
static const calendar = 'assets/icons/calendar.svg';
|
||||
static const menu = 'assets/icons/menu.svg';
|
||||
static const thumbLike = 'assets/icons/thumb_like.svg';
|
||||
@@ -62,6 +66,6 @@ class AssetsManager {
|
||||
|
||||
//Liked tenders
|
||||
static const trash = 'assets/icons/trash.svg';
|
||||
static const arrowdownSmall = 'assets/icons/arrow_down_small.svg';
|
||||
static const arrowDownSmall = 'assets/icons/arrow_down_small.svg';
|
||||
|
||||
}
|
||||
|
||||
@@ -48,6 +48,22 @@ class MobileShellPage extends StatelessWidget {
|
||||
iconPath: AssetsManager.tenders,
|
||||
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(
|
||||
context: context,
|
||||
text: ProfileStrings.profileTitle,
|
||||
@@ -76,7 +92,10 @@ class MobileShellPage extends StatelessWidget {
|
||||
width: 64.0.w(),
|
||||
height: 72.0.h(),
|
||||
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(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
@@ -84,10 +103,11 @@ class MobileShellPage extends StatelessWidget {
|
||||
|
||||
Text(
|
||||
text,
|
||||
maxLines: 1,
|
||||
style: TextStyle(
|
||||
fontSize: 12.0.sp(),
|
||||
fontSize:
|
||||
iconPath == AssetsManager.notify ? 11.0.sp() : 12.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
|
||||
color: isActive ? AppColors.primaryColor : AppColors.grey60,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -128,7 +128,8 @@ class TabletHomePage extends StatelessWidget {
|
||||
width: double.infinity,
|
||||
height: 148,
|
||||
onTap: () {
|
||||
YourTendersRouteData().push(context);
|
||||
//YourTendersRouteData().push(context);
|
||||
NotificationRouteData().push(context);
|
||||
},
|
||||
),
|
||||
),
|
||||
|
||||
@@ -165,6 +165,7 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: AppColors.backgroundColor,
|
||||
title: const Text(
|
||||
LikedTendersStrings.selectPage,
|
||||
),
|
||||
@@ -217,7 +218,8 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
|
||||
),
|
||||
SizedBox(width: 5.0.w()),
|
||||
SvgPicture.asset(
|
||||
AssetsManager.arrowdownSmall,
|
||||
AssetsManager.arrowDownSmall,
|
||||
color: AppColors.grey80,
|
||||
),
|
||||
SizedBox(width: 5.0.w()),
|
||||
],
|
||||
|
||||
@@ -175,6 +175,7 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: AppColors.backgroundColor,
|
||||
title: const Text(
|
||||
LikedTendersStrings.selectPage,
|
||||
),
|
||||
@@ -227,7 +228,8 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
|
||||
),
|
||||
SizedBox(width: 5.0.w()),
|
||||
SvgPicture.asset(
|
||||
AssetsManager.arrowdownSmall,
|
||||
AssetsManager.arrowDownSmall,
|
||||
color: AppColors.grey80,
|
||||
),
|
||||
SizedBox(width: 5.0.w()),
|
||||
],
|
||||
|
||||
@@ -1,10 +1,209 @@
|
||||
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});
|
||||
|
||||
@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
|
||||
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(
|
||||
backgroundColor: AppColors.backgroundColor,
|
||||
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,
|
||||
color: AppColors.grey80,
|
||||
),
|
||||
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,200 @@
|
||||
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});
|
||||
|
||||
@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
|
||||
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(
|
||||
backgroundColor: AppColors.backgroundColor,
|
||||
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,
|
||||
color: AppColors.grey80,
|
||||
),
|
||||
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()),
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.0.w(), vertical: 16.0.h()),
|
||||
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),
|
||||
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(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
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()),
|
||||
Text(
|
||||
notification.title,
|
||||
|
||||
@@ -67,7 +67,7 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
|
||||
return Column(
|
||||
children: [
|
||||
DesktopNavigationWidget(
|
||||
currentIndex: 2, // Tenders index
|
||||
currentIndex: 4, // Tenders index
|
||||
),
|
||||
SizedBox(
|
||||
width: 740,
|
||||
|
||||
@@ -70,7 +70,7 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
|
||||
backgroundColor: AppColors.backgroundColor,
|
||||
appBar: tabletAppBar(title: ProfileStrings.profileTitle, key: key),
|
||||
|
||||
drawer: TabletNavigationWidget(currentIndex: 2),
|
||||
drawer: TabletNavigationWidget(currentIndex: 4),
|
||||
body: Padding(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 24.0.w(),
|
||||
|
||||
@@ -11,4 +11,6 @@ class ProfileStrings {
|
||||
static const String businessType = 'Business Type';
|
||||
static const String founded = 'Founded';
|
||||
static const String logout = 'Logout';
|
||||
static const String contracts = 'Contracts';
|
||||
static const String notifications = 'Notifications';
|
||||
}
|
||||
|
||||
@@ -66,11 +66,46 @@ class DesktopNavigationWidget extends StatelessWidget {
|
||||
SizedBox(width: 24),
|
||||
_navigationItem(
|
||||
context: context,
|
||||
text: ProfileStrings.profileTitle,
|
||||
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(
|
||||
context: context,
|
||||
text: ProfileStrings.profileTitle,
|
||||
isActive: currentIndex == 4,
|
||||
onTap: () {
|
||||
if (currentIndex == 4) {
|
||||
return;
|
||||
} else {
|
||||
Router.neglect(context, () => ProfileRouteData().go(context));
|
||||
}
|
||||
@@ -96,7 +131,7 @@ class DesktopNavigationWidget extends StatelessWidget {
|
||||
return InkWell(
|
||||
onTap: onTap,
|
||||
child: SizedBox(
|
||||
width: 100.0,
|
||||
width: 115.0,
|
||||
height: 64,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
|
||||
@@ -59,11 +59,41 @@ class TabletNavigationWidget extends StatelessWidget {
|
||||
),
|
||||
_navigationItem(
|
||||
context: context,
|
||||
text: ProfileStrings.profileTitle,
|
||||
text: ProfileStrings.contracts,
|
||||
isActive: currentIndex == 2,
|
||||
onTap: () {
|
||||
if (currentIndex == 2) {
|
||||
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 {
|
||||
context.pop();
|
||||
Router.neglect(context, () => ProfileRouteData().go(context));
|
||||
|
||||
@@ -8,4 +8,6 @@ class TendersStrings {
|
||||
static const String dislike = 'Dislike';
|
||||
static const String like = 'Like';
|
||||
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"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -456,22 +448,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -608,6 +584,30 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
Reference in New Issue
Block a user