1 - multi module in Auth select save selected module 2 - add flutter gen for assets builder
176 lines
6.2 KiB
Dart
176 lines
6.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:rasadyar_core/core.dart';
|
|
|
|
import 'logic.dart';
|
|
|
|
class RootPage extends GetView<RootLogic> {
|
|
const RootPage({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: Stack(
|
|
children: [
|
|
ObxValue((errorType) {
|
|
if (errorType.isNotEmpty) {
|
|
if (errorType.contains(ErrorLocationType.serviceDisabled)) {
|
|
Future.microtask(() {
|
|
Get.defaultDialog(
|
|
title: 'خطا',
|
|
content: const Text('سرویس مکانیابی غیرفعال است'),
|
|
cancel: ROutlinedElevated(
|
|
text: 'بررسی مجدد',
|
|
width: 120,
|
|
textStyle: AppFonts.yekan16,
|
|
onPressed: () async {
|
|
var service = await controller.locationServiceEnabled();
|
|
eLog(service);
|
|
if (service) {
|
|
controller.errorLocationType.remove(
|
|
ErrorLocationType.serviceDisabled,
|
|
);
|
|
Get.back();
|
|
}
|
|
// Don't call Get.back() if service is still disabled
|
|
},
|
|
),
|
|
confirm: RElevated(
|
|
text: 'روشن کردن',
|
|
textStyle: AppFonts.yekan16,
|
|
width: 120,
|
|
onPressed: () async {
|
|
var res = await Geolocator.openLocationSettings();
|
|
if (res) {
|
|
var service =
|
|
await controller.locationServiceEnabled();
|
|
if (service) {
|
|
controller.errorLocationType.remove(
|
|
ErrorLocationType.serviceDisabled,
|
|
);
|
|
Get.back();
|
|
}
|
|
}
|
|
},
|
|
),
|
|
|
|
contentPadding: EdgeInsets.all(8),
|
|
onWillPop: () async {
|
|
return controller.errorLocationType.isEmpty;
|
|
},
|
|
barrierDismissible: false,
|
|
);
|
|
});
|
|
} else {
|
|
Future.microtask(() {
|
|
Get.defaultDialog(
|
|
title: 'خطا',
|
|
content: const Text(
|
|
' دسترسی به سرویس مکانیابی غیرفعال است',
|
|
),
|
|
cancel: ROutlinedElevated(
|
|
text: 'بررسی مجدد',
|
|
width: 120,
|
|
textStyle: AppFonts.yekan16,
|
|
onPressed: () async {
|
|
await controller.checkPermission();
|
|
},
|
|
),
|
|
confirm: RElevated(
|
|
text: 'اجازه دادن',
|
|
textStyle: AppFonts.yekan16,
|
|
width: 120,
|
|
onPressed: () async {
|
|
var res = await controller.checkPermission(
|
|
request: true,
|
|
);
|
|
if (res) {
|
|
controller.errorLocationType.remove(
|
|
ErrorLocationType.permissionDenied,
|
|
);
|
|
Get.back();
|
|
}
|
|
},
|
|
),
|
|
|
|
contentPadding: EdgeInsets.all(8),
|
|
onWillPop: () async {
|
|
return controller.errorLocationType.isEmpty;
|
|
},
|
|
barrierDismissible: false,
|
|
);
|
|
});
|
|
}
|
|
}
|
|
return const SizedBox.shrink();
|
|
}, controller.errorLocationType),
|
|
|
|
ObxValue(
|
|
(currentIndex) => IndexedStack(
|
|
index: currentIndex.value,
|
|
children: controller.pages,
|
|
),
|
|
controller.currentIndex,
|
|
),
|
|
|
|
],
|
|
),
|
|
bottomNavigationBar: WaveBottomNavigation(
|
|
items: [
|
|
WaveBottomNavigationItem(title: 'خانه', icon: Assets.vec.mapSvg.svg(
|
|
width: 32,
|
|
height: 32,
|
|
colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
|
|
)),
|
|
WaveBottomNavigationItem(
|
|
title: 'عملیات',
|
|
icon: Assets.vec.userSvg.svg(
|
|
width: 32,
|
|
height: 32,
|
|
colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
|
|
),
|
|
),
|
|
WaveBottomNavigationItem(
|
|
title: 'افزودن',
|
|
icon: Assets.vec.addSvg.svg(
|
|
width: 32,
|
|
height: 32,
|
|
colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
|
|
),
|
|
),
|
|
WaveBottomNavigationItem(
|
|
title: 'آمار',
|
|
icon: Assets.vec.diagramSvg.svg(width: 32,height: 32,colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),),
|
|
),
|
|
WaveBottomNavigationItem(
|
|
title: 'تماس',
|
|
icon: Assets.vec.callSvg.svg(
|
|
width: 32,
|
|
height: 32,
|
|
colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
|
|
),
|
|
),
|
|
WaveBottomNavigationItem(
|
|
title: 'مکان ',
|
|
icon: Assets.vec.gpsSvg.svg(
|
|
width: 32,
|
|
height: 32,
|
|
colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
|
|
),
|
|
),
|
|
WaveBottomNavigationItem(
|
|
title: 'تاریخ',
|
|
icon: Assets.vec.calendarSvg.svg(
|
|
width: 32,
|
|
height: 32,
|
|
colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
|
|
),
|
|
),
|
|
],
|
|
onPageChanged: (index) {
|
|
controller.changePage(index);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|