From a5afb32990f5fbfb5d56703bad8a345c4fc4287a Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Fri, 20 Oct 2023 22:16:31 +0300 Subject: [PATCH] 10/20/1 --- android/app/build.gradle | 6 +- lib/constant/credential.dart | 4 +- lib/controller/firebase/ml_kit.dart | 37 +++ lib/controller/functions/device_info.dart | 69 +++++ .../functions/document_scanner.dart | 41 +++ lib/controller/functions/twilio_service.dart | 23 ++ lib/views/home/Captin/home_captin.dart | 21 +- lib/views/home/Captin/text_scanner.dart | 47 +++ linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 4 + pubspec.lock | 274 +++++++++++++++++- pubspec.yaml | 5 +- .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 15 files changed, 533 insertions(+), 7 deletions(-) create mode 100644 lib/controller/firebase/ml_kit.dart create mode 100644 lib/controller/functions/device_info.dart create mode 100644 lib/controller/functions/document_scanner.dart create mode 100644 lib/controller/functions/twilio_service.dart create mode 100644 lib/views/home/Captin/text_scanner.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index ba06585..bfde579 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -14,7 +14,7 @@ if (flutterRoot == null) { def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { - flutterVersionCode = '6' + flutterVersionCode = '8' } def flutterVersionName = localProperties.getProperty('flutter.versionName') @@ -55,8 +55,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 23 targetSdkVersion flutter.targetSdkVersion - versionCode 7 - versionName '1.0.7' + versionCode 8 + versionName '1.0.8' } signingConfigs { diff --git a/lib/constant/credential.dart b/lib/constant/credential.dart index 25d0a94..e9c7249 100644 --- a/lib/constant/credential.dart +++ b/lib/constant/credential.dart @@ -7,7 +7,9 @@ class AppCredintials { 'AAAAinYllCo:APA91bF1shTpzSsSxqbfY6c60D8zs1ZsdIsl9ix6nl7GDdjCqWPRK0G0ub5SqFdb1jDpQDvQPxGg-697MWLo0sy3oYImBwBLObyhk0GjtNzyr0PbE3hI-pOvhf8Vp1xgUgBmofbZYXkH'; // AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0 static const String mapAPIKEY = 'AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0'; - + static const String twilloRecoveryCode = 'TQF13XUVU2NJ3VFU8JWBWYBS'; + static const String accountSIDTwillo = 'ACb4ad857efe0903bfd6238a763a2ce4d1'; + static const String authTokenTwillo = '14f39ef4628bb8a4f18469f462f8af75'; String getBasicAuthCredentials() { return base64Encode(utf8.encode(basicAuthCredentials)); } diff --git a/lib/controller/firebase/ml_kit.dart b/lib/controller/firebase/ml_kit.dart new file mode 100644 index 0000000..d351da2 --- /dev/null +++ b/lib/controller/firebase/ml_kit.dart @@ -0,0 +1,37 @@ +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/device_info.dart b/lib/controller/functions/device_info.dart new file mode 100644 index 0000000..f0cb0a5 --- /dev/null +++ b/lib/controller/functions/device_info.dart @@ -0,0 +1,69 @@ +import 'dart:io'; + +import 'package:device_info_plus/device_info_plus.dart'; + +class DeviceInfoPlus { + static Future> getDeviceInfo() async { + final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); + Map deviceData = {}; + + try { + if (Platform.isAndroid) { + AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo; + deviceData['platform'] = 'Android'; + deviceData['brand'] = androidInfo.brand; + deviceData['model'] = androidInfo.model; + deviceData['androidId'] = androidInfo.device; + deviceData['version'] = androidInfo.version.release; + deviceData['sdkVersion'] = androidInfo.version.sdkInt; + deviceData['manufacturer'] = androidInfo.manufacturer; + deviceData['isPhysicalDevice'] = androidInfo.isPhysicalDevice; + deviceData['serialNumber'] = androidInfo.serialNumber; + deviceData['fingerprint'] = androidInfo.fingerprint; + deviceData['type'] = androidInfo.type; + deviceData['data'] = androidInfo.data; + deviceData['version'] = androidInfo.version; + deviceData['tags'] = androidInfo.tags; + deviceData['display'] = androidInfo.display; + } else if (Platform.isIOS) { + IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo; + deviceData['brand'] = 'Apple'; + deviceData['model'] = iosInfo.model; + deviceData['systemName'] = iosInfo.systemName; + deviceData['systemVersion'] = iosInfo.systemVersion; + deviceData['utsname'] = iosInfo.utsname; + deviceData['isPhysicalDevice'] = iosInfo.isPhysicalDevice; + deviceData['identifierForVendor'] = iosInfo.identifierForVendor; + deviceData['name'] = iosInfo.name; + deviceData['localizedModel'] = iosInfo.localizedModel; + } else if (Platform.isMacOS) { + MacOsDeviceInfo macInfo = await deviceInfoPlugin.macOsInfo; + deviceData['platform'] = 'macOS'; + deviceData['model'] = macInfo.model; + deviceData['version'] = macInfo.systemGUID; + } else if (Platform.isWindows) { + WindowsDeviceInfo windowsInfo = await deviceInfoPlugin.windowsInfo; + deviceData['platform'] = 'Windows'; + deviceData['manufacturer'] = windowsInfo.computerName; + deviceData['version'] = windowsInfo.majorVersion; + deviceData['deviceId'] = windowsInfo.deviceId; + deviceData['userName'] = windowsInfo.userName; + deviceData['productName'] = windowsInfo.productName; + deviceData['installDate'] = windowsInfo.installDate; + deviceData['productId'] = windowsInfo.productId; + deviceData['numberOfCores'] = windowsInfo.numberOfCores; + deviceData['systemMemoryInMegabytes'] = + windowsInfo.systemMemoryInMegabytes; + } else if (Platform.isLinux) { + LinuxDeviceInfo linuxInfo = await deviceInfoPlugin.linuxInfo; + deviceData['platform'] = 'Linux'; + deviceData['manufacturer'] = linuxInfo.name; + deviceData['version'] = linuxInfo.version; + } + } catch (e) { + print('Failed to get device info: $e'); + } + + return deviceData; + } +} diff --git a/lib/controller/functions/document_scanner.dart b/lib/controller/functions/document_scanner.dart new file mode 100644 index 0000000..47416d1 --- /dev/null +++ b/lib/controller/functions/document_scanner.dart @@ -0,0 +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; + } +} diff --git a/lib/controller/functions/twilio_service.dart b/lib/controller/functions/twilio_service.dart new file mode 100644 index 0000000..65f5d66 --- /dev/null +++ b/lib/controller/functions/twilio_service.dart @@ -0,0 +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. + } + } +} diff --git a/lib/views/home/Captin/home_captin.dart b/lib/views/home/Captin/home_captin.dart index 82d1020..177bb68 100644 --- a/lib/views/home/Captin/home_captin.dart +++ b/lib/views/home/Captin/home_captin.dart @@ -5,13 +5,16 @@ 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'; import 'package:ride/views/Rate/ride_calculate_driver.dart'; +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'; @@ -137,7 +140,7 @@ class HomeCaptain extends StatelessWidget { ), TextButton( onPressed: () { - Get.to(() => RideCalculateDriver()); + Get.to(() => const RideCalculateDriver()); }, child: const Text('Chart')), const Wrap( @@ -169,6 +172,22 @@ class HomeCaptain extends StatelessWidget { Icon(Zocial.github), ], ), + InkWell( + onTap: () async { + TwilioSMS().sendSMS( + recipientPhoneNumber: '+962 7 9858 3052', + message: 'Hello, this is a test message.', + ); + }, + child: const Icon(MaterialIcons.message)), + TextButton( + onPressed: () { + Get.to(() => TextScanner()); + }, + child: const Text( + "Text Scanner", + ), + ), ], ), ), diff --git a/lib/views/home/Captin/text_scanner.dart b/lib/views/home/Captin/text_scanner.dart new file mode 100644 index 0000000..56a9d2a --- /dev/null +++ b/lib/views/home/Captin/text_scanner.dart @@ -0,0 +1,47 @@ +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.gallery), + child: const Text('Take Picture'), + ), + ], + ), + ), + ); + } +} diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 38dd0bc..3ccd551 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,10 +6,14 @@ #include "generated_plugin_registrant.h" +#include #include #include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); + file_selector_plugin_register_with_registrar(file_selector_linux_registrar); g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin"); flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 65240e9..9ce94c4 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + file_selector_linux flutter_secure_storage_linux url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 52a6b45..f181187 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,8 @@ import FlutterMacOS import Foundation +import device_info_plus +import file_selector_macos import firebase_core import firebase_messaging import flutter_local_notifications @@ -16,6 +18,8 @@ import sqflite import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 26ff0e1..4929527 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -105,6 +105,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "445db18de832dba8d851e287aff8ccf169bed30d2e94243cb54c7d2f1ed2142c" + url: "https://pub.dev" + source: hosted + version: "0.3.3+6" crypto: dependency: "direct main" description: @@ -153,6 +161,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.3" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + sha256: "7035152271ff67b072a211152846e9f1259cf1be41e34cd3e0b5463d2d6b8419" + url: "https://pub.dev" + source: hosted + version: "9.1.0" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + url: "https://pub.dev" + source: hosted + version: "7.0.0" fake_async: dependency: transitive description: @@ -169,6 +193,46 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" + url: "https://pub.dev" + source: hosted + version: "2.6.1" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 + url: "https://pub.dev" + source: hosted + version: "0.9.3+1" firebase_core: dependency: "direct main" description: @@ -496,6 +560,126 @@ 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" + 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" + google_mlkit_text_recognition: + dependency: transitive + description: + name: google_mlkit_text_recognition + sha256: "588021c99536fdfb173eeecc4ee1b60ea4e0bd4be9787f52363c85346ae20364" + 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" google_polyline_algorithm: dependency: "direct main" description: @@ -584,6 +768,70 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.17" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: "7d7f2768df2a8b0a3cefa5ef4f84636121987d403130e70b17ef7e2cf650ba84" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "0c7b83bbe2980c8a8e36e974f055e11e51675784e13a4762889feed0f3937ff2" + url: "https://pub.dev" + source: hosted + version: "0.8.8+1" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: c5538cacefacac733c724be7484377923b476216ad1ead35a0d2eadcdc0fc497 + url: "https://pub.dev" + source: hosted + version: "0.8.8+2" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514 + url: "https://pub.dev" + source: hosted + version: "2.9.1" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" intl: dependency: "direct main" description: @@ -688,6 +936,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" path: dependency: "direct main" description: @@ -901,6 +1157,14 @@ 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: @@ -1037,6 +1301,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.7" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" xdg_directories: dependency: transitive description: @@ -1062,5 +1334,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.1.0 <4.0.0" flutter: ">=3.10.0" diff --git a/pubspec.yaml b/pubspec.yaml index c9b7281..4af0418 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,7 +39,10 @@ dependencies: flutter_rating_bar: ^4.0.1 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 + image_picker: ^1.0.4 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index fc8aa54..0492de9 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,12 +6,15 @@ #include "generated_plugin_registrant.h" +#include #include #include #include #include void RegisterPlugins(flutter::PluginRegistry* registry) { + FileSelectorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSelectorWindows")); FirebaseCorePluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); FlutterSecureStorageWindowsPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 3d0634f..8b5c8b2 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + file_selector_windows firebase_core flutter_secure_storage_windows geolocator_windows