This commit is contained in:
Hamza-Ayed
2024-02-06 10:43:14 +03:00
parent a34c2d9eda
commit 4ee10218a9
9 changed files with 110 additions and 10 deletions

View File

@@ -0,0 +1,25 @@
import 'package:flutter_tts/flutter_tts.dart';
class TextToSpeech {
final FlutterTts tts = FlutterTts();
// Initialize the TTS engine with desired settings
Future initTts() async {
await tts.setLanguage('en-US'); // Set language
await tts.setSpeechRate(0.8); // Adjust speech rate
await tts.setVolume(1.0); // Set volume
}
// Speak the given text
Future speakText(String text) async {
await tts.speak(text);
}
// Stop speaking
Future stopSpeaking() async {
await tts.stop();
}
// Check if TTS is currently speaking
// bool isSpeaking() => tts.isSpeaking;
}

View File

@@ -1,6 +1,8 @@
import 'dart:async';
import 'dart:convert';
import 'dart:math' show cos;
import 'dart:math' as math;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
@@ -1461,6 +1463,8 @@ class MapPassengerController extends GetxController {
//print(nearestCar!.id);
}
List<double> headingAngles = [];
late LatLngBounds boundsData;
getMap(String origin, destination) async {
await getCarsLocationByPassenger();
@@ -1510,7 +1514,23 @@ class MapPassengerController extends GetxController {
double distanceOfTrip = (data[0]['distance']['value']) / 1000;
distance = distanceOfTrip;
// updateCameraForDistanceAfterGetMap();
for (var step in data[0]['steps']) {
var startLat = step['start_location']['lat'];
var startLng = step['start_location']['lng'];
var endLat = step['end_location']['lat'];
var endLng = step['end_location']['lng'];
// Calculate heading
var y = math.sin(endLng - startLng) * math.cos(endLat);
var x = math.cos(startLat) * math.sin(endLat) -
math.sin(startLat) * math.cos(endLat) * math.cos(endLng - startLng);
var theta = math.atan2(y, x);
// Add to list
headingAngles.add(theta);
}
print(headingAngles);
if (polyLines.isNotEmpty) {
clearPolyline();
} else {
@@ -1851,6 +1871,15 @@ class MapPassengerController extends GetxController {
update();
}
initilizeGetStorage() {
if (box.read(BoxName.addWork).toString() == '') {
box.write(BoxName.addWork, 'addWork');
}
if (box.read(BoxName.addHome).toString() == '') {
box.write(BoxName.addHome, 'addHome');
}
}
@override
void onInit() async {
mapAPIKEY = await storage.read(key: BoxName.mapAPIKEY);
@@ -1865,6 +1894,7 @@ class MapPassengerController extends GetxController {
addCustomStartIcon();
addCustomEndIcon();
startMarkerReloading();
initilizeGetStorage();
cardNumber = await SecureStorage().readData(BoxName.cardNumber);
super.onInit();

View File

@@ -207,8 +207,13 @@ GetBuilder<MapPassengerController> formSearchPlacesDestenation() {
controller.changePickerShown();
}));
},
child: Text(
'Work : ${box.read(BoxName.addWork) == 'addWork' ? 'Add Work' : box.read(BoxName.addWork).toString().split(',')[0] + box.read(BoxName.addWork).toString().split(',')[1]} '),
child: Container(
decoration: BoxDecoration(
color: AppColor.greenColor.withOpacity(.4),
border: Border.all()),
child: Text(
'Work : ${box.read(BoxName.addWork) == 'addWork' ? 'Add Work' : box.read(BoxName.addWork).toString().split(',')[0] + box.read(BoxName.addWork).toString().split(',')[1]} '),
),
),
InkWell(
onLongPress: () {
@@ -243,8 +248,13 @@ GetBuilder<MapPassengerController> formSearchPlacesDestenation() {
controller.update();
}
},
child: Text(
'Home : ${box.read(BoxName.addHome) == 'addHome' ? 'Add Home' : box.read(BoxName.addHome)} '),
child: Container(
decoration: BoxDecoration(
color: AppColor.yellowColor.withOpacity(.4),
border: Border.all()),
child: Text(
'Home : ${box.read(BoxName.addHome) == 'addHome' ? 'Add Home' : box.read(BoxName.addHome)} '),
),
),
],
),

View File

@@ -5,6 +5,7 @@ import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../../constant/colors.dart';
import '../../../controller/functions/tts.dart';
import '../../../controller/home/map_passenger_controller.dart';
GetBuilder<MapPassengerController> leftMainMenuIcons() {
@@ -56,7 +57,27 @@ GetBuilder<MapPassengerController> leftMainMenuIcons() {
const SizedBox(
height: 5,
),
// if (Platform.isIOS)
if (Platform.isIOS)
AnimatedContainer(
duration: const Duration(microseconds: 200),
width: controller.widthMapTypeAndTraffic,
decoration: BoxDecoration(
color: AppColor.secondaryColor,
border: Border.all(),
borderRadius: BorderRadius.circular(15)),
child: IconButton(
onPressed: () {
controller.mapController?.animateCamera(
CameraUpdate.newLatLng(LatLng(
controller.passengerLocation.latitude,
controller.passengerLocation.longitude)));
},
icon: const Icon(
Icons.location_on,
size: 29,
),
),
),
AnimatedContainer(
duration: const Duration(microseconds: 200),
width: controller.widthMapTypeAndTraffic,
@@ -66,13 +87,12 @@ GetBuilder<MapPassengerController> leftMainMenuIcons() {
borderRadius: BorderRadius.circular(15)),
child: IconButton(
onPressed: () {
controller.mapController?.animateCamera(
CameraUpdate.newLatLng(LatLng(
controller.passengerLocation.latitude,
controller.passengerLocation.longitude)));
final _textToSpeech = TextToSpeech();
_textToSpeech.initTts();
_textToSpeech.speakText("Hello, world!");
},
icon: const Icon(
Icons.location_on,
Icons.voice_chat,
size: 29,
),
),

View File

@@ -13,6 +13,7 @@ import firebase_core
import firebase_messaging
import flutter_local_notifications
import flutter_secure_storage_macos
import flutter_tts
import geolocator_apple
import iris_method_channel
import just_audio
@@ -33,6 +34,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
FlutterTtsPlugin.register(with: registry.registrar(forPlugin: "FlutterTtsPlugin"))
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
IrisMethodChannelPlugin.register(with: registry.registrar(forPlugin: "IrisMethodChannelPlugin"))
JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))

View File

@@ -659,6 +659,14 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_tts:
dependency: "direct main"
description:
name: flutter_tts
sha256: cbb3fd43b946e62398560235469e6113e4fe26c40eab1b7cb5e7c417503fb3a8
url: "https://pub.dev"
source: hosted
version: "3.8.5"
flutter_web_plugins:
dependency: transitive
description: flutter

View File

@@ -51,6 +51,7 @@ dependencies:
calendar_builder: ^0.0.6
fl_chart: ^0.66.0
agora_rtc_engine: ^6.2.6
flutter_tts: ^3.8.5

View File

@@ -10,6 +10,7 @@
#include <file_selector_windows/file_selector_windows.h>
#include <firebase_core/firebase_core_plugin_c_api.h>
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
#include <flutter_tts/flutter_tts_plugin.h>
#include <geolocator_windows/geolocator_windows.h>
#include <iris_method_channel/iris_method_channel_plugin_c_api.h>
#include <local_auth_windows/local_auth_plugin.h>
@@ -24,6 +25,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
FlutterSecureStorageWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin"));
FlutterTtsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterTtsPlugin"));
GeolocatorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("GeolocatorWindows"));
IrisMethodChannelPluginCApiRegisterWithRegistrar(

View File

@@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
file_selector_windows
firebase_core
flutter_secure_storage_windows
flutter_tts
geolocator_windows
iris_method_channel
local_auth_windows