refactor : base page

This commit is contained in:
2025-09-25 17:25:55 +03:30
parent fd9de4f80c
commit 5ac8342bb3
30 changed files with 471 additions and 455 deletions

View File

@@ -1,3 +1,4 @@
description: This file stores settings for Dart & Flutter DevTools. description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions: extensions:
- hive_ce: true

View File

@@ -2,11 +2,6 @@ import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
class CustomNavigationObserver extends NavigatorObserver { class CustomNavigationObserver extends NavigatorObserver {
bool _isWorkDone = false;
void setInjectionDone() {
_isWorkDone = true;
}
@override @override
void didPush(Route route, Route? previousRoute) async { void didPush(Route route, Route? previousRoute) async {

View File

@@ -0,0 +1,4 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:
- hive_ce: true

View File

@@ -1,5 +1,6 @@
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_chicken/presentation/widget/captcha/view.dart'; import 'package:rasadyar_chicken/presentation/widget/captcha/view.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
@@ -10,102 +11,110 @@ class AuthPage extends GetView<AuthLogic> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return ChickenBasePage(
body: PopScope( isFullScreen: true,
canPop: false, backGroundWidget: BackGroundWidget(
onPopInvokedWithResult: (didPop, result) { gradient: LinearGradient(
Get.back(result: -1); begin: Alignment.topRight,
}, end: Alignment.bottomLeft,
child: Stack( colors: [
alignment: Alignment.center, const Color(0xFFB2C9FF).withValues(alpha: 1.0), // 0%
fit: StackFit.expand, const Color(0xFF40BB93).withValues(alpha: 0.11), // 50%
const Color(0xFF93B6D3).withValues(alpha: 1.0), // 100%
children: [ ],
Assets.vec.bgAuthSvg.svg(fit: BoxFit.fill), stops: const [0.0, 0.5, 1.0],
),
Center( vecPath: Assets.vec.chickenPatternSvg.path,
child: Padding( ),
padding: EdgeInsets.symmetric(horizontal: 10.r), onPopScopTaped: () => Get.back(result: -1),
child: FadeTransition( child: Stack(
opacity: controller.textAnimation, children: [
child: Column( Center(
mainAxisSize: MainAxisSize.min, child: Padding(
mainAxisAlignment: MainAxisAlignment.start, padding: EdgeInsets.symmetric(horizontal: 10.r),
crossAxisAlignment: CrossAxisAlignment.center, child: FadeTransition(
spacing: 12, opacity: controller.textAnimation,
children: [ child: Column(
Text( mainAxisSize: MainAxisSize.min,
'به سامانه رصدطیور خوش آمدید!', mainAxisAlignment: MainAxisAlignment.start,
textAlign: TextAlign.right, crossAxisAlignment: CrossAxisAlignment.center,
style: AppFonts.yekan25Bold.copyWith(color: Colors.white), spacing: 12,
), children: [
Text( Text(
'سامانه رصد و پایش زنجیره تامین، تولید و توزیع کالا های اساسی', 'به سامانه رصدطیور خوش آمدید!',
textAlign: TextAlign.center, textAlign: TextAlign.right,
style: AppFonts.yekan16.copyWith(color: Colors.white), style: AppFonts.yekan25Bold.copyWith(color: AppColor.darkGreyDarkActive),
), ),
], Text(
), 'سامانه رصد و پایش زنجیره تامین، تولید و توزیع کالا های اساسی',
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(color: AppColor.darkGreyDarkActive),
),
],
), ),
), ),
), ),
),
Obx(() { Obx(() {
final screenHeight = MediaQuery.of(context).size.height; final screenHeight = MediaQuery.of(context).size.height;
final targetTop = (screenHeight - 676) / 2; final targetTop = (screenHeight - 676) / 2;
return AnimatedPositioned( return AnimatedPositioned(
duration: const Duration(milliseconds: 1200), duration: const Duration(milliseconds: 1200),
curve: Curves.linear, curve: Curves.linear,
top: controller.showCard.value ? targetTop : screenHeight, top: controller.showCard.value ? targetTop : screenHeight,
left: 10.r, left: 10.r,
right: 10.r, right: 10.r,
child: Container( child: Container(
width: 381.w, width: 381.w,
height: 676.h, height: 676.h,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(40), borderRadius: BorderRadius.circular(40),
),
child: Column(
children: [
SizedBox(height: 50.h),
LogoWidget(
title: 'سامانه رصدطیور',
),
SizedBox(height: 20.h),
useAndPassFrom(),
SizedBox(height: 24.h),
RichText(
text: TextSpan(
children: [
TextSpan(
text: 'مطالعه بیانیه ',
style: AppFonts.yekan16.copyWith(color: AppColor.darkGreyDark),
),
TextSpan(
recognizer: TapGestureRecognizer()
..onTap = () {
Get.bottomSheet(
privacyPolicyWidget(),
isScrollControlled: true,
enableDrag: true,
ignoreSafeArea: false,
);
},
text: 'حریم خصوصی',
style: AppFonts.yekan16.copyWith(color: AppColor.blueNormal),
),
],
),
),
],
),
), ),
); child: Column(
}), children: [
], SizedBox(height: 50.h),
), LogoWidget(
vecPath: Assets.vec.rasadToyorSvg.path,
width: 85.w,
height: 85.h,
titleStyle: AppFonts.yekan20Bold.copyWith(color: Color(0xFF4665AF)),
title: 'رصدطیور',
),
SizedBox(height: 20.h),
useAndPassFrom(),
SizedBox(height: 24.h),
RichText(
text: TextSpan(
children: [
TextSpan(
text: 'مطالعه بیانیه ',
style: AppFonts.yekan16.copyWith(color: AppColor.darkGreyDark),
),
TextSpan(
recognizer: TapGestureRecognizer()
..onTap = () {
Get.bottomSheet(
privacyPolicyWidget(),
isScrollControlled: true,
enableDrag: true,
ignoreSafeArea: false,
);
},
text: 'حریم خصوصی',
style: AppFonts.yekan16.copyWith(color: AppColor.blueNormal),
),
],
),
),
],
),
),
);
}),
],
), ),
); );
} }
@@ -341,5 +350,4 @@ class AuthPage extends GetView<AuthLogic> {
), ),
); );
} }
} }

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/data/common/fa_user_role.dart'; import 'package:rasadyar_chicken/data/common/fa_user_role.dart';
import 'package:rasadyar_chicken/presentation/widget/app_bar.dart'; import 'package:rasadyar_chicken/presentation/widget/app_bar.dart';
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
import 'logic.dart'; import 'logic.dart';
@@ -10,14 +11,9 @@ class RolePage extends GetView<RoleLogic> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return ChickenBasePage(
appBar: chickenAppBar( isBase: true,
hasBack: false, child: Column(
hasFilter: false,
hasSearch: false,
isBase: false,
),
body: Column(
children: [ children: [
Assets.images.selectRole.image( Assets.images.selectRole.image(
height: 212.h, height: 212.h,
@@ -78,6 +74,7 @@ Widget roleCard({
height: height?.h ?? 48.h, height: height?.h ?? 48.h,
margin: EdgeInsets.all(8.w), margin: EdgeInsets.all(8.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.r), borderRadius: BorderRadius.circular(8.r),
border: Border.all(color: AppColor.blueNormal, width: 1.w), border: Border.all(color: AppColor.blueNormal, width: 1.w),
), ),

View File

@@ -15,6 +15,7 @@ class FarmPage extends GetView<FarmLogic> {
hasFilter: false, hasFilter: false,
hasSearch: false, hasSearch: false,
isBase: true, isBase: true,
routes: [], routes: [],
backId: poultryFirstKey, backId: poultryFirstKey,
widgets: [firstTagInformation(), farmListWidget()], widgets: [firstTagInformation(), farmListWidget()],

View File

@@ -2,7 +2,7 @@ import 'package:flutter/cupertino.dart' hide LinearGradient;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/routes/routes.dart'; import 'package:rasadyar_chicken/presentation/routes/routes.dart';
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart'; import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
import 'package:rasadyar_chicken/presentation/widget/app_bar.dart'; import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
import 'package:rasadyar_core/presentation/widget/custom/information_card_widget.dart'; import 'package:rasadyar_core/presentation/widget/custom/information_card_widget.dart';
@@ -13,72 +13,71 @@ class PoultryScienceHomePage extends GetView<PoultryScienceHomeLogic> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return ChickenBasePage(
backgroundColor: AppColor.bgLight, isBase: true,
appBar: chickenAppBar( hasNotification: true,
hasBack: false, hasNews: true,
hasFilter: false, scrollable: true,
hasSearch: false,
), widgets: [
body: SingleChildScrollView( SizedBox(height: 8.h),
physics: BouncingScrollPhysics(), InkWell(
child: Column( onTap: () {
children: [ controller.isExpanded.value = !controller.isExpanded.value;
SizedBox(height: 22.h), },
InkWell( child: Stack(
onTap: () { clipBehavior: Clip.none,
controller.isExpanded.value = !controller.isExpanded.value; children: [
}, Container(
child: Stack( margin: EdgeInsetsGeometry.all(6),
clipBehavior: Clip.none, decoration: BoxDecoration(
children: [ color: Colors.white,
Container( borderRadius: BorderRadius.circular(8),
margin: EdgeInsetsGeometry.all(6), border: Border.all(width: 0.50, color: const Color(0xFFA9A9A9)),
decoration: BoxDecoration( ),
borderRadius: BorderRadius.circular(8),
border: Border.all(width: 0.50, color: const Color(0xFFA9A9A9)),
),
child: ObxValue((data) { child: ObxValue((data) {
return AnimatedSize( return AnimatedSize(
duration: Duration(milliseconds: 300), duration: Duration(milliseconds: 300),
child: data.value ? mainItemWidget() : mainItemWidgetExpanded(), child: data.value ? mainItemWidget() : mainItemWidgetExpanded(),
); );
}, controller.isExpanded), }, controller.isExpanded),
),
Positioned(
top: -4,
right: 20,
child: Container(
color: Colors.white,
padding: EdgeInsets.symmetric(horizontal: 8),
child: Row(
spacing: 8,
children: [
Assets.vec.chicken2Svg.svg(
width: 16.w,
height: 16.h,
colorFilter: ColorFilter.mode(AppColor.iconColor, BlendMode.srcIn),
),
Text(
'اطلاعات فارم‌ها',
textAlign: TextAlign.right,
style: AppFonts.yekan16.copyWith(color: AppColor.iconColor),
),
],
),
),
),
],
), ),
), Positioned(
SizedBox(height: 10), top: -10,
widelyWidget(), right: 20,
SizedBox(height: 20), child: Container(
], height: 32.h,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
border: Border.all(width: 0.50, color: const Color(0xFFA9A9A9)),
),
padding: EdgeInsets.symmetric(horizontal: 8),
child: Row(
spacing: 8,
children: [
Assets.vec.chicken2Svg.svg(
width: 16.w,
height: 16.h,
colorFilter: ColorFilter.mode(AppColor.blueDark, BlendMode.srcIn),
),
Text(
'اطلاعات فارم‌ها',
textAlign: TextAlign.right,
style: AppFonts.yekan16Bold.copyWith(color: AppColor.iconColor),
),
],
),
),
),
],
),
), ),
), SizedBox(height: 10),
widelyWidget(),
SizedBox(height: 20),
],
); );
} }
@@ -87,39 +86,7 @@ class PoultryScienceHomePage extends GetView<PoultryScienceHomeLogic> {
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [SizedBox(height: 8), firstTagInformation(), secondTagInformation()],
SizedBox(height: 8),
/* Row(
spacing: 8,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 40,
height: 40,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(width: 0.25, color: const Color(0xFFB0B0B0)),
borderRadius: BorderRadius.circular(4),
),
),
child: Assets.images.liveChicken.image(
width: 40.w,
height: 40.h,
fit: BoxFit.cover,
),
),
Text(
'فارم ها',
textAlign: TextAlign.right,
style: AppFonts.yekan16.copyWith(color: AppColor.darkGreyDarkActive),
),
Spacer(),
Icon(CupertinoIcons.chevron_down, size: 18),
],
),*/
firstTagInformation(),
secondTagInformation(),
],
), ),
); );
} }
@@ -246,8 +213,9 @@ class PoultryScienceHomePage extends GetView<PoultryScienceHomeLogic> {
return Container( return Container(
margin: EdgeInsetsGeometry.all(6), margin: EdgeInsetsGeometry.all(6),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
border: Border.all(width: 1, color: AppColor.borderColor), border: Border.all(width: 0.50, color: const Color(0xFFA9A9A9)),
), ),
child: Stack( child: Stack(
clipBehavior: Clip.none, clipBehavior: Clip.none,
@@ -312,10 +280,15 @@ class PoultryScienceHomePage extends GetView<PoultryScienceHomeLogic> {
), ),
), ),
Positioned( Positioned(
top: -12, top: -17,
right: 11, right: 11,
child: Container( child: Container(
color: Colors.white, padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
border: Border.all(width: 0.50, color: const Color(0xFFA9A9A9)),
),
child: Text('پر کاربردها', textAlign: TextAlign.right, style: AppFonts.yekan16), child: Text('پر کاربردها', textAlign: TextAlign.right, style: AppFonts.yekan16),
), ),
), ),

