added notification some design and added item to navbar

This commit is contained in:
llsajjad
2025-09-13 08:03:54 +03:30
parent 91a2f11393
commit ffa964f7e5
17 changed files with 561 additions and 38 deletions
+5
View File
@@ -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

+13
View File
@@ -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

+4
View File
@@ -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

+4
View File
@@ -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

+4
View File
@@ -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

+4
View File
@@ -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,
), ),
), ),
+2 -1
View File
@@ -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,
+1 -1
View File
@@ -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,
+31 -1
View File
@@ -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
View File
@@ -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: