25-7-26-1

This commit is contained in:
Hamza-Ayed
2025-07-26 10:30:10 +03:00
parent 83fa8c776c
commit 3742d5b417
645 changed files with 134317 additions and 0 deletions

146
lib/models/db_sql.dart Normal file
View File

@@ -0,0 +1,146 @@
import 'package:Intaleq/constant/table_names.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DbSql {
static final DbSql instance = DbSql._();
static Database? _database;
DbSql._();
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDatabase();
return _database!;
}
Future<Database> _initDatabase() async {
String path = join(await getDatabasesPath(), 'my_database.db');
return await openDatabase(
path,
version: 1,
onCreate: (db, version) async {
await db.execute('''
CREATE TABLE IF NOT EXISTS ${TableName.carLocations}(
id INTEGER PRIMARY KEY AUTOINCREMENT,
driver_id TEXT,
latitude REAL,
longitude REAL,
created_at TEXT,
updated_at TEXT
)
''');
await db.execute('''
CREATE TABLE IF NOT EXISTS ${TableName.placesFavorite}(
id INTEGER PRIMARY KEY AUTOINCREMENT,
latitude REAL,
longitude REAL,
name TEXT UNIQUE,
rate TEXT,
createdAt TEXT
)
''');
// await db.execute('DROP TABLE IF EXISTS ${TableName.recentLocations}');
await db.execute('''
CREATE TABLE ${TableName.recentLocations}(
id INTEGER PRIMARY KEY AUTOINCREMENT,
latitude REAL,
longitude REAL,
name TEXT,
rate TEXT,
createdAt TEXT
)
''');
await db.execute('''
CREATE TABLE IF NOT EXISTS ${TableName.driverOrdersRefuse}(
id INTEGER PRIMARY KEY AUTOINCREMENT,
order_id TEXT UNIQUE,
created_at TEXT,
driver_id TEXT
)
''');
await db.execute('''
CREATE TABLE IF NOT EXISTS ${TableName.rideLocation}(
id INTEGER PRIMARY KEY AUTOINCREMENT,
order_id TEXT ,
created_at TEXT,
lat TEXT,
lng TEXT
)
''');
await db.execute('''
CREATE TABLE IF NOT EXISTS ${TableName.faceDetectTimes}(
id INTEGER PRIMARY KEY AUTOINCREMENT,
faceDetectTimes INTEGER
)
''');
await db.execute('''
CREATE TABLE IF NOT EXISTS ${TableName.captainNotification}(
id INTEGER PRIMARY KEY AUTOINCREMENT,
faceDetectTimes INTEGER
)
''');
},
);
}
Future<List<Map<String, dynamic>>> getAllData(String table) async {
Database db = await instance.database;
return await db.query(table);
}
Future<List<Map<String, dynamic>>> getCustomQuery(String query) async {
Database db = await instance.database;
return await db.rawQuery(query);
}
Future<int> insertData(Map<String, dynamic> map, String table) async {
Database db = await instance.database;
return await db.insert(table, map);
}
Future<int> insertMapLocation(Map<String, dynamic> map, String table) async {
Database db = await instance.database;
// Check if the record already exists (based on latitude, longitude, and name)
var existing = await db.query(
table,
where: 'latitude = ? AND longitude = ? AND name = ?',
whereArgs: [map['latitude'], map['longitude'], map['name']],
);
if (existing.isNotEmpty) {
// If record exists, update the createdAt field with the current timestamp
var updatedMap = Map<String, dynamic>.from(map);
updatedMap['createdAt'] =
DateTime.now().toIso8601String(); // Update timestamp
return await db.update(
table,
updatedMap,
where: 'id = ?',
whereArgs: [existing.first['id']], // Update the existing row
);
} else {
// If record doesn't exist, insert new record with the current timestamp
map['createdAt'] = DateTime.now().toIso8601String();
return await db.insert(table, map);
}
}
Future<int> updateData(Map<String, dynamic> map, String table, int id) async {
Database db = await instance.database;
return await db.update(table, map, where: 'id = ?', whereArgs: [id]);
}
Future<int> deleteData(String table, int id) async {
Database db = await instance.database;
return await db.delete(table, where: 'id = ?', whereArgs: [id]);
}
Future<int> deleteAllData(String table) async {
Database db = await instance.database;
return await db.delete(table);
}
}

View File

@@ -0,0 +1,21 @@
class MonthlyDataModel {
final int year;
final int month;
final int day;
final int ridesCount;
MonthlyDataModel({
required this.year,
required this.month,
required this.day,
required this.ridesCount,
});
factory MonthlyDataModel.fromJson(Map<String, dynamic> json) =>
MonthlyDataModel(
year: json['year'] as int,
month: json['month'] as int,
day: json['day'] as int,
ridesCount: json['rides_count'] as int,
);
}

View File

@@ -0,0 +1,79 @@
class Passenger {
String id;
String phone;
String email;
String gender;
String status;
String birthdate;
String site;
String firstName;
String lastName;
String sosPhone;
String education;
String employmentType;
String maritalStatus;
String createdAt;
String updatedAt;
int countPassenger;
int countFeedback;
double ratingPassenger;
int countDriverRate;
int countPassengerCancel;
double passengerAverageRating;
int countPassengerRate;
int countPassengerRide;
Passenger({
required this.id,
required this.phone,
required this.email,
required this.gender,
required this.status,
required this.birthdate,
required this.site,
required this.firstName,
required this.lastName,
required this.sosPhone,
required this.education,
required this.employmentType,
required this.maritalStatus,
required this.createdAt,
required this.updatedAt,
required this.countPassenger,
required this.countFeedback,
required this.ratingPassenger,
required this.countDriverRate,
required this.countPassengerCancel,
required this.passengerAverageRating,
required this.countPassengerRate,
required this.countPassengerRide,
});
factory Passenger.fromJson(Map<String, dynamic> json) {
return Passenger(
id: json['id'],
phone: json['phone'],
email: json['email'],
gender: json['gender'],
status: json['status'],
birthdate: json['birthdate'],
site: json['site'],
firstName: json['first_name'],
lastName: json['last_name'],
sosPhone: json['sosPhone'],
education: json['education'],
employmentType: json['employmentType'],
maritalStatus: json['maritalStatus'],
createdAt: json['created_at'],
updatedAt: json['updated_at'],
countPassenger: json['countPassenger'],
countFeedback: json['countFeedback'],
ratingPassenger: json['ratingPassenger'].toDouble(),
countDriverRate: json['countDriverRate'],
countPassengerCancel: json['countPassengerCancel'],
passengerAverageRating: json['passengerAverageRating'].toDouble(),
countPassengerRate: json['countPassengerRate'],
countPassengerRide: json['countPassengerRide'],
);
}
}

View File

@@ -0,0 +1,12 @@
class MonthlyDataModel {
int day;
int totalDuration;
MonthlyDataModel({required this.day, required this.totalDuration});
factory MonthlyDataModel.fromJson(Map<String, dynamic> json) =>
MonthlyDataModel(
day: int.parse(json['day'].toString().split('-')[2]),
totalDuration:
int.parse(json['total_duration'].toString().split(':')[0]));
}

View File

@@ -0,0 +1,34 @@
class CarLocationModel {
String id;
String driverId;
double latitude;
double heading;
double speed;
double longitude;
DateTime createdAt;
DateTime updatedAt;
CarLocationModel({
required this.id,
required this.driverId,
required this.latitude,
required this.longitude,
required this.heading,
required this.speed,
required this.createdAt,
required this.updatedAt,
});
factory CarLocationModel.fromJson(Map<String, dynamic> json) {
return CarLocationModel(
id: json['id'],
driverId: json['driver_id'],
latitude: double.parse(json['latitude'].toString()),
longitude: double.parse(json['longitude'].toString()),
heading: double.parse(json['heading'].toString()),
speed: double.parse(json['speed'].toString()),
createdAt: DateTime.parse(json['created_at']),
updatedAt: DateTime.parse(json['updated_at']),
);
}
}

View File

@@ -0,0 +1,30 @@
import 'package:get/get.dart';
List<OnBoardingModel> onBoardingList = [
OnBoardingModel(
title: 'Welcome to Intaleq!'.tr,
image: 'assets/images/on1.png',
body:
'Intaleq is the ride-hailing app that is safe, reliable, and accessible.'
.tr,
),
OnBoardingModel(
title: 'Get to your destination quickly and easily.'.tr,
image: 'assets/images/on2.png',
body: 'With Intaleq, you can get a ride to your destination in minutes.'.tr,
),
OnBoardingModel(
title: 'Enjoy a safe and comfortable ride.'.tr,
image: 'assets/images/on3.png',
body:
'Intaleq is committed to safety, and all of our captains are carefully screened and background checked.'
.tr,
),
];
class OnBoardingModel {
final String? title;
final String? image;
final String? body;
OnBoardingModel({this.body, this.title, this.image});
}

View File

