diff --git a/android/build.gradle b/android/build.gradle index 5264885..e909018 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.9.0' + ext.kotlin_version = '1.9.10' repositories { google() mavenCentral() diff --git a/assets/tessdata/ara.traineddata b/assets/tessdata/ara.traineddata new file mode 100644 index 0000000..42e5c4b Binary files /dev/null and b/assets/tessdata/ara.traineddata differ diff --git a/assets/tessdata/eng.traineddata b/assets/tessdata/eng.traineddata new file mode 100644 index 0000000..f4744c2 Binary files /dev/null and b/assets/tessdata/eng.traineddata differ diff --git a/assets/tessdata_config.json b/assets/tessdata_config.json new file mode 100644 index 0000000..8cb9787 --- /dev/null +++ b/assets/tessdata_config.json @@ -0,0 +1,7 @@ +{ + "files": [ + "eng.traineddata", + "ara.traineddata" + + ] +} \ No newline at end of file diff --git a/lib/controller/firebase/ml_kit.dart b/lib/controller/firebase/ml_kit.dart deleted file mode 100644 index d351da2..0000000 --- a/lib/controller/firebase/ml_kit.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:get/get.dart'; -import 'package:flutter/material.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:google_ml_kit/google_ml_kit.dart'; - -class TextRecognizerController extends GetxController { - // The ImagePicker instance - final ImagePicker _imagePicker = ImagePicker(); - - // The GoogleMlKit TextRecognizer instance - final TextRecognizer _textRecognizer = TextRecognizer(); - - // The scanned text - String? scannedText; - - // Picks an image from the camera or gallery and extracts the text - Future 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; - } - - // Recognize the text in the image - final RecognizedText recognizedText = - await _textRecognizer.processImage(image as InputImage); - - // Extract the scanned text - scannedText = recognizedText.text; - - // Update the UI - update(); - } -} diff --git a/lib/controller/functions/document_scanner.dart b/lib/controller/functions/document_scanner.dart index 47416d1..198992c 100644 --- a/lib/controller/functions/document_scanner.dart +++ b/lib/controller/functions/document_scanner.dart @@ -1,41 +1,41 @@ -import 'dart:io'; - -import 'package:get/get.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:google_ml_kit/google_ml_kit.dart'; - -class ImagePickerController extends GetxController { - RxBool textScanning = false.obs; - RxString scannedText = ''.obs; - - Future getImage(ImageSource source) async { - try { - final pickedImage = await ImagePicker().pickImage(source: source); - if (pickedImage != null) { - textScanning.value = true; - final imageFile = File(pickedImage.path); - getRecognisedText(imageFile); - } - } catch (e) { - textScanning.value = false; - scannedText.value = "Error occurred while scanning"; - } - } - - Future getRecognisedText(File image) async { - final inputImage = InputImage.fromFilePath(image.path); - final textDetector = GoogleMlKit.vision.textRecognizer(); - final RecognizedText recognisedText = - await textDetector.processImage(inputImage); - await textDetector.close(); - - scannedText.value = ''; - for (TextBlock block in recognisedText.blocks) { - for (TextLine line in block.lines) { - scannedText.value += line.text + '\n'; - } - } - - textScanning.value = false; - } -} +// import 'dart:io'; +// +// import 'package:get/get.dart'; +// import 'package:image_picker/image_picker.dart'; +// import 'package:google_ml_kit/google_ml_kit.dart'; +// +// class ImagePickerController extends GetxController { +// RxBool textScanning = false.obs; +// RxString scannedText = ''.obs; +// +// Future getImage(ImageSource source) async { +// try { +// final pickedImage = await ImagePicker().pickImage(source: source); +// if (pickedImage != null) { +// textScanning.value = true; +// final imageFile = File(pickedImage.path); +// getRecognisedText(imageFile); +// } +// } catch (e) { +// textScanning.value = false; +// scannedText.value = "Error occurred while scanning"; +// } +// } +// +// Future getRecognisedText(File image) async { +// final inputImage = InputImage.fromFilePath(image.path); +// final textDetector = GoogleMlKit.vision.textRecognizer(); +// final RecognizedText recognisedText = +// await textDetector.processImage(inputImage); +// await textDetector.close(); +// +// scannedText.value = ''; +// for (TextBlock block in recognisedText.blocks) { +// for (TextLine line in block.lines) { +// scannedText.value += line.text + '\n'; +// } +// } +// +// textScanning.value = false; +// } +// } diff --git a/lib/controller/functions/ocr_controller.dart b/lib/controller/functions/ocr_controller.dart new file mode 100644 index 0000000..394a5d4 --- /dev/null +++ b/lib/controller/functions/ocr_controller.dart @@ -0,0 +1,80 @@ +import 'package:flutter_tesseract_ocr/flutter_tesseract_ocr.dart'; +import 'package:get/get.dart'; +import 'package:image_picker/image_picker.dart'; + +class OCRController extends GetxController { + final text = RxString(''); + + void setText(value) { + text.value = value; + } +} + +class TextExtractionController extends GetxController { + String extractedText = ''; + + Future pickAndExtractText() async { + final pickedImage = + await ImagePicker().pickImage(source: ImageSource.camera); + if (pickedImage != null) { + final imagePath = pickedImage.path; + final languages = [ + 'eng', + 'ara' + ]; // Specify the languages you want to use for text extraction + + try { + final text = await FlutterTesseractOcr.extractText(imagePath, + language: + languages.join('+'), // Combine multiple languages with '+' + args: { + "psm": "4", + "preserve_interword_spaces": "1", + } // Additional options if needed + ); + extractedText = text; + } catch (e) { + print('Error during text extraction: $e'); + extractedText = ''; + } + } + } +} + +// import 'package:get/get.dart'; +// import 'package:flutter/material.dart'; +// import 'package:image_picker/image_picker.dart'; +// import 'package:google_ml_kit/google_ml_kit.dart'; +// +// class TextRecognizerController extends GetxController { +// // The ImagePicker instance +// final ImagePicker _imagePicker = ImagePicker(); +// +// // The GoogleMlKit TextRecognizer instance +// final TextRecognizer _textRecognizer = TextRecognizer(); +// +// // The scanned text +// String? scannedText; +// +// // Picks an image from the camera or gallery and extracts the text +// Future 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; +// } +// +// // Recognize the text in the image +// final RecognizedText recognizedText = +// await _textRecognizer.processImage(image as InputImage); +// +// // Extract the scanned text +// scannedText = recognizedText.text; +// +// // Update the UI +// update(); +// } +// } diff --git a/lib/controller/functions/scan_id_card.dart b/lib/controller/functions/scan_id_card.dart index 9348455..b0e6336 100644 --- a/lib/controller/functions/scan_id_card.dart +++ b/lib/controller/functions/scan_id_card.dart @@ -1,25 +1,25 @@ -import 'package:credit_card_scanner/credit_card_scanner.dart'; -import 'package:get/get.dart'; - -class ScanIdCard extends GetxController { - CardDetails? _cardDetails; - CardScanOptions scanOptions = const CardScanOptions( - scanCardHolderName: true, - enableDebugLogs: true, - validCardsToScanBeforeFinishingScan: 5, - possibleCardHolderNamePositions: [ - CardHolderNameScanPosition.aboveCardNumber, - ], - ); - - Future scanCard() async { - final CardDetails? cardDetails = - await CardScanner.scanCard(scanOptions: scanOptions); - if (cardDetails == null) { - return; - } - - _cardDetails = cardDetails; - update(); - } -} +// import 'package:credit_card_scanner/credit_card_scanner.dart'; +// import 'package:get/get.dart'; +// +// class ScanIdCard extends GetxController { +// CardDetails? _cardDetails; +// CardScanOptions scanOptions = const CardScanOptions( +// scanCardHolderName: true, +// enableDebugLogs: true, +// validCardsToScanBeforeFinishingScan: 5, +// possibleCardHolderNamePositions: [ +// CardHolderNameScanPosition.aboveCardNumber, +// ], +// ); +// +// Future scanCard() async { +// final CardDetails? cardDetails = +// await CardScanner.scanCard(scanOptions: scanOptions); +// if (cardDetails == null) { +// return; +// } +// +// _cardDetails = cardDetails; +// update(); +// } +// } diff --git a/lib/controller/functions/twilio_service.dart b/lib/controller/functions/twilio_service.dart index 65f5d66..67d86ac 100644 --- a/lib/controller/functions/twilio_service.dart +++ b/lib/controller/functions/twilio_service.dart @@ -1,23 +1,23 @@ -import 'package:ride/constant/credential.dart'; -import 'package:twilio_flutter/twilio_flutter.dart'; - -class TwilioSMS { - TwilioFlutter twilioFlutter = TwilioFlutter( - accountSid: AppCredintials.accountSIDTwillo, - authToken: AppCredintials.authTokenTwillo, - twilioNumber: '+962 7 9858 3052'); - - Future sendSMS({ - required String recipientPhoneNumber, - required String message, - }) async { - try { - await twilioFlutter.sendSMS( - toNumber: recipientPhoneNumber, - messageBody: message, - ); - } catch (e) { - print(e); // Print the exception to the console. - } - } -} +// import 'package:ride/constant/credential.dart'; +// import 'package:twilio_flutter/twilio_flutter.dart'; +// +// class TwilioSMS { +// TwilioFlutter twilioFlutter = TwilioFlutter( +// accountSid: AppCredintials.accountSIDTwillo, +// authToken: AppCredintials.authTokenTwillo, +// twilioNumber: '+962 7 9858 3052'); +// +// Future sendSMS({ +// required String recipientPhoneNumber, +// required String message, +// }) async { +// try { +// await twilioFlutter.sendSMS( +// toNumber: recipientPhoneNumber, +// messageBody: message, +// ); +// } catch (e) { +// print(e); // Print the exception to the console. +// } +// } +// } diff --git a/lib/main.dart b/lib/main.dart index d5f0b6e..3223abc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,15 +6,12 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:ride/constant/info.dart'; -import 'package:ride/controller/home/map_passenger_controller.dart'; import 'package:ride/views/auth/captin/login_captin.dart'; import 'package:ride/views/auth/login_page.dart'; import 'package:ride/views/home/Captin/home_captin.dart'; import 'constant/box_name.dart'; import 'controller/firebase/firbase_messge.dart'; -import 'controller/functions/location_permission.dart'; -import 'controller/home/captin/map_driver_controller.dart'; import 'controller/local/local_controller.dart'; import 'controller/local/translations.dart'; import 'firebase_options.dart'; diff --git a/lib/views/home/Captin/home_captin.dart b/lib/views/home/Captin/home_captin.dart index 177bb68..9592949 100644 --- a/lib/views/home/Captin/home_captin.dart +++ b/lib/views/home/Captin/home_captin.dart @@ -1,11 +1,8 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/constant/style.dart'; import 'package:ride/constant/table_names.dart'; -import 'package:ride/controller/functions/twilio_service.dart'; import 'package:ride/controller/home/captin/home_captain_controller.dart'; import 'package:ride/controller/home/captin/order_request_controller.dart'; import 'package:ride/main.dart'; @@ -14,7 +11,6 @@ import 'package:ride/views/home/Captin/text_scanner.dart'; import 'package:ride/views/widgets/circle_container.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; -import 'package:twilio_flutter/twilio_flutter.dart'; import '../../../controller/functions/location_controller.dart'; import '../../../controller/home/captin/widget/connect.dart'; @@ -25,8 +21,7 @@ class HomeCaptain extends StatelessWidget { @override Widget build(BuildContext context) { Get.put(LocationController()); - final OrderRequestController orderRequestController = - Get.put(OrderRequestController()); + Get.put(OrderRequestController()); Get.put(HomeCaptainController()); return Scaffold( appBar: AppBar( @@ -174,10 +169,10 @@ class HomeCaptain extends StatelessWidget { ), InkWell( onTap: () async { - TwilioSMS().sendSMS( - recipientPhoneNumber: '+962 7 9858 3052', - message: 'Hello, this is a test message.', - ); + // TwilioSMS().sendSMS( + // recipientPhoneNumber: '+962 7 9858 3052', + // message: 'Hello, this is a test message.', + // ); }, child: const Icon(MaterialIcons.message)), TextButton( @@ -188,6 +183,14 @@ class HomeCaptain extends StatelessWidget { "Text Scanner", ), ), + TextButton( + onPressed: () { + Get.to(() => TextExtractionView()); + }, + child: const Text( + "Text FlutterTesseractsOcr", + ), + ), ], ), ), diff --git a/lib/views/home/Captin/text_scanner.dart b/lib/views/home/Captin/text_scanner.dart index 478d61a..f070501 100644 --- a/lib/views/home/Captin/text_scanner.dart +++ b/lib/views/home/Captin/text_scanner.dart @@ -1,47 +1,137 @@ import 'package:flutter/material.dart'; +import 'package:flutter_scalable_ocr/flutter_scalable_ocr.dart'; import 'package:get/get.dart'; -import 'package:image_picker/image_picker.dart'; -import '../../../controller/functions/document_scanner.dart'; +import '../../../controller/functions/ocr_controller.dart'; class TextScanner extends StatelessWidget { - final ImagePickerController _imagePickerController = - Get.put(ImagePickerController()); - TextScanner({super.key}); + final OCRController controller = Get.put(OCRController()); + @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'), - ), - ], + appBar: AppBar( + title: const Text('Flutter Scalable OCR'), ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + ScalableOCR( + paintboxCustom: Paint() + ..style = PaintingStyle.stroke + ..strokeWidth = 4.0 + ..color = const Color.fromARGB(153, 102, 160, 241), + boxLeftOff: 5, + boxBottomOff: 2.5, + boxRightOff: 5, + boxTopOff: 2.5, + boxHeight: MediaQuery.of(context).size.height / 3, + getRawData: (value) { + // Inspect the raw data here. + }, + getScannedText: (value) { + controller.setText(value); + }), + Result(), + Obx(() { + return SnackBar( + content: Text(controller.text.value), + ); + }) + ], + ), + )); + } +} + +class Result extends StatelessWidget { + Result({ + Key? key, + }) : super(key: key); + + final OCRController controller = Get.find(); + + @override + Widget build(BuildContext context) { + return Text("Readed text: ${controller.text.value}"); + } +} + +class TextExtractionView extends StatelessWidget { + TextExtractionView({super.key}); + + @override + Widget build(BuildContext context) { + Get.put(TextExtractionController()); + return Scaffold( + appBar: AppBar( + title: const Text('Text Extraction'), ), + body: GetBuilder(builder: (controller) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ElevatedButton( + onPressed: () => controller.pickAndExtractText(), + child: const Text('Pick Image and Extract Text'), + ), + const SizedBox(height: 20), + Text(controller.extractedText), + ], + ), + ); + }), ); } } +// 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'), +// ), +// ], +// ), +// ), +// ); +// } +// } diff --git a/pubspec.lock b/pubspec.lock index 4929527..1eeeb6d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -49,6 +49,46 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + camera: + dependency: transitive + description: + name: camera + sha256: "1f9010f0689774380fbcd7d6b7820a5157e8e97685fa66d619e1d1f58b3fdf93" + url: "https://pub.dev" + source: hosted + version: "0.10.5+5" + camera_android: + dependency: transitive + description: + name: camera_android + sha256: c978373b41a463c9edda3fea0a06966299f55db63232cd0f0d4efc21a59a0006 + url: "https://pub.dev" + source: hosted + version: "0.10.8+12" + camera_avfoundation: + dependency: transitive + description: + name: camera_avfoundation + sha256: "9495e633cda700717bbe299b0979e6c4a08cee45f298945973dc9cf3e4c1cba5" + url: "https://pub.dev" + source: hosted + version: "0.9.13+6" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + sha256: "8734d1c682f034bdb12d0d6ff379b0535a9b8e44266b530025bf8266d6a62f28" + url: "https://pub.dev" + source: hosted + version: "2.5.2" + camera_web: + dependency: transitive + description: + name: camera_web + sha256: d4c2c571c7af04f8b10702ca16bb9ed2a26e64534171e8f75c9349b2c004d8f1 + url: "https://pub.dev" + source: hosted + version: "0.3.2+3" characters: dependency: transitive description: @@ -97,14 +137,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" - credit_card_scanner: - dependency: "direct main" - description: - name: credit_card_scanner - sha256: "9bbfcac698f01bb32cbb2abfc6a9efa7fdea006e5a982cb4b8dc69fa0e8c1d19" - url: "https://pub.dev" - source: hosted - version: "1.0.5" cross_file: dependency: transitive description: @@ -366,6 +398,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.1" + flutter_scalable_ocr: + dependency: "direct main" + description: + name: flutter_scalable_ocr + sha256: "9e5c239c993c3c6c0b530b42165547b275d7db18d646cfc840b750aea1a7c988" + url: "https://pub.dev" + source: hosted + version: "2.0.0" flutter_secure_storage: dependency: "direct main" description: @@ -422,6 +462,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.0" + flutter_tesseract_ocr: + dependency: "direct main" + description: + name: flutter_tesseract_ocr + sha256: "4a8d0e3f562ee01d94a464ff9d31d9e907b1e374aeff29bf696f979417c70bcf" + url: "https://pub.dev" + source: hosted + version: "0.4.24" flutter_test: dependency: "direct dev" description: flutter @@ -560,126 +608,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.4" - google_ml_kit: - dependency: "direct main" - description: - name: google_ml_kit - sha256: "9d98ed5ff96c1295d08f96c807a70d53b56a43a7a18ae86d4ea4d09cf7310fc9" - url: "https://pub.dev" - source: hosted - version: "0.16.2" - google_mlkit_barcode_scanning: - dependency: transitive - description: - name: google_mlkit_barcode_scanning - sha256: "033401bc992315fe3d6ed9265b97bf1e620fa12ddaffda830107d6852abcde77" - url: "https://pub.dev" - source: hosted - version: "0.9.0" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "42173a8ba89f386486cc5b8249e84da4a4b861daa70498373627d985eb418689" + sha256: "68429fa2e17686819dbaf2344790e3daa59924ef8625dd24f97f9deaaed42767" url: "https://pub.dev" source: hosted - version: "0.5.0" - google_mlkit_digital_ink_recognition: - dependency: transitive - description: - name: google_mlkit_digital_ink_recognition - sha256: f48a90cd2bb8dc6a0432a1ba89a1a488d4e7ba3132fe4dfd75a9eab0e0a1b90a - url: "https://pub.dev" - source: hosted - version: "0.9.0" - google_mlkit_entity_extraction: - dependency: transitive - description: - name: google_mlkit_entity_extraction - sha256: e4801253f9913a84793f338fb45923825fc2799f8608a1f0d0f5ca43b5062fbc - url: "https://pub.dev" - source: hosted - version: "0.10.0" - google_mlkit_face_detection: - dependency: transitive - description: - name: google_mlkit_face_detection - sha256: "567339c67530b22b22917622df9bba40547a4719fa108819901f95ffb7cd3399" - url: "https://pub.dev" - source: hosted - version: "0.8.0" - google_mlkit_face_mesh_detection: - dependency: transitive - description: - name: google_mlkit_face_mesh_detection - sha256: "3f64635fe096fef3167da6f69a30b1744ddfb4590acdaa2b7757c6f30455b0f5" - url: "https://pub.dev" - source: hosted - version: "0.0.1" - google_mlkit_image_labeling: - dependency: transitive - description: - name: google_mlkit_image_labeling - sha256: "38c7225e22ec558bfd78015ef9e9ae4812cee8715f03a9c82b87d3e0b530d00c" - url: "https://pub.dev" - source: hosted - version: "0.9.0" - google_mlkit_language_id: - dependency: transitive - description: - name: google_mlkit_language_id - sha256: cb4241297552f22be638be620add294b6a6c9043eefc1f4c18597ee66ce31a98 - url: "https://pub.dev" - source: hosted - version: "0.8.0" - google_mlkit_object_detection: - dependency: transitive - description: - name: google_mlkit_object_detection - sha256: "52b11c335cbf45da561127de586e1ab32ba5526eb04d7a3a683c787279a47153" - url: "https://pub.dev" - source: hosted - version: "0.10.0" - google_mlkit_pose_detection: - dependency: transitive - description: - name: google_mlkit_pose_detection - sha256: "08759fc095751cf84f6758f276212881388e04210c64087341e260f9f233316e" - url: "https://pub.dev" - source: hosted - version: "0.9.0" - google_mlkit_selfie_segmentation: - dependency: transitive - description: - name: google_mlkit_selfie_segmentation - sha256: "5b2931f86e9476daaf5710f9e0d281ec06f7d0ee664a3688b791bfcfb7c4afd5" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - google_mlkit_smart_reply: - dependency: transitive - description: - name: google_mlkit_smart_reply - sha256: "97165ea8667aa94de20d782862ecd791daf0e884c48b8cb1cedd9ebafda5d52c" - url: "https://pub.dev" - source: hosted - version: "0.8.0" + version: "0.3.0" google_mlkit_text_recognition: dependency: transitive description: name: google_mlkit_text_recognition - sha256: "588021c99536fdfb173eeecc4ee1b60ea4e0bd4be9787f52363c85346ae20364" + sha256: "0d5ac35fc666c311e0cd34f64c28f0842eb192ee2f23d49845a14d147aede146" url: "https://pub.dev" source: hosted - version: "0.10.0" - google_mlkit_translation: - dependency: transitive - description: - name: google_mlkit_translation - sha256: "175a0cb801b5fa01140f62344bbda6a8dcbb7977ae057f1dab1b74eddc60d71c" - url: "https://pub.dev" - source: hosted - version: "0.8.0" + version: "0.6.0" google_polyline_algorithm: dependency: "direct main" description: @@ -1157,14 +1101,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.2" - twilio_flutter: - dependency: "direct main" - description: - name: twilio_flutter - sha256: c81572eb5246d7f522852795f69b36817df62de4746a5e1d9af435d015e5cd25 - url: "https://pub.dev" - source: hosted - version: "0.0.9" typed_data: dependency: transitive description: @@ -1335,4 +1271,4 @@ packages: version: "3.1.2" sdks: dart: ">=3.1.0 <4.0.0" - flutter: ">=3.10.0" + flutter: ">=3.13.0" diff --git a/pubspec.yaml b/pubspec.yaml index 4af0418..a800818 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: custom_searchable_dropdown: ^2.1.1 animated_text_kit: ^4.2.2 flutter_secure_storage: ^8.0.0 - credit_card_scanner: ^1.0.5 +# credit_card_scanner: ^1.0.5 geolocator: ^10.0.0 flutter_paypal: ^0.2.0 flutter_launcher_icons: ^0.13.1 @@ -40,9 +40,11 @@ dependencies: flutter_font_icons: ^2.2.5 flutter_charts: ^0.5.2 device_info_plus: ^9.1.0 - twilio_flutter: ^0.0.9 - google_ml_kit: ^0.16.2 + flutter_scalable_ocr: ^2.0.0 image_picker: ^1.0.4 + flutter_tesseract_ocr: ^0.4.24 + + dev_dependencies: flutter_test: @@ -70,9 +72,11 @@ flutter_launcher_icons: flutter: uses-material-design: true assets: + - assets/ - assets/images/ - assets/lottie/ - assets/fonts/ + - assets/tessdata/ - shorebird.yaml fonts: