11/1/6
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -3,12 +3,9 @@ import 'package:get/get.dart';
|
|||||||
import 'package:ride/constant/box_name.dart';
|
import 'package:ride/constant/box_name.dart';
|
||||||
import 'package:ride/main.dart';
|
import 'package:ride/main.dart';
|
||||||
import 'package:ride/views/auth/login_page.dart';
|
import 'package:ride/views/auth/login_page.dart';
|
||||||
import 'package:ride/views/home/home_page.dart';
|
|
||||||
|
|
||||||
import '../../models/model/onboarding_model.dart';
|
import '../../models/model/onboarding_model.dart';
|
||||||
|
|
||||||
class OnboardingController extends GetxController {}
|
|
||||||
|
|
||||||
abstract class OnBoardingController extends GetxController {
|
abstract class OnBoardingController extends GetxController {
|
||||||
next();
|
next();
|
||||||
onPageChanged(int index);
|
onPageChanged(int index);
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:flutter_tesseract_ocr/flutter_tesseract_ocr.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_tesseract_ocr/android_ios.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';
|
import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
@@ -44,11 +47,11 @@ class TextExtractionController extends GetxController {
|
|||||||
|
|
||||||
Future<void> pickAndExtractText() async {
|
Future<void> pickAndExtractText() async {
|
||||||
final pickedImage = await ImagePicker().pickImage(
|
final pickedImage = await ImagePicker().pickImage(
|
||||||
source: ImageSource.gallery,
|
source: ImageSource.camera,
|
||||||
// preferredCameraDevice: CameraDevice.rear,
|
preferredCameraDevice: CameraDevice.rear,
|
||||||
// maxHeight: Get.height * .7,
|
maxHeight: Get.height * .3,
|
||||||
// maxWidth: Get.width * .9,
|
maxWidth: Get.width * .8,
|
||||||
// imageQuality: 99,
|
imageQuality: 99,
|
||||||
);
|
);
|
||||||
if (pickedImage != null) {
|
if (pickedImage != null) {
|
||||||
isloading = true;
|
isloading = true;
|
||||||
@@ -103,13 +106,142 @@ class TextMLGoogleRecognizerController extends GetxController {
|
|||||||
|
|
||||||
// The scanned text
|
// The scanned text
|
||||||
String? scannedText;
|
String? scannedText;
|
||||||
|
String? jsonOutput;
|
||||||
|
final List<Map<String, dynamic>> lines = [];
|
||||||
|
|
||||||
|
Map decode = {};
|
||||||
|
|
||||||
|
Future<void> scanText() async {
|
||||||
|
// Pick an image from the camera or gallery
|
||||||
|
final XFile? image =
|
||||||
|
await _imagePicker.pickImage(source: ImageSource.gallery);
|
||||||
|
|
||||||
|
// If no image was picked, return
|
||||||
|
if (image == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert the XFile object to an InputImage object
|
||||||
|
final InputImage inputImage = InputImage.fromFile(File(image.path));
|
||||||
|
|
||||||
|
// Recognize the text in the image
|
||||||
|
final RecognizedText recognizedText =
|
||||||
|
await _textRecognizer.processImage(inputImage);
|
||||||
|
scannedText = recognizedText.text;
|
||||||
|
Map extractedData = {};
|
||||||
|
// Extract the scanned text line by line
|
||||||
|
for (var i = 0; i < recognizedText.blocks.length; i++) {
|
||||||
|
final block = recognizedText.blocks[i];
|
||||||
|
for (final line in block.lines) {
|
||||||
|
final lineText = line.text;
|
||||||
|
|
||||||
|
if (lineText.contains('DL')) {
|
||||||
|
final dlNumber = lineText.split('DL')[1].trim();
|
||||||
|
extractedData['dl_number'] = dlNumber;
|
||||||
|
}
|
||||||
|
if (lineText.contains('USA')) {
|
||||||
|
final usa = lineText.split('USA')[1].trim();
|
||||||
|
extractedData['USA'] = usa;
|
||||||
|
}
|
||||||
|
if (lineText.contains('DRIVER LICENSE')) {
|
||||||
|
final driverl = lineText;
|
||||||
|
extractedData['DRIVER_LICENSE'] = driverl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineText.contains('EXP')) {
|
||||||
|
final expiryDate = lineText.split('EXP')[1].trim();
|
||||||
|
extractedData['expiry_date'] = expiryDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineText.contains('DOB')) {
|
||||||
|
final dob = lineText.split('DOB')[1].trim();
|
||||||
|
extractedData['dob'] = dob;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineText.contains("LN")) {
|
||||||
|
if ((lineText.indexOf("LN") == 0)) {
|
||||||
|
final lastName = lineText.split('LN')[1].trim();
|
||||||
|
extractedData['lastName'] = lastName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lineText.contains("FN")) {
|
||||||
|
final firstName = lineText.split('FN')[1].trim();
|
||||||
|
extractedData['firstName'] = firstName;
|
||||||
|
}
|
||||||
|
if (lineText.contains("RSTR")) {
|
||||||
|
final rstr = lineText.split('RSTR')[1].trim();
|
||||||
|
extractedData['rstr'] = rstr;
|
||||||
|
}
|
||||||
|
if (lineText.contains("CLASS")) {
|
||||||
|
final class1 = lineText.split('CLASS')[1].trim();
|
||||||
|
extractedData['class'] = class1;
|
||||||
|
}
|
||||||
|
if (lineText.contains("END")) {
|
||||||
|
final end = lineText.split('END')[1].trim();
|
||||||
|
extractedData['end'] = end;
|
||||||
|
}
|
||||||
|
if (lineText.contains("DD")) {
|
||||||
|
final dd = lineText.split('DD')[1].trim();
|
||||||
|
extractedData['dd'] = dd;
|
||||||
|
}
|
||||||
|
if (lineText.contains("EYES")) {
|
||||||
|
final eyes = lineText.split('EYES')[1].trim();
|
||||||
|
extractedData['eyes'] = eyes;
|
||||||
|
}
|
||||||
|
if (lineText.contains("SEX")) {
|
||||||
|
final parts = lineText.split("SEX ")[1];
|
||||||
|
extractedData['sex'] = parts[0];
|
||||||
|
}
|
||||||
|
if (lineText.contains("HAIR")) {
|
||||||
|
final hair = lineText.split('HAIR')[1].trim();
|
||||||
|
extractedData['hair'] = hair;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineText.contains('STREET') || lineText.contains(',')) {
|
||||||
|
final address = lineText;
|
||||||
|
extractedData['address'] = address;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Repeat this process for other relevant data fields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert the list of lines to a JSON string
|
||||||
|
jsonOutput = jsonEncode(extractedData);
|
||||||
|
decode = jsonDecode(jsonOutput!);
|
||||||
|
|
||||||
|
update();
|
||||||
|
print('jsonOutput------------------------------');
|
||||||
|
print(scannedText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PassportRecognizerController extends GetxController {
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
scanText();
|
||||||
|
super.onInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ImagePicker instance
|
||||||
|
final ImagePicker _imagePicker = ImagePicker();
|
||||||
|
Map extractedData = {};
|
||||||
|
|
||||||
|
// The GoogleMlKit TextRecognizer instance
|
||||||
|
final TextRecognizer _textRecognizer = TextRecognizer();
|
||||||
|
|
||||||
|
// The scanned text
|
||||||
|
String? scannedText;
|
||||||
|
String? jsonOutput;
|
||||||
|
final List<Map<String, dynamic>> lines = [];
|
||||||
|
|
||||||
|
Map decode = {};
|
||||||
// Picks an image from the camera or gallery and extracts the text
|
// Picks an image from the camera or gallery and extracts the text
|
||||||
|
|
||||||
Future<void> scanText() async {
|
Future<void> scanText() async {
|
||||||
// Pick an image from the camera or gallery
|
// Pick an image from the camera or gallery
|
||||||
final XFile? image =
|
final XFile? image =
|
||||||
await _imagePicker.pickImage(source: ImageSource.camera);
|
await _imagePicker.pickImage(source: ImageSource.gallery);
|
||||||
|
|
||||||
// If no image was picked, return
|
// If no image was picked, return
|
||||||
if (image == null) {
|
if (image == null) {
|
||||||
@@ -127,15 +259,181 @@ class TextMLGoogleRecognizerController extends GetxController {
|
|||||||
final List<Map<String, dynamic>> lines = [];
|
final List<Map<String, dynamic>> lines = [];
|
||||||
for (var i = 0; i < recognizedText.blocks.length; i++) {
|
for (var i = 0; i < recognizedText.blocks.length; i++) {
|
||||||
lines.add({
|
lines.add({
|
||||||
'line_number': i,
|
i.toString() +
|
||||||
'text': recognizedText.blocks[i].text,
|
'_' +
|
||||||
|
recognizedText.blocks[i].text.toString().split('\n')[0]:
|
||||||
|
recognizedText.blocks[i].text,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// for (var i = 0; i < recognizedText.blocks.length; i++) {
|
||||||
|
// final block = recognizedText.blocks[i];
|
||||||
|
for (final line in lines) {
|
||||||
|
final key = line.keys.first;
|
||||||
|
final value = line.values.first;
|
||||||
|
if (line.values.contains('UNITED STATES OF')) {
|
||||||
|
final title = line;
|
||||||
|
extractedData['title'] = title;
|
||||||
|
}
|
||||||
|
if (line.values.contains('PASSPORT CARD')) {
|
||||||
|
final passport = line;
|
||||||
|
extractedData['passport'] = passport;
|
||||||
|
}
|
||||||
|
if (key == "7_Surname") {
|
||||||
|
final nextItem = lines[lines.indexOf(line) + 1];
|
||||||
|
extractedData['surname'] = nextItem.values.first;
|
||||||
|
}
|
||||||
|
if (key == "6_Nationality") {
|
||||||
|
var nationality = value.split('\n')[1];
|
||||||
|
extractedData['nationality'] = nationality;
|
||||||
|
}
|
||||||
|
if (key.contains('CARD')) {
|
||||||
|
var passportCard = value;
|
||||||
|
extractedData['passportCard'] = passportCard;
|
||||||
|
}
|
||||||
|
if (key.contains("9_Given")) {
|
||||||
|
var givenNames = value.split('\n')[1];
|
||||||
|
extractedData['givenNames'] = givenNames;
|
||||||
|
}
|
||||||
|
if (key.contains("13_Date of Birth")) {
|
||||||
|
final parts = value.split('\n');
|
||||||
|
if (parts.length > 1) {
|
||||||
|
var dateOfBirth = parts[1];
|
||||||
|
extractedData['dateOfBirth'] = dateOfBirth;
|
||||||
|
|
||||||
|
var sex = parts[0].split(' ')[1];
|
||||||
|
extractedData['sex'] = sex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
// Convert the list of lines to a JSON string
|
// Convert the list of lines to a JSON string
|
||||||
final String jsonOutput = jsonEncode(lines);
|
jsonOutput = jsonEncode(extractedData);
|
||||||
|
decode = jsonDecode(jsonOutput!);
|
||||||
|
|
||||||
update();
|
update();
|
||||||
// Print the JSON output
|
print('jsonOutput------------------------------');
|
||||||
print(jsonOutput);
|
print(decode);
|
||||||
|
// print(jsonEncode(lines));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PassportDataExtractor extends GetxController {
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
extractPassportData();
|
||||||
|
super.onInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
final ImagePicker _imagePicker = ImagePicker();
|
||||||
|
late final XFile? image;
|
||||||
|
final TextRecognizer _textRecognizer = TextRecognizer();
|
||||||
|
|
||||||
|
Future<Map<String, dynamic>> extractPassportData() async {
|
||||||
|
image = await _imagePicker.pickImage(source: ImageSource.gallery);
|
||||||
|
update();
|
||||||
|
if (image == null) {
|
||||||
|
throw Exception('No image picked');
|
||||||
|
}
|
||||||
|
|
||||||
|
final InputImage inputImage = InputImage.fromFile(File(image!.path));
|
||||||
|
final RecognizedText recognisedText =
|
||||||
|
await _textRecognizer.processImage(inputImage);
|
||||||
|
|
||||||
|
final Map<String, dynamic> extractedData = {};
|
||||||
|
final List<Map<String, dynamic>> extractedTextWithCoordinates = [];
|
||||||
|
|
||||||
|
for (TextBlock block in recognisedText.blocks) {
|
||||||
|
for (TextLine line in block.lines) {
|
||||||
|
final String lineText = line.text;
|
||||||
|
final Rect lineBoundingBox = line.boundingBox!;
|
||||||
|
|
||||||
|
extractedTextWithCoordinates.add({
|
||||||
|
'text': lineText,
|
||||||
|
'boundingBox': {
|
||||||
|
'left': lineBoundingBox.left,
|
||||||
|
'top': lineBoundingBox.top,
|
||||||
|
'width': lineBoundingBox.width,
|
||||||
|
'height': lineBoundingBox.height,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// if (lineText.contains('Passport Number')) {
|
||||||
|
// final String passportNumber =
|
||||||
|
// lineText.split('Passport Number')[1].trim();
|
||||||
|
// extractedData['passportNumber'] = passportNumber;
|
||||||
|
// }
|
||||||
|
// if (lineText.contains('Given Names')) {
|
||||||
|
// final String givenNames = lineText.split('Given Names')[1].trim();
|
||||||
|
// extractedData['givenNames'] = givenNames;
|
||||||
|
// }
|
||||||
|
// if (lineText.contains('Surname')) {
|
||||||
|
// final String surname = lineText.split('Surname')[1].trim();
|
||||||
|
// extractedData['surname'] = surname;
|
||||||
|
// }
|
||||||
|
// if (lineText.contains('Nationality')) {
|
||||||
|
// final String nationality = lineText.split('Nationality')[1].trim();
|
||||||
|
// extractedData['nationality'] = nationality;
|
||||||
|
// }
|
||||||
|
// if (lineText.contains('Date of Birth')) {
|
||||||
|
// final String dob = lineText.split('Date of Birth')[1].trim();
|
||||||
|
// extractedData['dateOfBirth'] = dob;
|
||||||
|
// }
|
||||||
|
// Add more field extraction conditions as needed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extractedData['extractedTextWithCoordinates'] =
|
||||||
|
extractedTextWithCoordinates;
|
||||||
|
print(jsonEncode(extractedData));
|
||||||
|
return extractedData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PassportDataController extends GetxController {
|
||||||
|
PassportDataExtractor passportDataExtractor = PassportDataExtractor();
|
||||||
|
List<Map<String, dynamic>> extractedTextWithCoordinates = [];
|
||||||
|
|
||||||
|
Future<void> extractDataAndDrawBoundingBoxes() async {
|
||||||
|
try {
|
||||||
|
Map<String, dynamic> extractedData =
|
||||||
|
await passportDataExtractor.extractPassportData();
|
||||||
|
extractedTextWithCoordinates =
|
||||||
|
extractedData['extractedTextWithCoordinates'];
|
||||||
|
update(); // Notify GetX that the state has changed
|
||||||
|
print(extractedTextWithCoordinates);
|
||||||
|
} catch (e) {
|
||||||
|
print('Passport data extraction failed: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BoundingBoxPainter extends CustomPainter {
|
||||||
|
final List<Map<String, dynamic>> boundingBoxes;
|
||||||
|
|
||||||
|
BoundingBoxPainter(this.boundingBoxes);
|
||||||
|
|
||||||
|
@override
|
||||||
|
void paint(Canvas canvas, Size size) {
|
||||||
|
final Paint paint = Paint()
|
||||||
|
..color = Colors.red
|
||||||
|
..style = PaintingStyle.stroke
|
||||||
|
..strokeWidth = 2.0;
|
||||||
|
|
||||||
|
for (Map<String, dynamic> boundingBox in boundingBoxes) {
|
||||||
|
double left = boundingBox['left'];
|
||||||
|
double top = boundingBox['top'];
|
||||||
|
double width = boundingBox['width'];
|
||||||
|
double height = boundingBox['height'];
|
||||||
|
|
||||||
|
Rect rect = Rect.fromLTWH(left, top, width, height);
|
||||||
|
canvas.drawRect(rect, paint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool shouldRepaint(covariant CustomPainter oldDelegate) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class HomeCaptainController extends GetxController {
|
|||||||
Timer? activeTimer;
|
Timer? activeTimer;
|
||||||
Map data = {};
|
Map data = {};
|
||||||
String totalMoneyToday = '0';
|
String totalMoneyToday = '0';
|
||||||
|
String totalMoneyInSEFER = '0';
|
||||||
String totalDurationToday = '0';
|
String totalDurationToday = '0';
|
||||||
Timer? timer;
|
Timer? timer;
|
||||||
// Inject the LocationController class
|
// Inject the LocationController class
|
||||||
@@ -89,7 +90,8 @@ class HomeCaptainController extends GetxController {
|
|||||||
link: AppLink.getDriverpaymentToday,
|
link: AppLink.getDriverpaymentToday,
|
||||||
payload: {'driverID': box.read(BoxName.driverID).toString()});
|
payload: {'driverID': box.read(BoxName.driverID).toString()});
|
||||||
data = jsonDecode(res);
|
data = jsonDecode(res);
|
||||||
totalMoneyToday = data['message'][0]['total_amount'];
|
totalMoneyToday = data['message'][0]['todayAmount'];
|
||||||
|
totalMoneyInSEFER = data['message'][0]['total_amount'];
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -199,6 +199,7 @@ class MapPassengerController extends GetxController {
|
|||||||
int seconds = remainingTimeTimerRideBegin % 60;
|
int seconds = remainingTimeTimerRideBegin % 60;
|
||||||
stringRemainingTimeRideBegin =
|
stringRemainingTimeRideBegin =
|
||||||
'$minutes:${seconds.toString().padLeft(2, '0')}';
|
'$minutes:${seconds.toString().padLeft(2, '0')}';
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,6 +208,10 @@ class MapPassengerController extends GetxController {
|
|||||||
update();
|
update();
|
||||||
print('rideTimerBegin: $rideTimerBegin');
|
print('rideTimerBegin: $rideTimerBegin');
|
||||||
print('isRideFinished: $isRideFinished');
|
print('isRideFinished: $isRideFinished');
|
||||||
|
await CRUD().post(link: AppLink.addPassengersWallet, payload: {
|
||||||
|
'passenger_id': box.read(BoxName.passengerID).toString(),
|
||||||
|
'balance': ((-1) * totalPassenger).toString()
|
||||||
|
});
|
||||||
Get.to(() => RateCaptainFromPassenger(), arguments: {
|
Get.to(() => RateCaptainFromPassenger(), arguments: {
|
||||||
'driverId': driverId.toString(),
|
'driverId': driverId.toString(),
|
||||||
'rideId': rideId.toString(),
|
'rideId': rideId.toString(),
|
||||||
|
|||||||
65
lib/controller/home/splash_screen_controlle.dart
Normal file
65
lib/controller/home/splash_screen_controlle.dart
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:ride/views/auth/login_page.dart';
|
||||||
|
|
||||||
|
import '../../constant/box_name.dart';
|
||||||
|
import '../../main.dart';
|
||||||
|
import '../../onbording_page.dart';
|
||||||
|
import '../../views/auth/captin/login_captin.dart';
|
||||||
|
import '../../views/home/Captin/home_captin.dart';
|
||||||
|
import '../../views/home/map_page.dart';
|
||||||
|
|
||||||
|
class SplashScreenController extends GetxController
|
||||||
|
with SingleGetTickerProviderMixin {
|
||||||
|
late AnimationController animationController;
|
||||||
|
late Animation<double> zoomInAnimation;
|
||||||
|
late Animation<double> zoomOutAnimation;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
super.onInit();
|
||||||
|
animationController = AnimationController(
|
||||||
|
vsync: this,
|
||||||
|
duration: const Duration(seconds: 7),
|
||||||
|
);
|
||||||
|
|
||||||
|
zoomInAnimation = Tween<double>(begin: 1.0, end: 1.5).animate(
|
||||||
|
CurvedAnimation(
|
||||||
|
parent: animationController,
|
||||||
|
curve: Curves.easeInOut,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
zoomOutAnimation = Tween<double>(begin: 1.5, end: 1.0).animate(
|
||||||
|
CurvedAnimation(
|
||||||
|
parent: animationController,
|
||||||
|
curve: Curves.easeInOut,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
animationController.repeat(reverse: true);
|
||||||
|
startTimer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void startTimer() {
|
||||||
|
Timer(const Duration(seconds: 7), () {
|
||||||
|
box.read(BoxName.onBoarding) == null
|
||||||
|
? Get.off(() => OnBoardingPage())
|
||||||
|
: box.read(BoxName.email) != null
|
||||||
|
? Get.off(() => const MapPage())
|
||||||
|
: box.read(BoxName.emailDriver) == null
|
||||||
|
? Get.off(() => LoginPage())
|
||||||
|
: box.read(BoxName.emailDriver) != null
|
||||||
|
? Get.off(() => const HomeCaptain())
|
||||||
|
: Get.off(() => LoginCaptin());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onClose() {
|
||||||
|
animationController.dispose();
|
||||||
|
super.onClose();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:camera/camera.dart';
|
|
||||||
import 'package:firebase_core/firebase_core.dart';
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -9,18 +8,14 @@ import 'package:get/get.dart';
|
|||||||
import 'package:get_storage/get_storage.dart';
|
import 'package:get_storage/get_storage.dart';
|
||||||
import 'package:ride/constant/credential.dart';
|
import 'package:ride/constant/credential.dart';
|
||||||
import 'package:ride/constant/info.dart';
|
import 'package:ride/constant/info.dart';
|
||||||
import 'package:ride/views/auth/captin/login_captin.dart';
|
import 'package:ride/splash_screen_page.dart';
|
||||||
import 'package:ride/views/auth/login_page.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:ride/views/home/Captin/home_captin.dart';
|
|
||||||
|
|
||||||
import 'constant/box_name.dart';
|
|
||||||
import 'controller/firebase/firbase_messge.dart';
|
import 'controller/firebase/firbase_messge.dart';
|
||||||
import 'controller/local/local_controller.dart';
|
import 'controller/local/local_controller.dart';
|
||||||
import 'controller/local/translations.dart';
|
import 'controller/local/translations.dart';
|
||||||
import 'firebase_options.dart';
|
import 'firebase_options.dart';
|
||||||
import 'models/db_sql.dart';
|
import 'models/db_sql.dart';
|
||||||
import 'onbording_page.dart';
|
|
||||||
import 'views/home/map_page.dart';
|
|
||||||
|
|
||||||
final box = GetStorage();
|
final box = GetStorage();
|
||||||
DbSql sql = DbSql.instance;
|
DbSql sql = DbSql.instance;
|
||||||
@@ -55,7 +50,10 @@ void main() async {
|
|||||||
// cameras = await availableCameras();
|
// cameras = await availableCameras();
|
||||||
await Future.wait(initializationTasks);
|
await Future.wait(initializationTasks);
|
||||||
}
|
}
|
||||||
|
SystemChrome.setPreferredOrientations([
|
||||||
|
DeviceOrientation.portraitUp,
|
||||||
|
DeviceOrientation.portraitDown,
|
||||||
|
]);
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,25 +64,17 @@ class MyApp extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
LocaleController controller = Get.put(LocaleController());
|
LocaleController localController = Get.put(LocaleController());
|
||||||
|
|
||||||
return GetMaterialApp(
|
return GetMaterialApp(
|
||||||
title: AppInformation.appName,
|
title: AppInformation.appName,
|
||||||
translations: MyTranslation(),
|
translations: MyTranslation(),
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
locale: controller.language,
|
locale: localController.language,
|
||||||
theme: controller.appTheme,
|
theme: localController.appTheme,
|
||||||
key: UniqueKey(),
|
key: UniqueKey(),
|
||||||
// routes: {'/':const HomePage()},
|
// routes: {'/':const HomePage()},
|
||||||
home: box.read(BoxName.onBoarding) == null
|
// home: LoginCaptin());
|
||||||
? OnBoardingPage()
|
home: SplashScreen());
|
||||||
: box.read(BoxName.email) != null
|
|
||||||
? const MapPage()
|
|
||||||
: box.read(BoxName.emailDriver) == null
|
|
||||||
? LoginPage()
|
|
||||||
: box.read(BoxName.emailDriver) != null
|
|
||||||
? const HomeCaptain()
|
|
||||||
: LoginCaptin(),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
66
lib/splash_screen_page.dart
Normal file
66
lib/splash_screen_page.dart
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import 'package:animated_text_kit/animated_text_kit.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_stripe/flutter_stripe.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:ride/constant/colors.dart';
|
||||||
|
import 'package:ride/constant/info.dart';
|
||||||
|
import 'package:ride/constant/style.dart';
|
||||||
|
|
||||||
|
import 'controller/home/splash_screen_controlle.dart';
|
||||||
|
|
||||||
|
class SplashScreen extends StatelessWidget {
|
||||||
|
final SplashScreenController splashScreenController =
|
||||||
|
Get.put(SplashScreenController());
|
||||||
|
|
||||||
|
SplashScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor:
|
||||||
|
AppColor.primaryColor, // Set your desired background color
|
||||||
|
body: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
GetBuilder<SplashScreenController>(
|
||||||
|
builder: (_) {
|
||||||
|
return AnimatedBuilder(
|
||||||
|
animation: splashScreenController.animationController,
|
||||||
|
builder: (BuildContext context, Widget? child) {
|
||||||
|
return Transform.scale(
|
||||||
|
scale:
|
||||||
|
splashScreenController.animationController.value < 0.5
|
||||||
|
? splashScreenController.zoomInAnimation.value
|
||||||
|
: splashScreenController.zoomOutAnimation.value,
|
||||||
|
child: Image.asset('assets/images/logo.png'),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
AnimatedTextKit(animatedTexts: [
|
||||||
|
TypewriterAnimatedText(
|
||||||
|
'Welcome to ${AppInformation.appName}',
|
||||||
|
textStyle:
|
||||||
|
AppStyle.headTitle.copyWith(color: AppColor.greenColor),
|
||||||
|
speed: const Duration(milliseconds: 200),
|
||||||
|
),
|
||||||
|
], isRepeatingAnimation: true),
|
||||||
|
const SizedBox(
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
AnimatedTextKit(animatedTexts: [
|
||||||
|
TypewriterAnimatedText(
|
||||||
|
'Powered By ${AppInformation.companyName}',
|
||||||
|
textStyle:
|
||||||
|
AppStyle.title.copyWith(color: AppColor.secondaryColor),
|
||||||
|
speed: const Duration(milliseconds: 200),
|
||||||
|
),
|
||||||
|
], isRepeatingAnimation: true)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
import 'package:animated_text_kit/animated_text_kit.dart';
|
import 'package:animated_text_kit/animated_text_kit.dart';
|
||||||
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:html/parser.dart' show parse;
|
||||||
import 'package:ride/constant/box_name.dart';
|
import 'package:ride/constant/box_name.dart';
|
||||||
import 'package:ride/constant/colors.dart';
|
import 'package:ride/constant/colors.dart';
|
||||||
|
import 'package:ride/constant/info.dart';
|
||||||
import 'package:ride/constant/style.dart';
|
import 'package:ride/constant/style.dart';
|
||||||
import 'package:ride/controller/auth/captin/login_captin_controller.dart';
|
import 'package:ride/controller/auth/captin/login_captin_controller.dart';
|
||||||
import 'package:ride/main.dart';
|
import 'package:ride/main.dart';
|
||||||
@@ -184,6 +188,15 @@ class LoginCaptin extends StatelessWidget {
|
|||||||
displayFullTextOnTap: true,
|
displayFullTextOnTap: true,
|
||||||
stopPauseOnTap: true,
|
stopPauseOnTap: true,
|
||||||
),
|
),
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
box.remove(BoxName.agreeTerms);
|
||||||
|
},
|
||||||
|
icon: const Icon(
|
||||||
|
Icons.delete,
|
||||||
|
color: AppColor.blueColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -216,10 +229,34 @@ class LoginCaptin extends StatelessWidget {
|
|||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 30,
|
height: 30,
|
||||||
),
|
),
|
||||||
Text(
|
RichText(
|
||||||
'By selecting "I Agree" below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.'
|
text: TextSpan(
|
||||||
.tr,
|
text:
|
||||||
style: AppStyle.title,
|
'By selecting "I Agree" below, I have reviewed and agree to the Terms of Use and acknowledge the ',
|
||||||
|
style: AppStyle.title,
|
||||||
|
children: <TextSpan>[
|
||||||
|
TextSpan(
|
||||||
|
text: 'Privacy Notice',
|
||||||
|
style: const TextStyle(
|
||||||
|
decoration: TextDecoration.underline,
|
||||||
|
color: AppColor.blueColor),
|
||||||
|
recognizer: TapGestureRecognizer()
|
||||||
|
..onTap = () {
|
||||||
|
Get.defaultDialog(
|
||||||
|
title: ''.tr,
|
||||||
|
content: const SizedBox(
|
||||||
|
height: 400,
|
||||||
|
width: 400,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: HtmlWidget(AppInformation.privacyPolicy),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}),
|
||||||
|
const TextSpan(
|
||||||
|
text: '. I am at least 18 years of age.',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 100,
|
height: 100,
|
||||||
@@ -248,7 +285,7 @@ class LoginCaptin extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
MyElevatedButton(
|
MyElevatedButton(
|
||||||
title: 'Submit'.tr,
|
title: 'Submit'.tr,
|
||||||
onPressed: () => controller.saveAgreementTerms())
|
onPressed: () => controller.saveAgreementTerms()),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
114
lib/views/home/Captin/bottom_bar.dart
Normal file
114
lib/views/home/Captin/bottom_bar.dart
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:ride/constant/colors.dart';
|
||||||
|
|
||||||
|
class BottomBarController extends GetxController {
|
||||||
|
var currentIndex = 0.obs;
|
||||||
|
|
||||||
|
void changePage(int index) {
|
||||||
|
currentIndex.value = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HomeScreen extends StatelessWidget {
|
||||||
|
final BottomBarController controller = Get.put(BottomBarController());
|
||||||
|
|
||||||
|
HomeScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
title: const Text('Bottom Bar Example'),
|
||||||
|
),
|
||||||
|
body: Obx(() => IndexedStack(
|
||||||
|
index: controller.currentIndex.value,
|
||||||
|
children: const [
|
||||||
|
HomeView(),
|
||||||
|
ProfileView(),
|
||||||
|
StatisticsView(),
|
||||||
|
WalletView(),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
bottomNavigationBar: Obx(() => BottomNavigationBar(
|
||||||
|
backgroundColor: Colors.greenAccent,
|
||||||
|
currentIndex: controller.currentIndex.value,
|
||||||
|
onTap: controller.changePage,
|
||||||
|
items: const [
|
||||||
|
BottomNavigationBarItem(
|
||||||
|
icon: Icon(
|
||||||
|
Icons.home,
|
||||||
|
color: AppColor.primaryColor,
|
||||||
|
),
|
||||||
|
label: 'Home',
|
||||||
|
),
|
||||||
|
BottomNavigationBarItem(
|
||||||
|
icon: Icon(
|
||||||
|
Icons.person,
|
||||||
|
color: AppColor.primaryColor,
|
||||||
|
),
|
||||||
|
label: 'Profile',
|
||||||
|
),
|
||||||
|
BottomNavigationBarItem(
|
||||||
|
icon: Icon(
|
||||||
|
Icons.bar_chart,
|
||||||
|
color: AppColor.primaryColor,
|
||||||
|
),
|
||||||
|
label: 'Statistics',
|
||||||
|
),
|
||||||
|
BottomNavigationBarItem(
|
||||||
|
icon: Icon(
|
||||||
|
Icons.account_balance_wallet,
|
||||||
|
color: AppColor.primaryColor,
|
||||||
|
),
|
||||||
|
label: 'Wallet',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HomeView extends StatelessWidget {
|
||||||
|
const HomeView({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return const Center(
|
||||||
|
child: Text('Home View'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ProfileView extends StatelessWidget {
|
||||||
|
const ProfileView({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return const Center(
|
||||||
|
child: Text('Profile View'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class StatisticsView extends StatelessWidget {
|
||||||
|
const StatisticsView({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return const Center(
|
||||||
|
child: Text('Statistics View'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class WalletView extends StatelessWidget {
|
||||||
|
const WalletView({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return const Center(
|
||||||
|
child: Text('Wallet View'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,151 +24,261 @@ class CameraWidgetCardId extends StatelessWidget {
|
|||||||
padding:
|
padding:
|
||||||
const EdgeInsets.symmetric(vertical: 8, horizontal: 12),
|
const EdgeInsets.symmetric(vertical: 8, horizontal: 12),
|
||||||
child: GetBuilder<CameraClassController>(
|
child: GetBuilder<CameraClassController>(
|
||||||
builder: (cameraClassController) => cameraClassController
|
builder: (cameraClassController) =>
|
||||||
.isCameraInitialized
|
cameraClassController.isCameraInitialized
|
||||||
? Stack(
|
? Stack(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
decoration: AppStyle.boxDecoration,
|
decoration: AppStyle.boxDecoration,
|
||||||
height: Get.width * 3 / 4,
|
child: FittedBox(
|
||||||
width: Get.width,
|
fit: BoxFit.fitWidth,
|
||||||
child: OverflowBox(
|
child: SizedBox(
|
||||||
alignment: Alignment.center,
|
width: Get.width * .9,
|
||||||
child: FittedBox(
|
height: Get.width *
|
||||||
fit: BoxFit.fitWidth,
|
.9, // Set the desired aspect ratio here
|
||||||
child: SizedBox(
|
child: CameraPreview(
|
||||||
width: Get.width,
|
cameraClassController.cameraController,
|
||||||
height: Get.width *
|
),
|
||||||
3 /
|
|
||||||
4, // Set the desired aspect ratio here
|
|
||||||
child:
|
|
||||||
// Image.asset(
|
|
||||||
// 'assets/images/cardid.jpg',
|
|
||||||
// fit: BoxFit.fill,
|
|
||||||
// )
|
|
||||||
CameraPreview(
|
|
||||||
cameraClassController.cameraController,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
Positioned(
|
||||||
),
|
top: 72,
|
||||||
Positioned(
|
child: Container(
|
||||||
top: 72,
|
width: 230,
|
||||||
child: Container(
|
height: 25,
|
||||||
width: 230,
|
decoration: BoxDecoration(
|
||||||
height: 25,
|
// color: AppColor.blueColor,
|
||||||
decoration: BoxDecoration(
|
border: Border.all(
|
||||||
// color: AppColor.blueColor,
|
color: AppColor.yellowColor,
|
||||||
border: Border.all(
|
width: 2),
|
||||||
color: AppColor.yellowColor, width: 2),
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 60,
|
||||||
|
right: 5,
|
||||||
|
child: Container(
|
||||||
|
width: 230,
|
||||||
|
height: 25,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 156,
|
||||||
|
right: 5,
|
||||||
|
child: Container(
|
||||||
|
width: 140,
|
||||||
|
height: 20,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 175,
|
||||||
|
right: 5,
|
||||||
|
child: Container(
|
||||||
|
width: 140,
|
||||||
|
height: 15,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 191,
|
||||||
|
right: 5,
|
||||||
|
child: Container(
|
||||||
|
width: 140,
|
||||||
|
height: 15,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 207,
|
||||||
|
right: 5,
|
||||||
|
child: Container(
|
||||||
|
width: 140,
|
||||||
|
height: 15,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 225,
|
||||||
|
right: 5,
|
||||||
|
child: Container(
|
||||||
|
width: 140,
|
||||||
|
height: 15,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 115,
|
||||||
|
left: 25,
|
||||||
|
child: Container(
|
||||||
|
width: 120,
|
||||||
|
height: 110,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: Container(
|
||||||
|
decoration: AppStyle.boxDecoration,
|
||||||
|
height: Get.width * 3 / 4,
|
||||||
|
width: Get.width,
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
'Camera not initilaized yet',
|
||||||
|
style: AppStyle.title,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
|
children: [
|
||||||
|
MyElevatedButton(
|
||||||
|
title: 'Scan ID MklGoogle'.tr,
|
||||||
|
onPressed: () =>
|
||||||
|
cameraClassController.takePictureAndMLGoogleScan()),
|
||||||
|
MyElevatedButton(
|
||||||
|
title: 'Scan ID Tesseract'.tr,
|
||||||
|
onPressed: () =>
|
||||||
|
cameraClassController.takePictureAndTesseractScan()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
MyElevatedButton(
|
||||||
|
title: 'Scan ID Api'.tr,
|
||||||
|
onPressed: () => cameraClassController.extractCardId()),
|
||||||
|
GetBuilder<CameraClassController>(
|
||||||
|
builder: (cameraClassController) => Expanded(
|
||||||
|
child:
|
||||||
|
Text(cameraClassController.scannedText.toString())))
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
isleading: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CameraWidgetPassPort extends StatelessWidget {
|
||||||
|
final CameraClassController cameraClassController =
|
||||||
|
Get.put(CameraClassController());
|
||||||
|
|
||||||
|
CameraWidgetPassPort({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return MyScafolld(
|
||||||
|
title: 'Scan Id'.tr,
|
||||||
|
body: [
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding:
|
||||||
|
const EdgeInsets.symmetric(vertical: 8, horizontal: 12),
|
||||||
|
child: GetBuilder<CameraClassController>(
|
||||||
|
builder: (cameraClassController) =>
|
||||||
|
cameraClassController.isCameraInitialized
|
||||||
|
? Stack(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
decoration: AppStyle.boxDecoration,
|
||||||
|
child: FittedBox(
|
||||||
|
fit: BoxFit.fitWidth,
|
||||||
|
child: SizedBox(
|
||||||
|
width: Get.width * .9,
|
||||||
|
height: Get.width *
|
||||||
|
.9, // Set the desired aspect ratio here
|
||||||
|
child: CameraPreview(
|
||||||
|
cameraClassController.cameraController,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 35,
|
||||||
|
left: 35,
|
||||||
|
width: Get.width * .77,
|
||||||
|
height:
|
||||||
|
17, //left":95.0,"top":134.0,"width":2909.0,"height":175.0
|
||||||
|
child: Container(
|
||||||
|
// width: 230,
|
||||||
|
// height: 25,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.yellowColor,
|
||||||
|
width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 60,
|
||||||
|
right: 25,
|
||||||
|
width: 90,
|
||||||
|
height: 25,
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 110,
|
||||||
|
right: 90,
|
||||||
|
child: Container(
|
||||||
|
width: 140,
|
||||||
|
height: 20,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
// color: AppColor.blueColor,
|
||||||
|
border: Border.all(
|
||||||
|
color: AppColor.blueColor, width: 2),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: Container(
|
||||||
|
decoration: AppStyle.boxDecoration,
|
||||||
|
height: Get.width * 3 / 4,
|
||||||
|
width: Get.width,
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
'Camera not initilaized yet',
|
||||||
|
style: AppStyle.title,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Positioned(
|
|
||||||
top: 60,
|
|
||||||
right: 5,
|
|
||||||
child: Container(
|
|
||||||
width: 230,
|
|
||||||
height: 25,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
// color: AppColor.blueColor,
|
|
||||||
border: Border.all(
|
|
||||||
color: AppColor.blueColor, width: 2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
top: 156,
|
|
||||||
right: 5,
|
|
||||||
child: Container(
|
|
||||||
width: 140,
|
|
||||||
height: 20,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
// color: AppColor.blueColor,
|
|
||||||
border: Border.all(
|
|
||||||
color: AppColor.blueColor, width: 2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
top: 175,
|
|
||||||
right: 5,
|
|
||||||
child: Container(
|
|
||||||
width: 140,
|
|
||||||
height: 15,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
// color: AppColor.blueColor,
|
|
||||||
border: Border.all(
|
|
||||||
color: AppColor.blueColor, width: 2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
top: 191,
|
|
||||||
right: 5,
|
|
||||||
child: Container(
|
|
||||||
width: 140,
|
|
||||||
height: 15,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
// color: AppColor.blueColor,
|
|
||||||
border: Border.all(
|
|
||||||
color: AppColor.blueColor, width: 2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
top: 207,
|
|
||||||
right: 5,
|
|
||||||
child: Container(
|
|
||||||
width: 140,
|
|
||||||
height: 15,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
// color: AppColor.blueColor,
|
|
||||||
border: Border.all(
|
|
||||||
color: AppColor.blueColor, width: 2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
top: 225,
|
|
||||||
right: 5,
|
|
||||||
child: Container(
|
|
||||||
width: 140,
|
|
||||||
height: 15,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
// color: AppColor.blueColor,
|
|
||||||
border: Border.all(
|
|
||||||
color: AppColor.blueColor, width: 2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
top: 115,
|
|
||||||
left: 25,
|
|
||||||
child: Container(
|
|
||||||
width: 120,
|
|
||||||
height: 110,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
// color: AppColor.blueColor,
|
|
||||||
border: Border.all(
|
|
||||||
color: AppColor.blueColor, width: 2),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
: Container(
|
|
||||||
decoration: AppStyle.boxDecoration,
|
|
||||||
height: Get.width * 3 / 4,
|
|
||||||
width: Get.width,
|
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
'Camera not initilaized yet',
|
|
||||||
style: AppStyle.title,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'package:camera/camera.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:ride/constant/colors.dart';
|
import 'package:ride/constant/colors.dart';
|
||||||
|
import 'package:ride/constant/info.dart';
|
||||||
import 'package:ride/constant/style.dart';
|
import 'package:ride/constant/style.dart';
|
||||||
import 'package:ride/constant/table_names.dart';
|
import 'package:ride/constant/table_names.dart';
|
||||||
import 'package:ride/controller/functions/camer_controller.dart';
|
import 'package:ride/controller/functions/camer_controller.dart';
|
||||||
@@ -10,6 +11,7 @@ import 'package:ride/controller/home/captin/order_request_controller.dart';
|
|||||||
import 'package:ride/controller/payment/payment_controller.dart';
|
import 'package:ride/controller/payment/payment_controller.dart';
|
||||||
import 'package:ride/main.dart';
|
import 'package:ride/main.dart';
|
||||||
import 'package:ride/views/Rate/ride_calculate_driver.dart';
|
import 'package:ride/views/Rate/ride_calculate_driver.dart';
|
||||||
|
import 'package:ride/views/home/Captin/bottom_bar.dart';
|
||||||
import 'package:ride/views/home/Captin/camer_widget.dart';
|
import 'package:ride/views/home/Captin/camer_widget.dart';
|
||||||
import 'package:ride/views/home/Captin/text_scanner.dart';
|
import 'package:ride/views/home/Captin/text_scanner.dart';
|
||||||
import 'package:ride/views/widgets/circle_container.dart';
|
import 'package:ride/views/widgets/circle_container.dart';
|
||||||
@@ -19,6 +21,7 @@ import 'package:flutter_font_icons/flutter_font_icons.dart';
|
|||||||
import '../../../controller/functions/location_controller.dart';
|
import '../../../controller/functions/location_controller.dart';
|
||||||
import '../../../controller/functions/ocr_controller.dart';
|
import '../../../controller/functions/ocr_controller.dart';
|
||||||
import '../../../controller/home/captin/widget/connect.dart';
|
import '../../../controller/home/captin/widget/connect.dart';
|
||||||
|
import 'passportimage.dart';
|
||||||
|
|
||||||
class HomeCaptain extends StatelessWidget {
|
class HomeCaptain extends StatelessWidget {
|
||||||
const HomeCaptain({super.key});
|
const HomeCaptain({super.key});
|
||||||
@@ -109,18 +112,36 @@ class HomeCaptain extends StatelessWidget {
|
|||||||
width: Get.width * .8,
|
width: Get.width * .8,
|
||||||
height: 80,
|
height: 80,
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Row(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
const Icon(
|
Row(
|
||||||
Entypo.wallet,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
color: AppColor.greenColor,
|
children: [
|
||||||
|
const Icon(
|
||||||
|
Entypo.wallet,
|
||||||
|
color: AppColor.greenColor,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
' You Earn today is '.tr +
|
||||||
|
homeCaptainController.totalMoneyToday,
|
||||||
|
style: AppStyle.title,
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
Text(
|
Row(
|
||||||
' You Earn today is '.tr +
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
homeCaptainController
|
children: [
|
||||||
.totalMoneyToday, //Todo add here number for income
|
const Icon(
|
||||||
style: AppStyle.title,
|
Entypo.loop,
|
||||||
|
color: AppColor.yellowColor,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
' You Have in ${AppInformation.appName} '.tr +
|
||||||
|
homeCaptainController.totalMoneyInSEFER,
|
||||||
|
style: AppStyle.title,
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
))),
|
))),
|
||||||
@@ -180,20 +201,37 @@ class HomeCaptain extends StatelessWidget {
|
|||||||
// );
|
// );
|
||||||
},
|
},
|
||||||
child: const Icon(MaterialIcons.message)),
|
child: const Icon(MaterialIcons.message)),
|
||||||
|
// TextButton(
|
||||||
|
// onPressed: () {
|
||||||
|
// Get.to(() => TextExtractionView());
|
||||||
|
// },
|
||||||
|
// child: const Text(
|
||||||
|
// "Text FlutterTesseractsOcr",
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Get.to(() => TextExtractionView());
|
Get.to(() => PassportPage());
|
||||||
},
|
},
|
||||||
child: const Text(
|
child: Text(
|
||||||
"Text FlutterTesseractsOcr",
|
'Passport '.tr,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Get.to(() => TextRecognizerWidget());
|
Get.to(() => PassportDataExtractorWidget());
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'Passport new'.tr,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
Get.to(() => const TextRecognizerWidget());
|
||||||
},
|
},
|
||||||
child: const Text(
|
child: const Text(
|
||||||
"Text FlutterMLGoogle",
|
"Driver License ML",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
@@ -208,11 +246,20 @@ class HomeCaptain extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
CameraClassController().extractByAPI(
|
Get.to(
|
||||||
'https://img.alwakeelnews.com/Content/Upload/large/b8109dd0d33af5195938104af6835fef.jpg');
|
() => CameraWidgetPassPort(),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
child: const Text(
|
child: const Text(
|
||||||
"Text By API",
|
" CameraWidgetPassPort",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
Get.to(() => HomeScreen());
|
||||||
|
},
|
||||||
|
child: const Text(
|
||||||
|
"Home Screen",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
|
|||||||
46
lib/views/home/Captin/passportimage.dart
Normal file
46
lib/views/home/Captin/passportimage.dart
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import '../../../controller/functions/ocr_controller.dart';
|
||||||
|
|
||||||
|
class PassportDataExtractorWidget extends StatelessWidget {
|
||||||
|
final PassportDataExtractor passportDataExtractor =
|
||||||
|
Get.put(PassportDataExtractor());
|
||||||
|
final PassportDataController controller = Get.put(PassportDataController());
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
title: const Text('Passport Data Extractor'),
|
||||||
|
),
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: controller.extractDataAndDrawBoundingBoxes,
|
||||||
|
child: const Text('Extract Data'),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
GetBuilder<PassportDataController>(
|
||||||
|
builder: (controller) => CustomPaint(
|
||||||
|
painter: BoundingBoxPainter(
|
||||||
|
controller.extractedTextWithCoordinates),
|
||||||
|
child: GetBuilder<PassportDataExtractor>(
|
||||||
|
builder: (controller) =>
|
||||||
|
Image.file(File(passportDataExtractor.image!.path)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:ride/views/widgets/mycircular.dart';
|
import 'package:ride/views/widgets/mycircular.dart';
|
||||||
@@ -36,99 +38,50 @@ class TextExtractionView extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class TextRecognizerWidget extends StatelessWidget {
|
class TextRecognizerWidget extends StatelessWidget {
|
||||||
|
const TextRecognizerWidget({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
Get.put(TextMLGoogleRecognizerController());
|
Get.put(TextMLGoogleRecognizerController());
|
||||||
return GetBuilder<TextMLGoogleRecognizerController>(
|
return GetBuilder<TextMLGoogleRecognizerController>(
|
||||||
builder: (controller) => Scaffold(
|
builder: (controller) => Scaffold(
|
||||||
appBar: AppBar(),
|
appBar: AppBar(),
|
||||||
body: Center(
|
body: Center(
|
||||||
child: Text(controller.scannedText ?? ''),
|
child: Column(
|
||||||
),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
));
|
children: [
|
||||||
|
Text('${controller.decode['DRIVER_LICENSE'].toString()}'),
|
||||||
|
Text('DL: ${controller.decode['dl_number'].toString()}'),
|
||||||
|
Text(
|
||||||
|
'Expiry Date: ${controller.decode['expiry_date'].toString()}'),
|
||||||
|
Text('Last Name: ${controller.decode['lastName'].toString()}'),
|
||||||
|
Text(
|
||||||
|
'First Name: ${controller.decode['firstName'].toString()}'),
|
||||||
|
Text('Address: ${controller.decode['address'].toString()}'),
|
||||||
|
Text('Date of Birth: ${controller.decode['dob'].toString()}'),
|
||||||
|
Text('RSTR: ${controller.decode['rstr'].toString()}'),
|
||||||
|
Text('Class: ${controller.decode['class'].toString()}'),
|
||||||
|
Text('End: ${controller.decode['end'].toString()}'),
|
||||||
|
Text('DD: ${controller.decode['dd'].toString()}'),
|
||||||
|
Text('Sex: ${controller.decode['sex'].toString()}'),
|
||||||
|
Text('Hair: ${controller.decode['hair'].toString()}'),
|
||||||
|
Text('Eyes: ${controller.decode['eyes'].toString()}'),
|
||||||
|
// and so on for other fields
|
||||||
|
],
|
||||||
|
))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// class TesseractWidget extends StatelessWidget {
|
class PassportPage extends StatelessWidget {
|
||||||
// final TesseractController controller = Get.put(TesseractController());
|
PassportPage({super.key});
|
||||||
|
PassportRecognizerController passportRecognizerController =
|
||||||
// @override
|
Get.put(PassportRecognizerController());
|
||||||
// Widget build(BuildContext context) {
|
@override
|
||||||
// return Scaffold(
|
Widget build(BuildContext context) {
|
||||||
// appBar: AppBar(
|
return Scaffold(
|
||||||
// title: Text('Tesseract Implementation'),
|
appBar: AppBar(
|
||||||
// ),
|
title: const Text('Driver License'),
|
||||||
// body: GetBuilder<TesseractController>(
|
),
|
||||||
// builder: (controller) => Container(
|
body: const Center(child: Text('data')));
|
||||||
// padding: const EdgeInsets.all(16),
|
}
|
||||||
// child: ListView(
|
}
|
||||||
// children: <Widget>[
|
|
||||||
// Column(
|
|
||||||
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
||||||
// children: [
|
|
||||||
// ElevatedButton(
|
|
||||||
// child: Text('Select image'),
|
|
||||||
// onPressed: controller.extractTextFromImage,
|
|
||||||
// ),
|
|
||||||
// controller.scanning
|
|
||||||
// ? const MyCircularProgressIndicator()
|
|
||||||
// : const Icon(Icons.done),
|
|
||||||
// SizedBox(height: 16),
|
|
||||||
// Center(child: SelectableText(controller.text)),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// import 'package:flutter/material.dart';
|
|
||||||
// import 'package:get/get.dart';
|
|
||||||
// import 'package:image_picker/image_picker.dart';
|
|
||||||
//
|
|
||||||
// import '../../../controller/functions/document_scanner.dart';
|
|
||||||
//
|
|
||||||
// class TextScanner extends StatelessWidget {
|
|
||||||
// // final ImagePickerController _imagePickerController =
|
|
||||||
// // Get.put(ImagePickerController());
|
|
||||||
//
|
|
||||||
// TextScanner({super.key});
|
|
||||||
//
|
|
||||||
// @override
|
|
||||||
// Widget build(BuildContext context) {
|
|
||||||
// return Scaffold(
|
|
||||||
// appBar: AppBar(
|
|
||||||
// title: const Text('Image Picker'),
|
|
||||||
// ),
|
|
||||||
// body: Center(
|
|
||||||
// child: Column(
|
|
||||||
// mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
// children: [
|
|
||||||
// Obx(() {
|
|
||||||
// // final bool textScanning =
|
|
||||||
// // _imagePickerController.textScanning.value;
|
|
||||||
// // final String scannedText =
|
|
||||||
// // _imagePickerController.scannedText.value;
|
|
||||||
//
|
|
||||||
// if (textScanning) {
|
|
||||||
// return const CircularProgressIndicator();
|
|
||||||
// } else if (scannedText.isNotEmpty) {
|
|
||||||
// return Text(scannedText);
|
|
||||||
// } else {
|
|
||||||
// return const Text('No text scanned');
|
|
||||||
// }
|
|
||||||
// }),
|
|
||||||
// ElevatedButton(
|
|
||||||
// onPressed: () =>
|
|
||||||
// _imagePickerController.getImage(ImageSource.camera),
|
|
||||||
// child: const Text('Take Picture'),
|
|
||||||
// ),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|||||||
@@ -61,33 +61,33 @@ class TimerToPassengerFromDriver extends StatelessWidget {
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
controller.remainingTimeToPassengerFromDriverAfterApplied < 60
|
// controller.remainingTimeToPassengerFromDriverAfterApplied < 60
|
||||||
? MyElevatedButton(
|
// ? MyElevatedButton(
|
||||||
title: 'If you in Car Now. Press Start The Ride'.tr,
|
// title: 'If you in Car Now. Press Start The Ride'.tr,
|
||||||
onPressed: () async {
|
// onPressed: () async {
|
||||||
//todo start the trip and rest all counter ,start new counter of the trip time
|
// //todo start the trip and rest all counter ,start new counter of the trip time
|
||||||
|
//
|
||||||
await CRUD()
|
// await CRUD()
|
||||||
.post(link: AppLink.updateRides, payload: {
|
// .post(link: AppLink.updateRides, payload: {
|
||||||
'id': controller.rideId,
|
// 'id': controller.rideId,
|
||||||
'rideTimeStart': DateTime.now().toString(),
|
// 'rideTimeStart': DateTime.now().toString(),
|
||||||
'status': 'Applied'
|
// 'status': 'Applied'
|
||||||
});
|
// });
|
||||||
controller.driverArrivePassenger();
|
// controller.driverArrivePassenger();
|
||||||
// Send notification to driver to alert him that trip is begin
|
// // Send notification to driver to alert him that trip is begin
|
||||||
FirebaseMessagesController()
|
// FirebaseMessagesController()
|
||||||
.sendNotificationToAnyWithoutData(
|
// .sendNotificationToAnyWithoutData(
|
||||||
'BeginTrip',
|
// 'BeginTrip',
|
||||||
box.read(BoxName.name).toString(),
|
// box.read(BoxName.name).toString(),
|
||||||
controller.driverToken.toString(),
|
// controller.driverToken.toString(),
|
||||||
);
|
// );
|
||||||
print(controller.driverToken.toString());
|
// print(controller.driverToken.toString());
|
||||||
// Get.defaultDialog(
|
// // Get.defaultDialog(
|
||||||
// title: 'The Ride is Begin'.tr,
|
// // title: 'The Ride is Begin'.tr,
|
||||||
// backgroundColor: AppColor.greenColor,
|
// // backgroundColor: AppColor.greenColor,
|
||||||
// );
|
// // );
|
||||||
})
|
// })
|
||||||
: const SizedBox()
|
// : const SizedBox()
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
import FlutterMacOS
|
import FlutterMacOS
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import audio_session
|
||||||
import device_info_plus
|
import device_info_plus
|
||||||
import file_selector_macos
|
import file_selector_macos
|
||||||
import firebase_core
|
import firebase_core
|
||||||
@@ -12,12 +13,17 @@ import firebase_messaging
|
|||||||
import flutter_local_notifications
|
import flutter_local_notifications
|
||||||
import flutter_secure_storage_macos
|
import flutter_secure_storage_macos
|
||||||
import geolocator_apple
|
import geolocator_apple
|
||||||
|
import just_audio
|
||||||
import location
|
import location
|
||||||
|
import package_info_plus
|
||||||
import path_provider_foundation
|
import path_provider_foundation
|
||||||
import sqflite
|
import sqflite
|
||||||
import url_launcher_macos
|
import url_launcher_macos
|
||||||
|
import video_player_avfoundation
|
||||||
|
import wakelock_plus
|
||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
|
AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
|
||||||
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||||
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||||
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
|
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
|
||||||
@@ -25,8 +31,12 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
|
||||||
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
||||||
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
||||||
|
JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))
|
||||||
LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin"))
|
LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin"))
|
||||||
|
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
|
FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin"))
|
||||||
|
WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
|
||||||
}
|
}
|
||||||
|
|||||||
300
pubspec.lock
300
pubspec.lock
@@ -41,6 +41,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.11.0"
|
version: "2.11.0"
|
||||||
|
audio_session:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: audio_session
|
||||||
|
sha256: "8a2bc5e30520e18f3fb0e366793d78057fb64cd5287862c76af0c8771f2a52ad"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.16"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -49,6 +57,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.1"
|
||||||
|
cached_network_image:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cached_network_image
|
||||||
|
sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.3.0"
|
||||||
|
cached_network_image_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cached_network_image_platform_interface
|
||||||
|
sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
|
cached_network_image_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cached_network_image_web
|
||||||
|
sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
camera:
|
camera:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -105,6 +137,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
version: "2.0.3"
|
||||||
|
chewie:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: chewie
|
||||||
|
sha256: ccfce3350ae9fd419cd336cdf3380f77a08e45171e1e3cb3d499d204de5e7ea8
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.7.1"
|
||||||
cli_util:
|
cli_util:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -310,6 +350,14 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_cache_manager:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_cache_manager
|
||||||
|
sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.3.1"
|
||||||
flutter_font_icons:
|
flutter_font_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -446,6 +494,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.5.0+1"
|
version: "9.5.0+1"
|
||||||
|
flutter_svg:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_svg
|
||||||
|
sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.9"
|
||||||
flutter_tesseract_ocr:
|
flutter_tesseract_ocr:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -464,6 +520,22 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_widget_from_html:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_widget_from_html
|
||||||
|
sha256: "6f2578397aa8efed3267cd4243b68acfc2e38c51d7381fc31a6860ea6eef4e1e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.6"
|
||||||
|
flutter_widget_from_html_core:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_widget_from_html_core
|
||||||
|
sha256: dd585321db498911414a9b08659b8aa965f8f0375b39856429220fbcacdf59bd
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.6"
|
||||||
freezed_annotation:
|
freezed_annotation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -472,6 +544,54 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.1"
|
version: "2.4.1"
|
||||||
|
fwfh_cached_network_image:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: fwfh_cached_network_image
|
||||||
|
sha256: "952aea958a5fda7d616cc297ba4bc08427e381459e75526fa375d6d8345630d3"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.2"
|
||||||
|
fwfh_chewie:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: fwfh_chewie
|
||||||
|
sha256: b74673d1b2f8710df5addd0ceb82c148f28b9fca9fe619048eebc734d055d55b
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.2"
|
||||||
|
fwfh_just_audio:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: fwfh_just_audio
|
||||||
|
sha256: "4962bc59cf8bbb0a77a55ff56a7b925612b0d8263bc2ede3636b9c86113cb493"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.2"
|
||||||
|
fwfh_svg:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: fwfh_svg
|
||||||
|
sha256: "26df142c1784c29c3675ad0d37f589fc5c2173a14fc002d2c38cde3d0f117302"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.8.0+4"
|
||||||
|
fwfh_url_launcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: fwfh_url_launcher
|
||||||
|
sha256: "2a526c9819f74b4106ba2fba4dac79f0082deecd8d2c7011cd0471cb710e3eff"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.0+4"
|
||||||
|
fwfh_webview:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: fwfh_webview
|
||||||
|
sha256: "86531afae48a5838d2dce9719dfc6d46c3179237dacf47ea2b2c068243b2e88f"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.2"
|
||||||
geolocator:
|
geolocator:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -604,18 +724,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: google_mlkit_commons
|
name: google_mlkit_commons
|
||||||
sha256: "42173a8ba89f386486cc5b8249e84da4a4b861daa70498373627d985eb418689"
|
sha256: af63771903947d5523d9e991a939a4b8bf994f11661c9b9c8a71d7d3997115f8
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.0"
|
version: "0.2.0"
|
||||||
google_mlkit_text_recognition:
|
google_mlkit_text_recognition:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: google_mlkit_text_recognition
|
name: google_mlkit_text_recognition
|
||||||
sha256: "588021c99536fdfb173eeecc4ee1b60ea4e0bd4be9787f52363c85346ae20364"
|
sha256: "6dc31f02beb1cfd6818da4bf29bf4ae5f4f9e16422c1efd0b515ed0756d73b8e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.10.0"
|
version: "0.5.0"
|
||||||
google_polyline_algorithm:
|
google_polyline_algorithm:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -800,6 +920,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.8.1"
|
version: "4.8.1"
|
||||||
|
just_audio:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: just_audio
|
||||||
|
sha256: "5ed0cd723e17dfd8cd4b0253726221e67f6546841ea4553635cf895061fc335b"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.35"
|
||||||
|
just_audio_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: just_audio_platform_interface
|
||||||
|
sha256: d8409da198bbc59426cd45d4c92fca522a2ec269b576ce29459d6d6fcaeb44df
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.2.1"
|
||||||
|
just_audio_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: just_audio_web
|
||||||
|
sha256: ff62f733f437b25a0ff590f0e295fa5441dcb465f1edbdb33b3dea264705bc13
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.8"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -832,6 +976,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.0"
|
version: "4.2.0"
|
||||||
|
logging:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: logging
|
||||||
|
sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.0"
|
||||||
lottie:
|
lottie:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -872,6 +1024,38 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.0.4"
|
||||||
|
nested:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: nested
|
||||||
|
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
|
octo_image:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: octo_image
|
||||||
|
sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
|
package_info_plus:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus
|
||||||
|
sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.2.0"
|
||||||
|
package_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_platform_interface
|
||||||
|
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.1"
|
||||||
path:
|
path:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -880,6 +1064,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.3"
|
version: "1.8.3"
|
||||||
|
path_parsing:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_parsing
|
||||||
|
sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
path_provider:
|
path_provider:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -960,6 +1152,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.7.3"
|
version: "3.7.3"
|
||||||
|
provider:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: provider
|
||||||
|
sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.0.5"
|
||||||
quiver:
|
quiver:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -968,6 +1168,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.1"
|
version: "3.2.1"
|
||||||
|
rxdart:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: rxdart
|
||||||
|
sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.27.7"
|
||||||
sanitize_html:
|
sanitize_html:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1173,6 +1381,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.7"
|
version: "3.0.7"
|
||||||
|
vector_graphics:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vector_graphics
|
||||||
|
sha256: "0f0c746dd2d6254a0057218ff980fc7f5670fd0fcf5e4db38a490d31eed4ad43"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.9+1"
|
||||||
|
vector_graphics_codec:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vector_graphics_codec
|
||||||
|
sha256: "0edf6d630d1bfd5589114138ed8fada3234deacc37966bec033d3047c29248b7"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.9+1"
|
||||||
|
vector_graphics_compiler:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vector_graphics_compiler
|
||||||
|
sha256: d24333727332d9bd20990f1483af4e09abdb9b1fc7c3db940b56ab5c42790c26
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.9+1"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1181,6 +1413,62 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.4"
|
||||||
|
video_player:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: video_player
|
||||||
|
sha256: e16f0a83601a78d165dabc17e4dac50997604eb9e4cc76e10fa219046b70cef3
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.8.1"
|
||||||
|
video_player_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: video_player_android
|
||||||
|
sha256: "3fe89ab07fdbce786e7eb25b58532d6eaf189ceddc091cb66cba712f8d9e8e55"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.10"
|
||||||
|
video_player_avfoundation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: video_player_avfoundation
|
||||||
|
sha256: fe73d636f82286a3739f5e644f95f09442cacdc436ebbe5436521dc915f3ecac
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.5.1"
|
||||||
|
video_player_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: video_player_platform_interface
|
||||||
|
sha256: be72301bf2c0150ab35a8c34d66e5a99de525f6de1e8d27c0672b836fe48f73a
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.2.1"
|
||||||
|
video_player_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: video_player_web
|
||||||
|
sha256: ab7a462b07d9ca80bed579e30fb3bce372468f1b78642e0911b10600f2c5cb5b
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
|
wakelock_plus:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: wakelock_plus
|
||||||
|
sha256: f45a6c03aa3f8322e0a9d7f4a0482721c8789cb41d555407367650b8f9c26018
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.3"
|
||||||
|
wakelock_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: wakelock_plus_platform_interface
|
||||||
|
sha256: "40fabed5da06caff0796dc638e1f07ee395fb18801fbff3255a2372db2d80385"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
web:
|
web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1201,10 +1489,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: bca797abba472868655b5f1a6029c1132385685ee9db4713cb0e7f33076210c6
|
sha256: ddc167c6676f57c8b367d19fcbee267d6dc6adf81bd6c3cb87981d30746e0a6d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.9.3"
|
version: "3.10.1"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -41,9 +41,11 @@ dependencies:
|
|||||||
device_info_plus: ^9.1.0
|
device_info_plus: ^9.1.0
|
||||||
image_picker: ^1.0.4
|
image_picker: ^1.0.4
|
||||||
flutter_tesseract_ocr: ^0.4.24
|
flutter_tesseract_ocr: ^0.4.24
|
||||||
google_mlkit_text_recognition: ^0.10.0
|
google_mlkit_text_recognition: # ^0.10.0
|
||||||
flutter_stripe: ^9.5.0+1
|
flutter_stripe: ^9.5.0+1
|
||||||
camera: ^0.10.5+5
|
camera: ^0.10.5+5
|
||||||
|
flutter_widget_from_html: ^0.14.6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user