@@ -0,0 +1,272 @@
import 'dart:math' as math;
import 'package:Intaleq/constant/box_name.dart';
import 'package:Intaleq/main.dart';
import 'package:Intaleq/splash_screen_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
class CouponPainter extends CustomPainter {
final Color primaryColor;
final Color secondaryColor;
CouponPainter({
required this.primaryColor,
required this.secondaryColor,
});
@override
void paint(Canvas canvas, Size size) {
final Paint primaryPaint = Paint()
..color = primaryColor
..style = PaintingStyle.fill; //
final Paint secondaryPaint = Paint()
..color = secondaryColor
..style = PaintingStyle.fill;
final Path path = Path();
// Draw the main ticket shape
path.moveTo(0, size.height * 0.1);
path.lineTo(size.width * 0.93, size.height * 0.1);
path.arcToPoint(
Offset(size.width, size.height * 0.2),
radius: const Radius.circular(20),
clockwise: false,
);
path.lineTo(size.width, size.height * 0.8);
path.arcToPoint(
Offset(size.width * 0.93, size.height * 0.9),
radius: const Radius.circular(20),
clockwise: false,
);
path.lineTo(0, size.height * 0.9);
path.close();
canvas.drawPath(path, primaryPaint);
// Draw decorative circles on the left side
for (int i = 0; i < 5; i++) {
canvas.drawCircle(
Offset(0, size.height * (0.2 + i * 0.15)),
10,
secondaryPaint,
);
}
// Draw a wavy pattern on the right side
final wavePaint = Paint()
..color = secondaryColor.withOpacity(0.3)
..style = PaintingStyle.stroke
..strokeWidth = 2;
for (int i = 0; i < 20; i++) {
canvas.drawLine(
Offset(size.width * 0.8, i * 10.0),
Offset(
size.width,
i * 10.0 + math.sin(i * 0.5) * 10,
),
wavePaint,
);
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => false;
}
class PromoBanner extends StatelessWidget {
final String promoCode;
final String discountPercentage;
final String validity;
const PromoBanner({
Key? key,
required this.promoCode,
required this.discountPercentage,
required this.validity,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return CustomPaint(
painter: CouponPainter(
primaryColor: Colors.blue[800]!,
secondaryColor: Colors.white,
),
child: Container(
width: 320,
height: 240,
padding: const EdgeInsets.all(16),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
const SizedBox(
height: 10,
),
Text(
'Enter the promo code and get'.tr,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.white,
),
textAlign: TextAlign.center,
),
Text(
'${'DISCOUNT'.tr} $discountPercentage ${'for'.tr} $validity'
.toUpperCase(),
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white,
),
textAlign: TextAlign.center,
),
const SizedBox(height: 10),
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
blurRadius: 4,
offset: const Offset(0, 2),
),
],
),
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
child: Text(
promoCode,
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: Colors.blue[800],
),
),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: () {
// Copy promo code to clipboard
Clipboard.setData(ClipboardData(text: promoCode));
// Show a Snackbar or other feedback to the user
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Promo code copied to clipboard!'.tr)),
);
box.write(BoxName.isGiftToken, '1');
box.write(BoxName.isFirstTime, '1');
Get.back();
},
style: ElevatedButton.styleFrom(
foregroundColor: Colors.blue[800], // Customize the color
backgroundColor: Colors.white, // Customize the background color
),
child: Text('Copy Code'.tr),
)
],
),
),
);
}
}
// import 'package:Intaleq/constant/colors.dart';
// import 'package:flutter/cupertino.dart';
// import 'package:flutter/material.dart';
// class CouponPainter extends CustomPainter {
// @override
// void paint(Canvas canvas, Size size) {
// final Paint paint = Paint()
// ..color = AppColor.blueColor
// ..style = PaintingStyle.fill;
// final Path path = Path();
// // Draw the ticket shape (like the image)
// path.moveTo(0, 0);
// path.lineTo(size.width * 0.7, 0); // top left to top right edge
// // Draw curve for the cut on the right side (ticket look)
// path.arcToPoint(Offset(size.width, size.height * 0.15),
// radius: const Radius.circular(15), clockwise: false);
// path.lineTo(size.width, size.height * 0.85);
// path.arcToPoint(Offset(size.width * 0.7, size.height),
// radius: const Radius.circular(15), clockwise: false);
// path.lineTo(0, size.height);
// canvas.drawPath(path, paint);
// }
// @override
// bool shouldRepaint(CustomPainter oldDelegate) {
// return false;
// }
// }
// class PromoBanner extends StatelessWidget {
// final String promoCode;
// final String discountPercentage;
// final String validity;
// const PromoBanner({
// required this.promoCode,
// required this.discountPercentage,
// required this.validity,
// });
// @override
// Widget build(BuildContext context) {
// return CustomPaint(
// painter: CouponPainter(),
// child: Container(
// width: 300, // Fixed width for the promo banner
// height: 180, // Set the desired height for your banner
// padding: const EdgeInsets.all(16),
// child: Column(
// mainAxisAlignment: MainAxisAlignment.spaceAround,
// children: [
// Text(
// 'Enter the promo code and get'.toUpperCase(),
// style: const TextStyle(
// fontSize: 16,
// fontWeight: FontWeight.bold,
// color: Colors.white,
// ),
// textAlign: TextAlign.center,
// ),
// Text(
// '$discountPercentage OFF for $validity'.toUpperCase(),
// style: const TextStyle(
// fontSize: 18,
// fontWeight: FontWeight.bold,
// color: Colors.white,
// ),
// textAlign: TextAlign.center,
// ),
// const SizedBox(height: 10),
// Container(
// decoration: BoxDecoration(
// color: Colors.white,
// borderRadius: BorderRadius.circular(10),
// ),
// padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
// child: Text(
// promoCode,
// style: TextStyle(
// fontSize: 20,
// fontWeight: FontWeight.bold,
// color: Colors.blue[800],
// ),
// ),
// ),
// ],
// ),
// ),
// );
// }
// }