220 lines
11 KiB
Dart
220 lines
11 KiB
Dart
import 'package:flutter/widgets.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:sefer_admin1/constant/box_name.dart';
|
|
import 'package:sefer_admin1/constant/links.dart';
|
|
import 'package:sefer_admin1/controller/firebase/firbase_messge.dart';
|
|
import 'package:sefer_admin1/controller/functions/crud.dart';
|
|
import 'package:sefer_admin1/main.dart';
|
|
import 'package:sefer_admin1/views/widgets/elevated_btn.dart';
|
|
import 'package:sefer_admin1/views/widgets/my_textField.dart';
|
|
|
|
import '../constant/style.dart';
|
|
import '../print.dart';
|
|
|
|
class NotificationController extends GetxController {
|
|
final formKey = GlobalKey<FormState>();
|
|
final title = TextEditingController();
|
|
final body = TextEditingController();
|
|
List<String> tokensDriver = [];
|
|
List<String> tokensPassengers = [];
|
|
|
|
getTokensDrivers() async {
|
|
await FirebaseMessagesController().loadAllPagesAndSendNotifications();
|
|
}
|
|
|
|
getTokensPassengers() async {
|
|
await FirebaseMessagesController()
|
|
.loadAllPagesAndSendNotificationsPassengers();
|
|
}
|
|
|
|
Future<dynamic> sendNotificationDrivers() {
|
|
return Get.defaultDialog(
|
|
title: 'send notification'.tr,
|
|
titleStyle: AppStyle.title,
|
|
content: Form(
|
|
key: formKey,
|
|
child: Column(
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: MyTextForm(
|
|
controller: title,
|
|
label: 'title notification'.tr,
|
|
hint: 'title notification'.tr,
|
|
type: TextInputType.name),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: MyTextForm(
|
|
controller: body,
|
|
label: 'body notification'.tr,
|
|
hint: 'body notification'.tr,
|
|
type: TextInputType.name),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
confirm: MyElevatedButton(
|
|
title: 'send'.tr,
|
|
onPressed: () async {
|
|
// tokensDriver = box.read(BoxName.tokensDrivers)['message'];
|
|
// Log.print('tokensDriver: ${tokensDriver}');
|
|
// if (formKey.currentState!.validate()) {
|
|
box.read(BoxName.tokensDrivers)['message'].length;
|
|
for (var i = 0;
|
|
i < box.read(BoxName.tokensDrivers)['message'].length;
|
|
i++) {
|
|
// for (var i = 0; i < 2; i++) {
|
|
// print(i);
|
|
var res = await CRUD()
|
|
.post(link: AppLink.addNotificationCaptain, payload: {
|
|
"driverID": box
|
|
.read(BoxName.tokensDrivers)['message'][i]['id']
|
|
.toString(),
|
|
"title": title.text,
|
|
"body": body.text,
|
|
});
|
|
Log.print(
|
|
'res: ${res}for ${box.read(BoxName.tokensDrivers)['message'][i]['id']}');
|
|
// Log.print('tokensDriver[i]: ${tokensDriver[i]}');
|
|
Future.delayed(const Duration(microseconds: 50));
|
|
|
|
FirebaseMessagesController().sendNotificationToAnyWithoutData(
|
|
title.text,
|
|
body.text,
|
|
box
|
|
.read(BoxName.tokensDrivers)['message'][i]['token']
|
|
.toString(),
|
|
'tone2.wav');
|
|
}
|
|
Get.back();
|
|
// }
|
|
}),
|
|
cancel: MyElevatedButton(
|
|
title: 'cancel',
|
|
onPressed: () {
|
|
Get.back();
|
|
}));
|
|
}
|
|
|
|
Future<dynamic> sendNotificationPassengers() {
|
|
return Get.defaultDialog(
|
|
title: 'send notification'.tr,
|
|
titleStyle: AppStyle.title,
|
|
content: Form(
|
|
key: formKey,
|
|
child: Column(
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: MyTextForm(
|
|
controller: title,
|
|
label: 'title notification'.tr,
|
|
hint: 'title notification'.tr,
|
|
type: TextInputType.name),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: MyTextForm(
|
|
controller: body,
|
|
label: 'body notification'.tr,
|
|
hint: 'body notification'.tr,
|
|
type: TextInputType.name),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
confirm: MyElevatedButton(
|
|
title: 'send'.tr,
|
|
onPressed: () async {
|
|
// tokensPassengers = box.read(BoxName.tokensPassengers);
|
|
var tokensPassengersData =
|
|
box.read(BoxName.tokensPassengers)['data'];
|
|
|
|
// Debug print to check structure of the 'data' field
|
|
print('Tokens Passengers Data: $tokensPassengersData');
|
|
|
|
if (tokensPassengersData is List) {
|
|
for (var i = 0; i < tokensPassengersData.length; i++) {
|
|
if (formKey.currentState!.validate()) {
|
|
var res = await CRUD()
|
|
.post(link: AppLink.addNotificationPassenger, payload: {
|
|
"passenger_id":
|
|
tokensPassengersData[i]['passengerID'].toString(),
|
|
"title": title.text,
|
|
"body": body.text,
|
|
});
|
|
Log.print('res: ${res}');
|
|
FirebaseMessagesController()
|
|
.sendNotificationToAnyWithoutData(
|
|
title.text,
|
|
body.text,
|
|
tokensPassengersData[i]['token']
|
|
.toString(), // Access token correctly
|
|
'order.wav',
|
|
);
|
|
}
|
|
}
|
|
Get.back();
|
|
} else {
|
|
// Handle the case where 'data' is not a list
|
|
print('Data is not a list: $tokensPassengersData');
|
|
}
|
|
}),
|
|
cancel: MyElevatedButton(
|
|
title: 'cancel',
|
|
onPressed: () {
|
|
Get.back();
|
|
}));
|
|
}
|
|
}
|
|
// يلا دلوقتي! تطبيق سفر جاهز عشان تبدأ تستقبل الطلبات
|
|
// • افتح التطبيق دلوقتي، واستعد إنك تستقبل طلبات أكتر. كل ما تكون فاتح، فرصتك في الطلبات بتزيد!
|
|
// 2. خليك فاتح واستقبل طلبات أكتر مع تطبيق سفر
|
|
// • وجودك متصل في التطبيق هيخليك تستقبل طلبات أكتر. افتح التطبيق دلوقتي وما تفوتش الفرصة!
|
|
// 3. فرصتك لزيادة دخلك مع تطبيق سفر تبدأ من دلوقتي!
|
|
// • مجرد إنك تفتح التطبيق مش هيأثر عليك، بالعكس، هيزود فرصتك في طلبات أكتر. افتح التطبيق واشترك دلوقتي!
|
|
|
|
//sms
|
|
// link sefer driver is https://shorturl.at/IHJcm1.
|
|
// // ميزات الأمان بعد 500 رحلة:
|
|
// • “بعد 500 رحلة مع سفر، تحصل على مميزات أمان إضافية لضمان راحتك.”
|
|
// • “نوفر لك ميزات أمان متقدمة بعد 500 رحلة لتجربة قيادة أكثر أمانًا.”
|
|
// • “مع 500 رحلة، تحصل على دعم أمني متقدم لتوفير أفضل تجربة قيادة.”
|
|
// 2. ميزات الصيانة:
|
|
// • “احصل على خدمات صيانة مجانية بعد عدد معين من الرحلات مع سفر.”
|
|
// • “استمتع بخدمات صيانة حصرية عند الوصول إلى عدد محدد من الرحلات.”
|
|
// • “مع سفر، نقدم لك عروض صيانة مميزة لتحافظ على سيارتك في أفضل حال.”
|
|
// 3. ميزات فتح حسابات البنوك:
|
|
// • “مع سفر، يمكنك فتح حساب بنكي بسهولة واستفادة من عروض مميزة.”
|
|
// • “افتح حساب بنكي مع تطبيق سفر واستفد من خدمات مالية حصرية.”
|
|
// • “نساعدك على فتح حساب بنكي بأفضل العروض بالتعاون مع البنوك المحلية.”
|
|
// 4. ميزات ورود السيارات ومعارض السيارات الخاصة بنا:
|
|
// • “استمتع بعروض مميزة لشراء السيارات من معارض سفر الحصرية.”
|
|
// • “اختر سيارتك المثالية من معارض سفر بأسعار تنافسية وخدمات مميزة.”
|
|
// • “نقدم لك أفضل عروض السيارات من معارضنا لتسهيل امتلاك سيارتك الجديدة.”
|
|
// 5. ميزات أوفر كار:
|
|
// • “أوفر كار من سفر توفر لك سيارات اقتصادية لزيادة دخلك بكفاءة.”
|
|
// • “مع أوفر كار، يمكنك العمل بسيارات اقتصادية وتحقيق أرباح أكبر.”
|
|
// • “تطبيق سفر يقدم لك أوفر كار، الخيار الاقتصادي المثالي لزيادة دخلك.”
|
|
// 6. مستوى الدخل المحدود والطلبات الاقتصادية:
|
|
// • “لأصحاب الدخل المحدود، وفرنا طلبات اقتصادية تضمن لك زيادة دخلك.”
|
|
// • “الطلبات الاقتصادية من سفر تساعدك على زيادة دخلك بسهولة وفعالية.”
|
|
// • “استفد من طلبات اقتصادية تناسب أصحاب الدخل المحدود لزيادة أرباحك.”
|
|
// 7. طلبات الليل:
|
|
// • “مع طلبات الليل من سفر، زود دخلك واستفد من فرص إضافية في المساء.”
|
|
// • “لا تفوت فرصة طلبات الليل مع سفر، زود دخلك في أي وقت.”
|
|
// • “طلبات الليل من سفر توفر لك فرصًا إضافية لتحقيق دخل أعلى.”
|
|
// 8. طلبات الكمفورت الأكثر راحة والسيارات المكيفة:
|
|
// • “قدّم خدمة مريحة مع طلبات الكمفورت من سفر والسيارات المكيفة.”
|
|
// • “طلبات الكمفورت توفر تجربة راقية للركاب بسيارات مكيفة ومريحة.”
|
|
// • “مع سفر، سيارات الكمفورت المكيفة تضمن راحة الركاب وزيادة الطلبات.”
|
|
// 9. طلبات السبيد:
|
|
// • “استقبل طلبات السبيد مع سفر لتقديم رحلات أسرع وزيادة دخلك.”
|
|
// • “طلبات السبيد توفر لك فرصة إكمال المزيد من الرحلات في وقت أقل.”
|
|
// • “مع طلبات السبيد من سفر، تقدم خدمة سريعة وفعالة لزيادة الأرباح.”
|
|
// 10. الطلبات الثابتة والمعتدلة السعر والنسبة الثابتة 8%:
|
|
// • “مع نسبة ثابتة 8%، تحصل على أفضل عروض الأسعار مع سفر.”
|
|
// • “استمتع بنسبة ثابتة 8%، أقل نسبة بين المنافسين لزيادة دخلك.”
|
|
// • “طلبات سفر الثابتة تضمن لك دخلاً مستقراً بنسبة أقل من 8%.”
|