Update: 2026-06-11 13:47:39

This commit is contained in:
Hamza-Ayed
2026-06-11 13:47:40 +03:00
parent 977adfe99d
commit c5170a88d2
516 changed files with 3654 additions and 3321 deletions

View File

@@ -186,7 +186,7 @@ class SyrianCardAI extends StatelessWidget {
),
const SizedBox(height: 16),
Text(
"To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences."
"To become a ride-sharing driver on the Siro app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Siro app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences."
.tr,
style: NewAppStyle.bodyStyle,
textAlign: TextAlign.center,
@@ -209,7 +209,7 @@ class SyrianCardAI extends StatelessWidget {
.playAudio1('assets/aggrement.wav');
} else {
await textToSpeechController.speakText(
'To become a ride-sharing driver on the Intaleq app...'
'To become a ride-sharing driver on the Siro app...'
.tr);
}
},

View File

@@ -35,7 +35,7 @@ class ContactUsPage extends StatelessWidget {
IconButton(
onPressed: () async {
Get.put(TextToSpeechController()).speakText(
'Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.'
'Siro is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.'
.tr);
},
icon: const Icon(Icons.headphones),
@@ -43,7 +43,7 @@ class ContactUsPage extends StatelessWidget {
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.'
'Siro is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.'
.tr,
style: AppStyle.title,
textAlign: TextAlign.center,

View File

@@ -6,11 +6,9 @@ import 'package:siro_driver/controller/auth/captin/login_captin_controller.dart'
// --- Placeholder Imports ---
// Assuming these files exist in your project structure.
import '../../../constant/box_name.dart';
import '../../../constant/colors.dart';
import '../../../controller/auth/captin/phone_helper_controller.dart';
import '../../../controller/local/phone_intel/intl_phone_field.dart';
import '../../../main.dart';
import '../../../print.dart';
// Assuming you have an AppColor class defined in your project.
// import 'path/to/your/app_color.dart';
@@ -304,7 +302,8 @@ class _PhoneNumberScreenState extends State<PhoneNumberScreen> {
if (_formKey.currentState!.validate()) {
setState(() => _isLoading = true);
final rawPhone = _completePhone.replaceFirst('+', '');
Log.print('📱 _submit rawPhone: "$rawPhone" (from _completePhone: "$_completePhone")');
Log.print(
'📱 _submit rawPhone: "$rawPhone" (from _completePhone: "$_completePhone")');
final success = await PhoneAuthHelper.sendOtp(rawPhone);
if (success && mounted) {
Get.to(() => OtpVerificationScreen(phoneNumber: rawPhone));
@@ -316,7 +315,7 @@ class _PhoneNumberScreenState extends State<PhoneNumberScreen> {
@override
Widget build(BuildContext context) {
return AuthScreen(
title: 'welcome to intaleq'.tr,
title: 'welcome to siro'.tr,
subtitle: 'login or register subtitle'.tr,
form: Form(
key: _formKey,
@@ -416,7 +415,8 @@ class _OtpVerificationScreenState extends State<OtpVerificationScreen> {
void _submit() async {
if (_formKey.currentState!.validate()) {
setState(() => _isLoading = true);
await PhoneAuthHelper.verifyOtp(widget.phoneNumber, _otpController.text.trim());
await PhoneAuthHelper.verifyOtp(
widget.phoneNumber, _otpController.text.trim());
if (mounted) setState(() => _isLoading = false);
}
}

View File

@@ -354,7 +354,7 @@ class RegistrationView extends StatelessWidget {
// STEP 3
Widget _buildDocumentUploadStep(BuildContext ctx, RegistrationController c) {
final String linkUpload =
'https://syria.intaleq.xyz/intaleq/auth/syria/uploadImage.php';
'https://syria.intaleq.xyz/siro/auth/syria/uploadImage.php';
return GetBuilder<RegistrationController>(
builder: (ctrl) => SingleChildScrollView(

View File

@@ -26,7 +26,7 @@ class AboutPage extends StatelessWidget {
Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
'Intaleq LLC\n${'Syria'.tr}',
'Siro LLC\n${'Syria'.tr}',
style: AppStyle.headTitle2,
textAlign: TextAlign.center,
),
@@ -34,7 +34,7 @@ class AboutPage extends StatelessWidget {
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Text(
'Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:'
'Siro is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:'
.tr,
style: AppStyle.title,
textAlign: TextAlign.center,

View File

@@ -28,7 +28,7 @@ class FrequentlyQuestionsPage extends StatelessWidget {
),
children: [
Text(
'Step-by-step instructions on how to request a ride through the Intaleq app.'
'Step-by-step instructions on how to request a ride through the Siro app.'
.tr,
style: AppStyle.title,
),
@@ -43,7 +43,7 @@ class FrequentlyQuestionsPage extends StatelessWidget {
),
children: [
Text(
'Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.'
'Siro offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.'
.tr,
style: AppStyle.title,
),
@@ -58,7 +58,7 @@ class FrequentlyQuestionsPage extends StatelessWidget {
),
children: [
Text(
'Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.'
'Siro offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.'
.tr,
style: AppStyle.title,
),
@@ -73,7 +73,7 @@ class FrequentlyQuestionsPage extends StatelessWidget {
),
children: [
Text(
'Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.'
'Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Siro cancellation policy for details.'
.tr,
style: AppStyle.title,
),
@@ -98,7 +98,7 @@ class FrequentlyQuestionsPage extends StatelessWidget {
});
},
child: Text(
'Visit our website or contact Intaleq support for information on driver registration and requirements.'
'Visit our website or contact Siro support for information on driver registration and requirements.'
.tr,
style: AppStyle.title,
),
@@ -115,22 +115,22 @@ class FrequentlyQuestionsPage extends StatelessWidget {
),
children: [
Text(
'Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.'
'Siro provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.'
.tr,
style: AppStyle.title,
),
],
),
// Question 8: What safety measures does Intaleq offer?
// Question 8: What safety measures does Siro offer?
ExpansionTile(
title: Text(
'What safety measures does Intaleq offer?'.tr,
'What safety measures does Siro offer?'.tr,
style: AppStyle.title,
),
children: [
Text(
'Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.'
'Siro prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.'
.tr,
style: AppStyle.title,
),

View File

@@ -43,13 +43,13 @@ class UsingAppPage extends StatelessWidget {
question: "What is the feature of our wallet?".tr,
icon: Icons.account_balance_wallet_outlined,
answer: Text(
'''Intaleq Wallet Features:
'''Siro Wallet Features:
- Transfer money multiple times.
- Transfer to anyone.
- Make purchases.
- Charge your account.
- Charge a friend's Intaleq account.
- Charge a friend's Siro account.
- Store your money with us and receive it in your bank as a monthly salary.'''
.tr,
style:
@@ -57,10 +57,10 @@ class UsingAppPage extends StatelessWidget {
),
),
FaqItem(
question: "What is Types of Trips in Intaleq?".tr,
question: "What is Types of Trips in Siro?".tr,
icon: Icons.map_outlined,
answer: Text(
'''Types of Trips in Intaleq:
'''Types of Trips in Siro:
- Comfort: For cars newer than 2017 with air conditioning.
- Lady: For girl drivers.

View File

@@ -211,8 +211,12 @@ class _HistoryDetailsPageState extends State<HistoryDetailsPage> {
: endLocation.longitude,
),
);
mapController.animateCamera(
CameraUpdate.newLatLngBounds(bounds, left: 60, top: 60, right: 60, bottom: 60));
mapController.animateCamera(CameraUpdate.newLatLngBounds(
bounds,
left: 60,
top: 60,
right: 60,
bottom: 60));
}
},
),

View File

@@ -315,7 +315,7 @@ class UserHeader extends StatelessWidget {
shadows: [Shadow(blurRadius: 2, color: Colors.black26)]),
),
accountEmail:
box.read(BoxName.emailDriver).toString().contains('intaleqapp')
box.read(BoxName.emailDriver).toString().contains('siroapp')
? Text('Your email not updated yet'.tr)
: Text(box.read(BoxName.emailDriver)),
currentAccountPicture: GetBuilder<ImageController>(

View File

@@ -313,8 +313,9 @@ class _MapView extends StatelessWidget {
: loc.myLocation,
zoom: 15,
),
mapType:
s.isMapDarkMode ? IntaleqMapType.normal : IntaleqMapType.light,
mapType: s.isMapDarkMode
? IntaleqMapType.normal
: IntaleqMapType.light,
polygons: ctrl.heatmapPolygons,
markers: {
Marker(

View File

@@ -47,4 +47,3 @@ class OsmMapView extends StatelessWidget {
});
}
}

View File

@@ -127,7 +127,7 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
} else {
final left = 2 - now.difference(lastTime).inMinutes;
NotificationController().showNotification(
'Intaleq Driver'.tr,
'Siro Driver'.tr,
'${'Please wait'.tr} $left ${"minutes before trying again.".tr}',
'ding',
'',

View File

@@ -37,7 +37,8 @@ class GoogleDriverMap extends StatelessWidget {
: IntaleqMapType.light,
zoomControlsEnabled: false,
initialCameraPosition: CameraPosition(
target: controller.smoothedLocation ?? locationController.myLocation,
target:
controller.smoothedLocation ?? locationController.myLocation,
zoom: 17,
bearing: controller.smoothedHeading,
tilt: 60,
@@ -67,6 +68,15 @@ class GoogleDriverMap extends StatelessWidget {
position: controller.latLngPassengerLocation,
icon: controller.startIcon,
),
if (!controller.isRideStarted &&
controller.upcomingPathPoints.isNotEmpty &&
controller.walkIcon != null)
Marker(
markerId: const MarkerId('walk_end_marker'),
position: controller.upcomingPathPoints.last,
icon: controller.walkIcon!,
anchor: const Offset(0.5, 0.5),
),
if (controller.latLngPassengerDestination.latitude != 0 ||
controller.latLngPassengerDestination.longitude != 0)
Marker(

View File

@@ -139,4 +139,42 @@ class MarkerGenerator {
await image.toByteData(format: ui.ImageByteFormat.png);
return InlqBitmap.fromBytes(data!.buffer.asUint8List());
}
// دالة لرسم ماركر المشي
static Future<InlqBitmap> createWalkMarker() async {
final ui.PictureRecorder pictureRecorder = ui.PictureRecorder();
final Canvas canvas = Canvas(pictureRecorder);
const double size = 60.0;
final Paint paint = Paint()..color = const Color(0xFF0288D1);
final Paint borderPaint = Paint()
..color = Colors.white
..style = PaintingStyle.stroke
..strokeWidth = 3.0;
canvas.drawCircle(const Offset(size / 2, size / 2), size / 2.5, paint);
canvas.drawCircle(const Offset(size / 2, size / 2), size / 2.5, borderPaint);
TextPainter iconPainter = TextPainter(textDirection: TextDirection.ltr);
iconPainter.text = TextSpan(
text: String.fromCharCode(Icons.directions_walk.codePoint),
style: TextStyle(
fontSize: 30.0,
fontFamily: Icons.directions_walk.fontFamily,
color: Colors.white,
),
);
iconPainter.layout();
iconPainter.paint(
canvas,
Offset((size - iconPainter.width) / 2, (size - iconPainter.height) / 2),
);
final ui.Image image = await pictureRecorder
.endRecording()
.toImage(size.toInt(), size.toInt());
final ByteData? data =
await image.toByteData(format: ui.ImageByteFormat.png);
return InlqBitmap.fromBytes(data!.buffer.asUint8List());
}
}

View File

@@ -96,7 +96,7 @@ class CardSeferWalletDriver extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'رصيد انطلق',
'رصيد سيرو',
style: AppStyle.headTitle.copyWith(
fontFamily: 'Amiri', // خط يوحي بالفخامة
color: Colors.white,

View File

@@ -199,7 +199,7 @@ class ComplaintPage extends StatelessWidget {
leading: const Icon(
Icons.support_agent_outlined,
color: AppColor.primaryColor),
title: Text("Intaleq's Response".tr,
title: Text("Siro's Response".tr,
style: AppStyle.title),
subtitle: Text(
controller.driverReport?['body']

View File

@@ -259,7 +259,7 @@ void showShamCashInput() {
child: TextField(
controller: nameController,
decoration: InputDecoration(
hintText: "مثال: intaleq",
hintText: "مثال: siro",
hintStyle: TextStyle(color: Colors.grey[400], fontSize: 13),
border: InputBorder.none,
prefixIcon: const Icon(Icons.person_outline_rounded,
@@ -461,7 +461,7 @@ class PersonalInfoCard extends StatelessWidget {
label: 'Phone Number'.tr,
value: data['phone'] ?? ''),
if (data['email'] != null &&
data['email'].toString().contains('intaleqapp')) ...[
data['email'].toString().contains('siroapp')) ...[
TextFormField(
controller: controller.emailController,
keyboardType:

View File

@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import '../../constant/colors.dart';
import '../../main.dart';
// ─────────────────────────────────────────────────────────────────────────────
// Snackbar variant definition
@@ -253,6 +254,23 @@ SnackbarController _show(_SnackVariant variant, String message) {
HapticFeedback.selectionClick();
}
final BuildContext? context = Get.context ?? navigatorKey.currentContext;
if (context != null) {
final overlay = Overlay.maybeOf(context);
if (overlay == null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
backgroundColor: Colors.transparent,
elevation: 0,
padding: EdgeInsets.zero,
content: _SnackContent(message: message, variant: variant),
duration: const Duration(seconds: 4),
),
);
return SnackbarController(GetSnackBar(title: '', message: ''));
}
}
return Get.snackbar(
'',
'',
@@ -261,7 +279,6 @@ SnackbarController _show(_SnackVariant variant, String message) {
margin: EdgeInsets.zero,
padding: EdgeInsets.zero,
duration: const Duration(seconds: 4),
animationDuration: const Duration(milliseconds: 380),
barBlur: 0,
overlayBlur: 0,
overlayColor: Colors.transparent,