11/17/1
This commit is contained in:
86
lib/views/Rate/rate_app_page.dart
Normal file
86
lib/views/Rate/rate_app_page.dart
Normal file
@@ -0,0 +1,86 @@
|
||||
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
||||
import 'package:SEFER/views/widgets/my_textField.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../controller/rate/rate_app_controller.dart';
|
||||
|
||||
class RatingScreen extends StatelessWidget {
|
||||
// Initialize the RatingController using GetX for state management
|
||||
final RatingController ratingController = Get.put(RatingController());
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
// Display title "Rate Our App", with .tr for localization support
|
||||
title: Text("Rate Our App".tr),
|
||||
),
|
||||
body: Center(
|
||||
child: Obx(() {
|
||||
// Observe changes in userRating; when updated, rebuild the UI accordingly
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: ListView(
|
||||
// mainAxisAlignment:
|
||||
// MainAxisAlignment.center, // Center content vertically
|
||||
children: [
|
||||
ClipRRect(
|
||||
borderRadius: BorderRadius.circular(15),
|
||||
child: Image.asset('assets/images/logo.gif')),
|
||||
const SizedBox(height: 10),
|
||||
// Text prompt asking the user to rate the app, with localization support
|
||||
Text("How would you rate our app?".tr),
|
||||
const SizedBox(height: 10), // Vertical spacing between elements
|
||||
MyTextForm(
|
||||
controller: ratingController.comment,
|
||||
label: 'write comment here'.tr,
|
||||
hint: 'write comment here'.tr,
|
||||
type: TextInputType.name,
|
||||
),
|
||||
// Build and display the row of rating stars
|
||||
_buildRatingStars(),
|
||||
|
||||
const SizedBox(
|
||||
height: 20), // Additional spacing before the button
|
||||
|
||||
// Button to submit the selected rating
|
||||
MyElevatedButton(
|
||||
onPressed: () {
|
||||
// Calls submitRating() method in the controller with the current rating value
|
||||
ratingController
|
||||
.submitRating(ratingController.userRating.value);
|
||||
},
|
||||
// Button text "Submit Rating" with localization support
|
||||
title: "Submit Rating".tr,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Widget function to display a row of clickable star icons for rating
|
||||
Widget _buildRatingStars() {
|
||||
return Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center, // Center-aligns stars horizontally
|
||||
children: List.generate(5, (index) {
|
||||
return IconButton(
|
||||
// Display a star icon, filled if selected, otherwise grey
|
||||
icon: Icon(
|
||||
Icons.star,
|
||||
color: index < ratingController.userRating.value
|
||||
? Colors.orange // Orange for selected stars
|
||||
: Colors.grey, // Grey for unselected stars
|
||||
),
|
||||
onPressed: () {
|
||||
// Update user rating in the controller when a star is clicked
|
||||
ratingController.userRating.value = index + 1;
|
||||
},
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:SEFER/constant/colors.dart';
|
||||
import 'package:SEFER/constant/style.dart';
|
||||
import 'package:SEFER/controller/auth/captin/register_captin_controller.dart';
|
||||
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
||||
@@ -7,6 +8,8 @@ import 'package:SEFER/views/widgets/mycircular.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../Rate/rate_app_page.dart';
|
||||
|
||||
class SmsSignupEgypt extends StatelessWidget {
|
||||
SmsSignupEgypt({super.key});
|
||||
|
||||
@@ -102,6 +105,15 @@ class SmsSignupEgypt extends StatelessWidget {
|
||||
title: 'Submit'.tr,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: MyElevatedButton(
|
||||
kolor: AppColor.yellowColor,
|
||||
title: "Rate Our App".tr,
|
||||
onPressed: () {
|
||||
Get.to(RatingScreen());
|
||||
}),
|
||||
)
|
||||
],
|
||||
);
|
||||
}),
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:SEFER/constant/colors.dart';
|
||||
import 'package:SEFER/constant/links.dart';
|
||||
import 'package:SEFER/controller/functions/crud.dart';
|
||||
import 'package:SEFER/main.dart';
|
||||
import 'package:SEFER/views/widgets/error_snakbar.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class DriverCarController extends GetxController {
|
||||
@@ -60,10 +61,11 @@ class DriverCarController extends GetxController {
|
||||
},
|
||||
);
|
||||
if (res != 'failure') {
|
||||
Get.snackbar('Success'.tr, '', backgroundColor: AppColor.greenColor);
|
||||
mySnackbarSuccess('');
|
||||
|
||||
fetchCatrsForDrivers();
|
||||
} else {
|
||||
Get.snackbar('Error'.tr, '', backgroundColor: AppColor.redColor);
|
||||
mySnackeBarError('');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
import 'package:SEFER/constant/box_name.dart';
|
||||
import 'package:SEFER/constant/colors.dart';
|
||||
import 'package:SEFER/main.dart';
|
||||
import 'package:SEFER/views/widgets/mydialoug.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../controller/auth/captin/invit_controller.dart';
|
||||
import '../../widgets/elevated_btn.dart';
|
||||
|
||||
class InviteScreen extends StatelessWidget {
|
||||
final InviteController controller = Get.put(InviteController());
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:SEFER/controller/auth/facebook_login.dart';
|
||||
import 'package:SEFER/views/auth/captin/contact_us_page.dart';
|
||||
import 'package:SEFER/views/widgets/my_textField.dart';
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -18,7 +16,6 @@ import '../../../constant/style.dart';
|
||||
import '../../../controller/auth/apple_sigin.dart';
|
||||
import '../../../controller/auth/captin/login_captin_controller.dart';
|
||||
import '../../../controller/auth/google_sign.dart';
|
||||
import '../../../controller/functions/location_permission.dart';
|
||||
import '../../../controller/functions/overlay_permisssion.dart';
|
||||
import '../../../main.dart';
|
||||
import '../../../print.dart';
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:SEFER/constant/box_name.dart';
|
||||
import 'package:SEFER/main.dart';
|
||||
import 'package:SEFER/views/widgets/error_snakbar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
@@ -168,12 +169,15 @@ class AssuranceHealthPage extends StatelessWidget {
|
||||
Navigator.of(context)
|
||||
.pop(); // Just close the dialog
|
||||
// Optionally show feedback if the driver opts out
|
||||
Get.snackbar(
|
||||
"Opted out".tr,
|
||||
// Get.snackbar(
|
||||
// "Opted out".tr,
|
||||
// "You have chosen not to proceed with health insurance."
|
||||
// .tr,
|
||||
// backgroundColor:
|
||||
// CupertinoColors.systemGrey);
|
||||
mySnackbarSuccess(
|
||||
"You have chosen not to proceed with health insurance."
|
||||
.tr,
|
||||
backgroundColor:
|
||||
CupertinoColors.systemGrey);
|
||||
.tr);
|
||||
},
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:SEFER/constant/api_key.dart';
|
||||
import 'package:SEFER/constant/links.dart';
|
||||
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
|
||||
import 'package:SEFER/views/Rate/rate_app_page.dart';
|
||||
import 'package:SEFER/views/auth/captin/contact_us_page.dart';
|
||||
import 'package:SEFER/views/auth/captin/invite_driver_screen.dart';
|
||||
import 'package:SEFER/views/notification/available_rides_page.dart';
|
||||
@@ -102,11 +103,18 @@ class CupertinoDrawerCaptain extends StatelessWidget {
|
||||
),
|
||||
_buildDivider(),
|
||||
_buildDrawerItem(
|
||||
icon: CupertinoIcons.settings,
|
||||
icon:
|
||||
Icons.play_circle_filled, // Icon representing video play
|
||||
text: 'Videos Tutorials'.tr,
|
||||
onTap: () => Get.to(() => VideoListPage()),
|
||||
),
|
||||
_buildDivider(),
|
||||
_buildDrawerItem(
|
||||
icon: Icons.star, // Another option with a filled star icon
|
||||
text: "Rate Our App".tr,
|
||||
onTap: () => Get.to(() => RatingScreen()),
|
||||
),
|
||||
_buildDivider(),
|
||||
_buildDrawerItem(
|
||||
icon: CupertinoIcons.settings,
|
||||
text: 'Settings'.tr,
|
||||
|
||||
@@ -1,26 +1,16 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:SEFER/constant/box_name.dart';
|
||||
import 'package:SEFER/controller/firebase/local_notification.dart';
|
||||
import 'package:SEFER/main.dart';
|
||||
import 'package:bubble_head/bubble.dart';
|
||||
import 'package:SEFER/views/home/Captin/orderCaptin/vip_order_page.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_font_icons/flutter_font_icons.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
|
||||
import 'package:timezone/data/latest.dart' as tz;
|
||||
import 'package:timezone/timezone.dart' as tz;
|
||||
import '../../../../../constant/colors.dart';
|
||||
import '../../../../../constant/notification.dart';
|
||||
import '../../../../../controller/functions/audio_controller.dart';
|
||||
import '../../../../../print.dart';
|
||||
import '../../../../Rate/ride_calculate_driver.dart';
|
||||
import '../../../../../controller/functions/location_controller.dart';
|
||||
import '../../driver_map_page.dart';
|
||||
import '../../orderCaptin/order_speed_request.dart';
|
||||
|
||||
GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
|
||||
return GetBuilder<HomeCaptainController>(
|
||||
@@ -195,34 +185,13 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
|
||||
child: Builder(builder: (context) {
|
||||
return IconButton(
|
||||
onPressed: () async {
|
||||
// NotificationController().showNotification(
|
||||
// ' message.notification!.title.toString()',
|
||||
// ' message.notification!.body.toString()',
|
||||
// 'order',
|
||||
// '');
|
||||
|
||||
NotificationController notificationController =
|
||||
Get.put(NotificationController());
|
||||
await notificationController.initNotifications();
|
||||
final random = Random();
|
||||
final randomMessage =
|
||||
driverMessages[random.nextInt(driverMessages.length)];
|
||||
Log.print(
|
||||
' randomMessage.split[0]: ${randomMessage.split(':')[0]}');
|
||||
Log.print(
|
||||
' randomMessage.split([1]: ${randomMessage.split(':')[1]}');
|
||||
// Schedule the notification with the random message
|
||||
notificationController.showNotification(
|
||||
randomMessage.split(':')[0],
|
||||
randomMessage.split(':')[1],
|
||||
"ding",
|
||||
'');
|
||||
|
||||
// notificationController.scheduleNotificationEvery10Hours(
|
||||
// "افتح التطبيق".tr,
|
||||
// "افتح التطبيق لتبقى على اطلاع واستعداد للمهام القادمة.".tr,
|
||||
// "ding",
|
||||
// );
|
||||
// mySnakeBarError('ad');
|
||||
Get.to(() => VipOrderPage(), arguments: {
|
||||
'myListString': 'myListString',
|
||||
'DriverList': 'myList',
|
||||
// 'PolylineJson': myPoints,
|
||||
'body': 'message.notification!.body'
|
||||
});
|
||||
},
|
||||
icon: const Icon(
|
||||
FontAwesome5.window_close,
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import 'package:SEFER/print.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../constant/box_name.dart';
|
||||
import '../../../constant/colors.dart';
|
||||
import '../../../constant/info.dart';
|
||||
import '../../../constant/style.dart';
|
||||
import '../../../controller/home/payment/captain_wallet_controller.dart';
|
||||
import '../../../controller/home/payment/paymob_payout.dart';
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:SEFER/controller/functions/tts.dart';
|
||||
import 'package:SEFER/controller/home/payment/paymob_payout.dart';
|
||||
import 'package:SEFER/views/home/my_wallet/bank_account_egypt.dart';
|
||||
import 'package:SEFER/views/home/my_wallet/payment_history_driver_page.dart';
|
||||
import 'package:SEFER/views/widgets/error_snakbar.dart';
|
||||
import 'package:SEFER/views/widgets/mydialoug.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -13,14 +14,12 @@ import 'package:SEFER/constant/colors.dart';
|
||||
import 'package:SEFER/constant/info.dart';
|
||||
import 'package:SEFER/constant/style.dart';
|
||||
import 'package:SEFER/controller/home/payment/captain_wallet_controller.dart';
|
||||
import 'package:SEFER/controller/payment/payment_controller.dart';
|
||||
import 'package:SEFER/main.dart';
|
||||
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
||||
import 'package:SEFER/views/widgets/my_textField.dart';
|
||||
import 'package:SEFER/views/widgets/mycircular.dart';
|
||||
|
||||
import '../../../controller/payment/driver_payment_controller.dart';
|
||||
import '../../../print.dart';
|
||||
import '../../widgets/my_scafold.dart';
|
||||
import 'card_wallet_widget.dart';
|
||||
import 'points_captain.dart';
|
||||
@@ -380,10 +379,8 @@ class WalletCaptain extends StatelessWidget {
|
||||
await controller.payFromBudget();
|
||||
} else {
|
||||
Get.back();
|
||||
Get.snackbar('Your Budget less than needed'.tr, '',
|
||||
duration: const Duration(seconds: 3),
|
||||
backgroundColor: AppColor.redColor,
|
||||
snackPosition: SnackPosition.BOTTOM);
|
||||
|
||||
mySnackeBarError('Your Budget less than needed'.tr);
|
||||
}
|
||||
},
|
||||
),
|
||||
@@ -405,8 +402,8 @@ class WalletCaptain extends StatelessWidget {
|
||||
if (double.parse(controller.totalAmountVisa) > 15) {
|
||||
Get.to(() => const TransferBudgetPage());
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"You don't have enough money in your SEFER wallet".tr, '');
|
||||
mySnackeBarError(
|
||||
"You don't have enough money in your SEFER wallet".tr);
|
||||
}
|
||||
},
|
||||
);
|
||||
@@ -507,9 +504,7 @@ Future<dynamic> addBankCodeEgypt(
|
||||
});
|
||||
print('res: ${res}');
|
||||
if (res != 'failure') {
|
||||
Get.snackbar(
|
||||
'updated succses'.tr, 'bank account added succesfly',
|
||||
backgroundColor: AppColor.greenColor);
|
||||
mySnackbarSuccess('bank account added succesfly'.tr);
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import 'package:SEFER/splash_screen_page.dart';
|
||||
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
||||
import 'package:SEFER/views/widgets/my_scafold.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import 'package:SEFER/controller/auth/captin/login_captin_controller.dart';
|
||||
import 'package:SEFER/views/auth/captin/login_captin.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:SEFER/controller/notification/notification_captain_controller.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class NotificationCaptain extends StatelessWidget {
|
||||
const NotificationCaptain({Key? key}) : super(key: key);
|
||||
|
||||
69
lib/views/widgets/error_snakbar.dart
Normal file
69
lib/views/widgets/error_snakbar.dart
Normal file
@@ -0,0 +1,69 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../constant/colors.dart';
|
||||
|
||||
SnackbarController mySnackeBarError(String message) {
|
||||
return Get.snackbar(
|
||||
'Error'.tr,
|
||||
message,
|
||||
backgroundColor: AppColor.redColor.withOpacity(0.9),
|
||||
colorText: AppColor.secondaryColor,
|
||||
icon: const Icon(Icons.error, color: AppColor.secondaryColor),
|
||||
shouldIconPulse: true,
|
||||
snackPosition: SnackPosition.TOP,
|
||||
margin: const EdgeInsets.all(10),
|
||||
borderRadius: 10,
|
||||
animationDuration: const Duration(milliseconds: 500),
|
||||
forwardAnimationCurve: Curves.easeOutBack,
|
||||
reverseAnimationCurve: Curves.easeInBack,
|
||||
titleText: Text(
|
||||
'Error'.tr,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.white,
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
messageText: Text(
|
||||
message,
|
||||
style: TextStyle(
|
||||
color: Colors.white.withOpacity(0.9),
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
SnackbarController mySnackbarSuccess(String message) {
|
||||
return Get.snackbar(
|
||||
'Success'.tr,
|
||||
message,
|
||||
backgroundColor: AppColor.greenColor
|
||||
.withOpacity(0.9), // Assuming green color for success
|
||||
colorText: AppColor.secondaryColor,
|
||||
icon: const Icon(Icons.check_circle, color: AppColor.secondaryColor),
|
||||
shouldIconPulse: true,
|
||||
snackPosition: SnackPosition.TOP,
|
||||
margin: const EdgeInsets.all(10),
|
||||
borderRadius: 10,
|
||||
animationDuration: const Duration(milliseconds: 500),
|
||||
forwardAnimationCurve: Curves.easeOutBack,
|
||||
reverseAnimationCurve: Curves.easeInBack,
|
||||
titleText: Text(
|
||||
'Success'.tr,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.white,
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
messageText: Text(
|
||||
message,
|
||||
style: TextStyle(
|
||||
color: Colors.white.withOpacity(0.9),
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user