View File

@@ -5,7 +5,6 @@ import 'package:rasadyar_chicken/data/models/response/hatching/hatching_models.d
import 'package:rasadyar_chicken/data/models/response/hatching_report/hatching_report.dart'; import 'package:rasadyar_chicken/data/models/response/hatching_report/hatching_report.dart';
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart'; import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart'; import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_chicken/presentation/widget/page_route.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
import 'logic.dart'; import 'logic.dart';
@@ -23,24 +22,14 @@ class InspectionPoultrySciencePage extends GetView<InspectionPoultryScienceLogic
onSearchChanged: (data) => controller.setSearchValue(data), onSearchChanged: (data) => controller.setSearchValue(data),
backId: poultryFirstKey, backId: poultryFirstKey,
routes: controller.routesName, routes: controller.routesName,
//routesWidget: ObxValue((route) => buildContainerPageRoute(route), controller.routesName),
child: Stack(
children: [
Positioned.fill(
child: Assets.vec.chickenPatternSvg.svg(
fit: BoxFit.cover,
colorFilter: ColorFilter.mode(Color(0xFFC3CBDA), BlendMode.srcIn),
),
),
SizedBox(height: 50, child: segmentWidget()),
Expanded( //routesWidget: ObxValue((route) => buildContainerPageRoute(route), controller.routesName),
child: ObxValue((data) { widgets: [
return data.value == 0 ? hatchingWidget() : reportWidget(); SizedBox(height: 50, child: segmentWidget()),
}, controller.selectedSegmentIndex), ObxValue((data) {
), return data.value == 0 ? hatchingWidget() : reportWidget();
], }, controller.selectedSegmentIndex),
), ],
); );
} }

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart'; import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
import 'package:rasadyar_chicken/presentation/widget/app_bar.dart'; import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
import 'logic.dart'; import 'logic.dart';
@@ -10,16 +10,7 @@ class PoultryActionPage extends GetView<PoultryActionLogic> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return ChickenBasePage(isBase: true, hasNews: true, hasNotification: true, child: gridWidget());
appBar: chickenAppBar(hasBack: false, hasFilter: false, hasSearch: false, isBase: false),
body: Stack(
fit: StackFit.expand,
children: [
Positioned.fill(child: Assets.vec.chickenPatternSvg.svg(fit: BoxFit.cover,)),
Positioned.fill(child: gridWidget()),
],
)
);
} }
Widget gridWidget() { Widget gridWidget() {

View File

@@ -3,6 +3,7 @@ import 'package:flutter/services.dart';
import 'package:rasadyar_chicken/presentation/routes/pages.dart'; import 'package:rasadyar_chicken/presentation/routes/pages.dart';
import 'package:rasadyar_chicken/presentation/routes/routes.dart'; import 'package:rasadyar_chicken/presentation/routes/routes.dart';
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart'; import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
import 'logic.dart'; import 'logic.dart';
@@ -14,118 +15,92 @@ class PoultryScienceRootPage extends GetView<PoultryScienceRootLogic> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ObxValue((data) { return ChickenBasePage(
return PopScope( isFullScreen: true,
canPop: false, child: ObxValue((data) {
onPopInvokedWithResult: (didPop, result) async { return Stack(
final nestedKey = Get.nestedKey(controller.getNestedKey()); children: [
final currentNavigator = nestedKey?.currentState; IndexedStack(
children: [
Navigator(
key: Get.nestedKey(poultryFirstKey),
onGenerateRoute: (settings) {
final page = ChickenPages.pages.firstWhere(
(e) => e.name == settings.name,
orElse: () => ChickenPages.pages.firstWhere(
(e) => e.name == ChickenRoutes.actionPoultryScience,
),
);
if (currentNavigator?.canPop() ?? false) { return buildRouteFromGetPage(page);
currentNavigator?.pop(); },
} else { ),
final now = DateTime.now(); Navigator(
if (_lastBackPressed == null || key: Get.nestedKey(poultrySecondKey),
now.difference(_lastBackPressed!) > Duration(seconds: 2)) { onGenerateRoute: (settings) => GetPageRoute(page: () => controller.pages[1]),
_lastBackPressed = now; ),
Get.snackbar( Navigator(
'خروج از برنامه', key: Get.nestedKey(poultryThirdKey),
'برای خروج دوباره بازگشت را بزنید', onGenerateRoute: (settings) => GetPageRoute(page: () => controller.pages[2]),
snackPosition: SnackPosition.TOP, ),
duration: Duration(seconds: 2), ],
backgroundColor: AppColor.warning, index: data.value,
); ),
} else { Positioned(
await SystemNavigator.pop(); right: 0,
} left: 0,
} bottom: 0,
}, child: RBottomNavigation(
child: Scaffold( mainAxisAlignment: MainAxisAlignment.spaceAround,
backgroundColor: AppColor.bgLight, items: [
body: Stack( RBottomNavigationItem(
children: [ label: 'عملیات',
IndexedStack( icon: Assets.vec.settingSvg.path,
children: [ isSelected: controller.currentPage.value == 0,
Navigator( onTap: () {
key: Get.nestedKey(poultryFirstKey), Get.nestedKey(
onGenerateRoute: (settings) { poultrySecondKey,
final page = ChickenPages.pages.firstWhere( )?.currentState?.popUntil((route) => route.isFirst);
(e) => e.name == settings.name, Get.nestedKey(
orElse: () => ChickenPages.pages.firstWhere( poultryFirstKey,
(e) => e.name == ChickenRoutes.actionPoultryScience, )?.currentState?.popUntil((route) => route.isFirst);
), controller.changePage(0);
);
return buildRouteFromGetPage(page);
}, },
), ),
Navigator( RBottomNavigationItem(
key: Get.nestedKey(poultrySecondKey), label: 'خانه',
onGenerateRoute: (settings) => GetPageRoute(page: () => controller.pages[1]), icon: Assets.vec.homeSvg.path,
isSelected: controller.currentPage.value == 1,
onTap: () {
Get.nestedKey(
poultryFirstKey,
)?.currentState?.popUntil((route) => route.isFirst);
Get.nestedKey(
poultryThirdKey,
)?.currentState?.popUntil((route) => route.isFirst);
controller.changePage(1);
},
), ),
Navigator( RBottomNavigationItem(
key: Get.nestedKey(poultryThirdKey), label: 'پروفایل',
onGenerateRoute: (settings) => GetPageRoute(page: () => controller.pages[2]), icon: Assets.vec.profileCircleSvg.path,
isSelected: controller.currentPage.value == 2,
onTap: () {
Get.nestedKey(
poultryFirstKey,
)?.currentState?.popUntil((route) => route.isFirst);
Get.nestedKey(
poultrySecondKey,
)?.currentState?.popUntil((route) => route.isFirst);
controller.changePage(2);
},
), ),
], ],
index: data.value,
), ),
Positioned( ),
right: 0, ],
left: 0, );
bottom: 0, }, controller.currentPage),
child: RBottomNavigation( );
mainAxisAlignment: MainAxisAlignment.spaceAround,
items: [
RBottomNavigationItem(
label: 'عملیات',
icon: Assets.vec.settingSvg.path,
isSelected: controller.currentPage.value == 0,
onTap: () {
Get.nestedKey(
poultrySecondKey,
)?.currentState?.popUntil((route) => route.isFirst);
Get.nestedKey(
poultryFirstKey,
)?.currentState?.popUntil((route) => route.isFirst);
controller.changePage(0);
},
),
RBottomNavigationItem(
label: 'خانه',
icon: Assets.vec.homeSvg.path,
isSelected: controller.currentPage.value == 1,
onTap: () {
Get.nestedKey(
poultryFirstKey,
)?.currentState?.popUntil((route) => route.isFirst);
Get.nestedKey(
poultryThirdKey,
)?.currentState?.popUntil((route) => route.isFirst);
controller.changePage(1);
},
),
RBottomNavigationItem(
label: 'پروفایل',
icon: Assets.vec.profileCircleSvg.path,
isSelected: controller.currentPage.value == 2,
onTap: () {
Get.nestedKey(
poultryFirstKey,
)?.currentState?.popUntil((route) => route.isFirst);
Get.nestedKey(
poultrySecondKey,
)?.currentState?.popUntil((route) => route.isFirst);
controller.changePage(2);
},
),
],
),
),
],
),
),
);
}, controller.currentPage);
} }
} }

View File

@@ -1,14 +1,12 @@
import 'package:rasadyar_chicken/presentation/pages/common/profile/logic.dart'; import 'package:rasadyar_chicken/presentation/pages/common/profile/logic.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
class GlobalBinding extends Bindings { class GlobalBinding extends Bindings {
@override @override
void dependencies() { void dependencies() {
Get.put(BaseLogic(), permanent: true); Get.lazyPut(() => BaseLogic(), fenix: true);
Get.lazyPut(() => ProfileLogic(), fenix: true); Get.lazyPut(() => ProfileLogic(), fenix: true);
//root logics //root logics
} }
} }

View File

@@ -33,6 +33,7 @@ sealed class ChickenPages {
binding: BindingsBuilder(() { binding: BindingsBuilder(() {
Get.lazyPut(() => AuthLogic()); Get.lazyPut(() => AuthLogic());
Get.lazyPut(() => CaptchaWidgetLogic()); Get.lazyPut(() => CaptchaWidgetLogic());
Get.lazyPut(() => BaseLogic(), fenix: true);
}), }),
), ),
@@ -41,10 +42,10 @@ sealed class ChickenPages {
page: () => RolePage(), page: () => RolePage(),
binding: BindingsBuilder(() { binding: BindingsBuilder(() {
Get.lazyPut(() => RoleLogic()); Get.lazyPut(() => RoleLogic());
Get.lazyPut(() => BaseLogic(), fenix: true);
}), }),
), ),
//region Steward Pages //region Steward Pages
GetPage( GetPage(
name: ChickenRoutes.initSteward, name: ChickenRoutes.initSteward,
@@ -53,6 +54,7 @@ sealed class ChickenPages {
bindings: [ bindings: [
GlobalBinding(), GlobalBinding(),
BindingsBuilder(() { BindingsBuilder(() {
Get.lazyPut(() => BaseLogic(), fenix: true);
Get.lazyPut(() => StewardRootLogic()); Get.lazyPut(() => StewardRootLogic());
Get.lazyPut(() => HomeLogic()); Get.lazyPut(() => HomeLogic());
Get.lazyPut(() => BuyLogic()); Get.lazyPut(() => BuyLogic());
@@ -67,6 +69,7 @@ sealed class ChickenPages {
page: () => HomePage(), page: () => HomePage(),
middlewares: [AuthMiddleware()], middlewares: [AuthMiddleware()],
binding: BindingsBuilder(() { binding: BindingsBuilder(() {
Get.put(HomeLogic()); Get.put(HomeLogic());
Get.lazyPut(() => BaseLogic()); Get.lazyPut(() => BaseLogic());
}), }),
@@ -160,7 +163,6 @@ sealed class ChickenPages {
Get.lazyPut(() => PoultryActionLogic()); Get.lazyPut(() => PoultryActionLogic());
}), }),
], ],
), ),
GetPage( GetPage(
@@ -169,7 +171,6 @@ sealed class ChickenPages {
middlewares: [AuthMiddleware()], middlewares: [AuthMiddleware()],
binding: BindingsBuilder(() { binding: BindingsBuilder(() {
Get.lazyPut(() => InspectionPoultryScienceLogic()); Get.lazyPut(() => InspectionPoultryScienceLogic());
}), }),
), ),
GetPage( GetPage(
@@ -207,7 +208,7 @@ sealed class ChickenPages {
binding: BindingsBuilder(() { binding: BindingsBuilder(() {
Get.lazyPut(() => GenocideLogic()); Get.lazyPut(() => GenocideLogic());
Get.lazyPut(() => PoultryScienceRootLogic()); Get.lazyPut(() => PoultryScienceRootLogic());
Get.lazyPut(() => KillingRegistrationLogic(),fenix: true); Get.lazyPut(() => KillingRegistrationLogic(), fenix: true);
}), }),
), ),
GetPage( GetPage(

View File

@@ -30,7 +30,8 @@ RAppBar chickenAppBar({
onNewsTap: onNewsTap, onNewsTap: onNewsTap,
backgroundColor: AppColor.blueNormal, backgroundColor: AppColor.blueNormal,
children: [ children: [
Text('رصدطیور', style: AppFonts.yekan16Bold), const SizedBox(width: 6),
Text('رصدطیور', style: AppFonts.yekan16Bold.copyWith(color: Colors.white)),
const SizedBox(width: 6), const SizedBox(width: 6),
Assets.vec.chickenSvg.svg(height: 24, width: 24), Assets.vec.chickenSvg.svg(height: 24, width: 24),
], ],

View File

@@ -3,7 +3,7 @@ import 'package:rasadyar_chicken/presentation/widget/app_bar.dart';
import 'package:rasadyar_chicken/presentation/widget/base_page/back_ground.dart'; import 'package:rasadyar_chicken/presentation/widget/base_page/back_ground.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
class ChickenBasePage extends GetView<BaseLogic> { class ChickenBasePage extends StatefulWidget {
const ChickenBasePage({ const ChickenBasePage({
super.key, super.key,
this.hasBack = true, this.hasBack = true,
@@ -28,21 +28,22 @@ class ChickenBasePage extends GetView<BaseLogic> {
this.floatingActionButton, this.floatingActionButton,
this.filteringWidget, this.filteringWidget,
this.backGroundWidget, this.backGroundWidget,
}) : assert( this.isFullScreen = false,
(routes != null) || routesWidget != null, this.onPopScopTaped,
'Either routes or routesWidget must be provided.', });
);
//AppBar properties` //AppBar properties`
final bool hasBack; final bool hasBack;
final bool hasFilter; final bool hasFilter;
final bool hasSearch; final bool hasSearch;
final bool isBase; final bool isBase;
final bool isFullScreen;
final bool hasNotification; final bool hasNotification;
final bool hasNews; final bool hasNews;
final int? backId; final int? backId;
final VoidCallback? onBackTap; final VoidCallback? onBackTap;
final VoidCallback? onPopScopTaped;
final VoidCallback? onFilterTap; final VoidCallback? onFilterTap;
final VoidCallback? onSearchTap; final VoidCallback? onSearchTap;
final VoidCallback? onNewsTap; final VoidCallback? onNewsTap;
@@ -61,13 +62,44 @@ class ChickenBasePage extends GetView<BaseLogic> {
final BackGroundWidget? backGroundWidget; final BackGroundWidget? backGroundWidget;
@override
State<ChickenBasePage> createState() => _ChickenBasePageState();
}
class _ChickenBasePageState extends State<ChickenBasePage> {
int? _lastBackId;
@override
void initState() {
super.initState();
_lastBackId = widget.backId;
tLog(_lastBackId);
tLog(widget.backId);
}
@override
void didChangeDependencies() {
fLog('didChangeDependencies');
fLog(_lastBackId);
fLog(widget.backId);
super.didChangeDependencies();
}
@override
void didUpdateWidget(covariant ChickenBasePage oldWidget) {
dLog('didUpdateWidget');
dLog(_lastBackId);
dLog(widget.backId);
super.didUpdateWidget(oldWidget);
}
void _onFilterTap() { void _onFilterTap() {
if (hasFilter && filteringWidget != null) { if (widget.hasFilter && widget.filteringWidget != null) {
final currentRoute = ModalRoute.of(Get.context!); final currentRoute = ModalRoute.of(Get.context!);
if (currentRoute?.isCurrent != true) return; if (currentRoute?.isCurrent != true) return;
Get.bottomSheet( Get.bottomSheet(
filteringWidget!, widget.filteringWidget!,
isScrollControlled: true, isScrollControlled: true,
isDismissible: true, isDismissible: true,
enableDrag: true, enableDrag: true,
@@ -77,28 +109,60 @@ class ChickenBasePage extends GetView<BaseLogic> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BasePage( return PopScope(
routes: routes, canPop: false,
routesWidget: routesWidget, onPopInvokedWithResult: (didPop, result) {
widgets: widgets, iLog('PopScope onPopInvokedWithResult:==> ${widget.backId}');
child: child, iLog('PopScope onPopInvokedWithResult:==> $_lastBackId}');
scrollable: scrollable, iLog('PopScope onPopInvokedWithResult:==> ${widget.onPopScopTaped}');
floatingActionButtonLocation: floatingActionButtonLocation, iLog('PopScope onPopInvokedWithResult:==> ${widget.onBackTap}');
floatingActionButton: floatingActionButton, // چک کردن و مدیریت برگشت با backId
backGroundWidget: backGroundWidget ?? chickenBackground(), if (widget.backId != null) {
appBar: chickenAppBar( final navigatorState = Get.nestedKey(widget.backId!)?.currentState;
isBase: isBase, if (navigatorState != null && navigatorState.canPop()) {
hasBack: isBase ? false : hasBack, Get.back(id: widget.backId!); // پاپ با استفاده از backId
onBackTap: onBackTap, } else {
onNewsTap: onNewsTap, // اگر هیچ صفحه‌ای برای پاپ موجود نیست
hasFilter: hasFilter, if (widget.onPopScopTaped != null) {
hasSearch: hasSearch, widget.onPopScopTaped!();
hasNews: hasNews, } else {
hasNotification: hasNotification, Get.back();
backId: backId, }
onNotificationTap: onNotificationTap, }
onFilterTap: hasFilter ? _onFilterTap : null, } else {
onSearchTap: hasSearch ? controller.toggleSearch : null, // اگر backId نداشته باشد
if (widget.onPopScopTaped != null) {
widget.onPopScopTaped!();
} else {
Get.back();
}
}
},
child: BasePage(
routes: widget.routes,
routesWidget: widget.routesWidget,
widgets: widget.widgets,
child: widget.child,
scrollable: widget.scrollable,
floatingActionButtonLocation: widget.floatingActionButtonLocation,
floatingActionButton: widget.floatingActionButton,
backGroundWidget: widget.backGroundWidget ?? chickenBackground(),
appBar: widget.isFullScreen
? null
: chickenAppBar(
isBase: widget.isBase,
hasBack: widget.isBase ? false : widget.hasBack,
onNewsTap: widget.onNewsTap,
hasFilter: widget.hasFilter,
hasSearch: widget.hasSearch,
hasNews: widget.hasNews,
backId: widget.backId,
onBackTap: widget.onBackTap,
hasNotification: widget.hasNotification,
onNotificationTap: widget.onNotificationTap,
onFilterTap: widget.hasFilter ? _onFilterTap : null,
//onSearchTap: widget.hasSearch ? controller.toggleSearch : null,
),
), ),
); );
} }

View File

@@ -3,7 +3,7 @@ description: A starting point for Dart libraries or applications.
version: 1.3.2+3 version: 1.3.2+3
environment: environment:
sdk: ^3.9.0 sdk: ^3.9.2
dependencies: dependencies:

View File

@@ -1,3 +1,4 @@
description: This file stores settings for Dart & Flutter DevTools. description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions: extensions:
- hive_ce: true

View File

@@ -13,7 +13,9 @@ class BasePage extends GetView<BaseLogic> {
this.floatingActionButton, this.floatingActionButton,
this.appBar, this.appBar,
this.backGroundWidget, this.backGroundWidget,
}) ; this.onPopScopTaped,
this.backId,
});
final List<String>? routes; final List<String>? routes;
final Breadcrumb? routesWidget; final Breadcrumb? routesWidget;
@@ -24,6 +26,8 @@ class BasePage extends GetView<BaseLogic> {
final BackGroundWidget? backGroundWidget; final BackGroundWidget? backGroundWidget;
final FloatingActionButtonLocation? floatingActionButtonLocation; final FloatingActionButtonLocation? floatingActionButtonLocation;
final Widget? floatingActionButton; final Widget? floatingActionButton;
final VoidCallback? onPopScopTaped;
final int? backId;
Widget _buildHeader() { Widget _buildHeader() {
return Column( return Column(
@@ -36,7 +40,11 @@ class BasePage extends GetView<BaseLogic> {
} }
Widget _buildBody() { Widget _buildBody() {
final content = [_buildHeader(), if (child != null) Expanded(child: child!), ...?widgets]; final content = [
if (routes != null || routesWidget != null) _buildHeader(),
if (child != null) Expanded(child: child!),
...?widgets,
];
if (scrollable) { if (scrollable) {
if (backGroundWidget != null) { if (backGroundWidget != null) {
@@ -61,7 +69,7 @@ class BasePage extends GetView<BaseLogic> {
if (backGroundWidget != null) { if (backGroundWidget != null) {
return Stack( return Stack(
children: [ children: [
?backGroundWidget, Positioned.fill(child: backGroundWidget!),
Column(children: content), Column(children: content),
], ],
); );
@@ -71,18 +79,12 @@ class BasePage extends GetView<BaseLogic> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return PopScope( return Scaffold(
canPop: false, backgroundColor: AppColor.bgLight,
onPopInvokedWithResult: (didPop, result) { appBar: appBar,
if (!didPop) appBar?.onBackTap?.call(); body: _buildBody(),
}, floatingActionButtonLocation: floatingActionButtonLocation,
child: Scaffold( floatingActionButton: floatingActionButton,
backgroundColor: AppColor.bgLight,
appBar: appBar,
body: _buildBody(),
floatingActionButtonLocation: floatingActionButtonLocation,
floatingActionButton: floatingActionButton,
),
); );
} }
} }

View File

@@ -1,12 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rasadyar_core/presentation/common/assets.gen.dart';
import '../../../../core.dart';
class BackGroundWidget extends StatelessWidget { class BackGroundWidget extends StatelessWidget {
const BackGroundWidget({ const BackGroundWidget({super.key, required this.gradient, required this.vecPath});
super.key,
required this.gradient,
required this.vecPath,
});
final Gradient gradient; final Gradient gradient;
final String vecPath; final String vecPath;
@@ -14,10 +11,10 @@ class BackGroundWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
width: Get.width,
height: Get.height,
decoration: BoxDecoration(gradient: gradient), decoration: BoxDecoration(gradient: gradient),
child: SvgGenImage.vec(vecPath).svg(fit: BoxFit.cover), child: SvgGenImage.vec(vecPath).svg(fit: BoxFit.cover),
); );
} }
} }

View File

@@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
@@ -65,8 +67,7 @@ class RAppBar extends StatelessWidget implements PreferredSizeWidget {
children: [ children: [
if (children != null) ...children!, if (children != null) ...children!,
if (hasNews || hasBack || hasSearch || hasNotification || hasFilter) if (hasNews || hasBack || hasSearch || hasNotification || hasFilter) const Spacer(),
const Spacer(),
if (hasNews) if (hasNews)
GestureDetector( GestureDetector(
@@ -79,26 +80,23 @@ class RAppBar extends StatelessWidget implements PreferredSizeWidget {
if (hasNews) SizedBox(width: 8.w), if (hasNews) SizedBox(width: 8.w),
if (hasNotification) if (hasNotification)
Badge.count( Badge.count(count: 2, child: Icon(CupertinoIcons.bell_fill, color: Colors.white)),
count: 2,
child: Icon(CupertinoIcons.bell_fill, color: Colors.white),
),
if (hasNotification) SizedBox(width: 8.w), if (hasNotification) SizedBox(width: 8.w),
if (!isBase) ...{
if (hasFilter) if (hasFilter)
GestureDetector( GestureDetector(
onTap: onFilterTap, onTap: onFilterTap,
child: Assets.vec.filterSvg.svg( child: Assets.vec.filterSvg.svg(
width: 24.w, width: 24.w,
height: 24.h, height: 24.h,
colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn), colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
),
), ),
), if (hasBack) SizedBox(width: 8.w),
if (hasBack) SizedBox(width: 8.w),
if (hasSearch) SearchWidget(),
if (hasSearch) SizedBox(width: 8.w),
if (hasSearch) SearchWidget(),
if (hasSearch) SizedBox(width: 8.w),
},
if (hasBack) if (hasBack)
GestureDetector( GestureDetector(
onTap: onBackTap ?? () => Get.back(id: backId), onTap: onBackTap ?? () => Get.back(id: backId),
@@ -120,8 +118,7 @@ class RAppBar extends StatelessWidget implements PreferredSizeWidget {
} }
@override @override
Size get preferredSize => Size get preferredSize => Size.fromHeight(kToolbarHeight + (bottom?.preferredSize.height ?? 0));
Size.fromHeight(kToolbarHeight + (bottom?.preferredSize.height ?? 0));
MainAxisAlignment _getMainAxisAlignment() { MainAxisAlignment _getMainAxisAlignment() {
if (centerTitle) { if (centerTitle) {
@@ -173,21 +170,15 @@ class RAppBar2 extends StatelessWidget implements PreferredSizeWidget {
excludeHeaderSemantics: true, excludeHeaderSemantics: true,
scrolledUnderElevation: 0, scrolledUnderElevation: 0,
centerTitle: centerTitle, centerTitle: centerTitle,
titleTextStyle: titleTextStyle: titleTextStyle ?? AppFonts.yekan16.copyWith(color: Colors.white),
titleTextStyle ?? AppFonts.yekan16.copyWith(color: Colors.white),
title: Row( title: Row(
children: [ children: [
if (leading != null) ...{ if (leading != null) ...{
Padding(padding: const EdgeInsets.only(right: 6), child: leading), Padding(padding: const EdgeInsets.only(right: 6), child: leading),
}, },
if (title != null) ...[ if (title != null) ...[Text(title!), if (iconTitle != null) const SizedBox(width: 8)],
Text(title!),
if (iconTitle != null) const SizedBox(width: 8),
],
if (iconTitle != null) ...{const SizedBox(width: 8)}, if (iconTitle != null) ...{const SizedBox(width: 8)},
if (iconTitle != null) ...{ if (iconTitle != null) ...{SvgGenImage.vec(iconTitle!).svg(width: 24, height: 24)},
SvgGenImage.vec(iconTitle!).svg(width: 24, height: 24),
},
], ],
), ),
titleSpacing: 8, titleSpacing: 8,
@@ -201,10 +192,7 @@ class RAppBar2 extends StatelessWidget implements PreferredSizeWidget {
child: Assets.vec.arrowLeftSvg.svg( child: Assets.vec.arrowLeftSvg.svg(
width: 24.w, width: 24.w,
height: 24.h, height: 24.h,
colorFilter: ColorFilter.mode( colorFilter: ColorFilter.mode(iconColor ?? Colors.white, BlendMode.srcIn),
iconColor ?? Colors.white,
BlendMode.srcIn,
),
), ),
), ),
), ),

View File

@@ -130,7 +130,9 @@ class InformationTag extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
height: (data.height ?? 82).h, height: (data.height ?? 82).h,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(8)), decoration: BoxDecoration(
border: Border.all(color: const Color(0xFFA9A9A9) ,width:0.50),
borderRadius: BorderRadius.circular(8)),
clipBehavior: Clip.hardEdge, clipBehavior: Clip.hardEdge,
child: Row( child: Row(
children: [ children: [

View File

@@ -2,23 +2,49 @@ import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
class LogoWidget extends StatelessWidget { class LogoWidget extends StatelessWidget {
const LogoWidget({super.key, this.title}); const LogoWidget({
final String? title ; super.key,
this.title,
this.height,
this.width,
this.vecPath,
this.svgPath,
this.imagePath,
this.titleStyle,
});
final String? title;
final String? vecPath;
final String? svgPath;
final String? imagePath;
final num? width;
final num? height;
final TextStyle? titleStyle;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
children: [ children: [
Row(), Row(),
Assets.images.innerSplash.image( buildLogo(),
width: 120.w, SizedBox(height: 8.h),
height: 120.h,
),
Text( Text(
title??'سامانه رصدیار', title ?? 'سامانه رصدیار',
style: AppFonts.yekan16.copyWith(color: AppColor.darkGreyNormal), style:titleStyle?? AppFonts.yekan16.copyWith(color: AppColor.darkGreyNormal),
), ),
], ],
); );
} }
Widget buildLogo() {
if (vecPath != null) {
return SvgGenImage.vec(vecPath!).svg(width: width?.w ?? 120.w, height: height?.h ?? 120.h);
} else if (svgPath != null) {
return SvgGenImage(vecPath!).svg(width: width?.w ?? 120.w, height: height?.h ?? 120.h);
} else if (imagePath != null) {
return AssetGenImage(imagePath!).image(width: width?.w ?? 120.w, height: height?.h ?? 120.h);
} else {
return Assets.images.innerSplash.image(width: 120.w, height: 120.h);
}
}
} }

View File

@@ -333,10 +333,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: device_preview_plus name: device_preview_plus
sha256: "45f9154c3213e470df1aa54326757ccf3cc6fb1f04396bced6ad1a7bfc9d6400" sha256: "2ebe9cf25ed46875c9c1b745d0438df9e4c49f7bcf9ea466c88efbcffcc73ab7"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.0" version: "2.5.1"
dio: dio:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -1852,4 +1852,4 @@ packages:
version: "2.1.0" version: "2.1.0"
sdks: sdks:
dart: ">=3.9.2 <4.0.0" dart: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3" flutter: ">=3.35.4"

View File

@@ -4,7 +4,7 @@ publish_to: none
version: 1.2.0+2 version: 1.2.0+2
environment: environment:
sdk: ^3.9.0 sdk: ^3.9.2
dependencies: dependencies:
flutter: flutter:

View File

@@ -1,3 +1,4 @@
description: This file stores settings for Dart & Flutter DevTools. description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions: extensions:
- hive_ce: true

View File

@@ -333,10 +333,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: device_preview_plus name: device_preview_plus
sha256: "45f9154c3213e470df1aa54326757ccf3cc6fb1f04396bced6ad1a7bfc9d6400" sha256: "2ebe9cf25ed46875c9c1b745d0438df9e4c49f7bcf9ea466c88efbcffcc73ab7"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.0" version: "2.5.1"
dio: dio:
dependency: transitive dependency: transitive
description: description:
@@ -1859,4 +1859,4 @@ packages:
version: "2.1.0" version: "2.1.0"
sdks: sdks:
dart: ">=3.9.2 <4.0.0" dart: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3" flutter: ">=3.35.4"

View File

@@ -4,7 +4,7 @@ publish_to: 'none'
version: 1.2.0 version: 1.2.0
environment: environment:
sdk: ^3.9.0 sdk: ^3.9.2
dependencies: dependencies:
flutter: flutter:

View File

@@ -1,3 +1,4 @@
description: This file stores settings for Dart & Flutter DevTools. description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions: extensions:
- hive_ce: true

View File

@@ -5,7 +5,7 @@ publish_to: 'none'
# repository: https://github.com/my_org/my_repo # repository: https://github.com/my_org/my_repo
environment: environment:
sdk: ^3.9.0 sdk: ^3.9.2
dependencies: dependencies:

View File

@@ -317,10 +317,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: device_preview_plus name: device_preview_plus
sha256: "45f9154c3213e470df1aa54326757ccf3cc6fb1f04396bced6ad1a7bfc9d6400" sha256: "2ebe9cf25ed46875c9c1b745d0438df9e4c49f7bcf9ea466c88efbcffcc73ab7"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.0" version: "2.5.1"
dio: dio:
dependency: transitive dependency: transitive
description: description:
@@ -1839,4 +1839,4 @@ packages:
version: "2.1.0" version: "2.1.0"
sdks: sdks:
dart: ">=3.9.2 <4.0.0" dart: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3" flutter: ">=3.35.4"

View File

@@ -4,7 +4,7 @@ publish_to: 'none'
version: 1.3.8+6 version: 1.3.8+6
environment: environment:
sdk: ^3.9.0 sdk: ^3.9.2
dependencies: dependencies:
flutter: flutter: