1
This commit is contained in:
parent
abceb3b772
commit
a1bfd4a3f8
@ -29,6 +29,7 @@ import 'package:trans_lark/widget/speak_dialog.dart';
|
|||||||
/// @author
|
/// @author
|
||||||
/// @date: 2024-06-26 14:23:43
|
/// @date: 2024-06-26 14:23:43
|
||||||
class HomeLogic extends GetxController {
|
class HomeLogic extends GetxController {
|
||||||
|
static HomeLogic get to => Get.find<HomeLogic>();
|
||||||
var lastWords = '';
|
var lastWords = '';
|
||||||
|
|
||||||
var fromLanguage = Rx<LanguageEntity?>(null);
|
var fromLanguage = Rx<LanguageEntity?>(null);
|
||||||
@ -45,14 +46,19 @@ class HomeLogic extends GetxController {
|
|||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
_getDailyQuote();
|
getDailyQuote();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _getDailyQuote() async {
|
Future<void> getDailyQuote() async {
|
||||||
|
LanguageEntity fromLanguageEntity =
|
||||||
|
TranslateLanguage().fromLanguageEntity.value;
|
||||||
|
LanguageEntity toLanguageEntity =
|
||||||
|
TranslateLanguage().toLanguageEntity.value;
|
||||||
var languageScene = <LanguageEntity>[
|
var languageScene = <LanguageEntity>[
|
||||||
LanguageEntity(languageCode: 'ar', languageName: 'Arabic'),
|
LanguageEntity(languageCode: 'ar', languageName: 'Arabic'),
|
||||||
LanguageEntity(languageCode: 'bn', languageName: 'Bengali'),
|
LanguageEntity(languageCode: 'bn', languageName: 'Bengali'),
|
||||||
LanguageEntity(languageCode: 'zh-cn', languageName: 'Chinese (Simplified)'),
|
LanguageEntity(
|
||||||
|
languageCode: 'zh-cn', languageName: 'Chinese (Simplified)'),
|
||||||
LanguageEntity(languageCode: 'en', languageName: 'English'),
|
LanguageEntity(languageCode: 'en', languageName: 'English'),
|
||||||
LanguageEntity(languageCode: 'fr', languageName: 'French'),
|
LanguageEntity(languageCode: 'fr', languageName: 'French'),
|
||||||
LanguageEntity(languageCode: 'de', languageName: 'German'),
|
LanguageEntity(languageCode: 'de', languageName: 'German'),
|
||||||
@ -65,12 +71,27 @@ class HomeLogic extends GetxController {
|
|||||||
LanguageEntity(languageCode: 'ru', languageName: 'Russian'),
|
LanguageEntity(languageCode: 'ru', languageName: 'Russian'),
|
||||||
LanguageEntity(languageCode: 'es', languageName: 'Spanish'),
|
LanguageEntity(languageCode: 'es', languageName: 'Spanish'),
|
||||||
];
|
];
|
||||||
final f = NumUtil.getRandomNumber(0, languageScene.length);
|
fromLanguage.value = languageScene.firstWhereOrNull(
|
||||||
final t = NumUtil.getRandomNumberExcludingCurrent(0, languageScene.length, f);
|
(e) => e.languageCode == fromLanguageEntity.languageCode,
|
||||||
fromLanguage.value = languageScene[f];
|
) ??
|
||||||
toLanguage.value = languageScene[t];
|
LanguageEntity(
|
||||||
|
languageCode: 'en',
|
||||||
|
languageName: 'English',
|
||||||
|
);
|
||||||
|
toLanguage.value = languageScene.firstWhereOrNull(
|
||||||
|
(e) => e.languageCode == toLanguageEntity.languageCode,
|
||||||
|
) ??
|
||||||
|
LanguageEntity(
|
||||||
|
languageCode: 'zh-cn',
|
||||||
|
languageName: 'Chinese (Simplified)',
|
||||||
|
);
|
||||||
|
// final f = NumUtil.getRandomNumber(0, languageScene.length);
|
||||||
|
// final t = NumUtil.getRandomNumberExcludingCurrent(0, languageScene.length, f);
|
||||||
|
// fromLanguage.value = languageScene[f];
|
||||||
|
// toLanguage.value = languageScene[t];
|
||||||
|
|
||||||
var data = jsonDecode(await rootBundle.loadString(Assets.jsonTranslationScene));
|
var data =
|
||||||
|
jsonDecode(await rootBundle.loadString(Assets.jsonTranslationScene));
|
||||||
if (data != null && data is List) {
|
if (data != null && data is List) {
|
||||||
var sceneTypeList = data.map((e) => SceneEntity.fromMap(e)).toList();
|
var sceneTypeList = data.map((e) => SceneEntity.fromMap(e)).toList();
|
||||||
if (sceneTypeList.isNotEmpty) {
|
if (sceneTypeList.isNotEmpty) {
|
||||||
@ -91,7 +112,10 @@ class HomeLogic extends GetxController {
|
|||||||
int index = 0;
|
int index = 0;
|
||||||
for (var i = 0; i < keys.length; ++i) {
|
for (var i = 0; i < keys.length; ++i) {
|
||||||
var e = keys[i];
|
var e = keys[i];
|
||||||
if (e == (isFrom ? fromLanguage.value?.languageName : toLanguage.value?.languageName)) {
|
if (e ==
|
||||||
|
(isFrom
|
||||||
|
? fromLanguage.value?.languageName
|
||||||
|
: toLanguage.value?.languageName)) {
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -106,7 +130,9 @@ class HomeLogic extends GetxController {
|
|||||||
if (fromLanguage.value != null && toLanguage.value != null) {
|
if (fromLanguage.value != null && toLanguage.value != null) {
|
||||||
TtsManager().translatorTtsPlay(
|
TtsManager().translatorTtsPlay(
|
||||||
isFrom ? fromStr.value! : toStr.value!,
|
isFrom ? fromStr.value! : toStr.value!,
|
||||||
isFrom ? fromLanguage.value!.languageCode : toLanguage.value!.languageCode,
|
isFrom
|
||||||
|
? fromLanguage.value!.languageCode
|
||||||
|
: toLanguage.value!.languageCode,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,7 +153,8 @@ class HomeLogic extends GetxController {
|
|||||||
isScrollControlled: true,
|
isScrollControlled: true,
|
||||||
PhotoPickerBottomSheet(
|
PhotoPickerBottomSheet(
|
||||||
funCamera: () async {
|
funCamera: () async {
|
||||||
bool result = await PermissionUtil.checkPermission([Permission.camera]);
|
bool result =
|
||||||
|
await PermissionUtil.checkPermission([Permission.camera]);
|
||||||
if (!result) return;
|
if (!result) return;
|
||||||
_openCameraGallery(ImageSource.camera);
|
_openCameraGallery(ImageSource.camera);
|
||||||
},
|
},
|
||||||
@ -155,29 +182,33 @@ class HomeLogic extends GetxController {
|
|||||||
final XFile? photo = await picker.pickImage(source: source);
|
final XFile? photo = await picker.pickImage(source: source);
|
||||||
if (photo != null) {
|
if (photo != null) {
|
||||||
Get.to(() => SelectImageAreaTextDetect(
|
Get.to(() => SelectImageAreaTextDetect(
|
||||||
detectOnce: true,
|
detectOnce: true,
|
||||||
enableImageInteractions: true,
|
enableImageInteractions: true,
|
||||||
imagePath: photo.path,
|
imagePath: photo.path,
|
||||||
onDetectText: (v) {
|
onDetectText: (v) {
|
||||||
if (v is String) {
|
if (v is String) {
|
||||||
detectedValue = v;
|
detectedValue = v;
|
||||||
}
|
}
|
||||||
if (v is List) {
|
if (v is List) {
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
for (var element in v) {
|
for (var element in v) {
|
||||||
detectedValue += "$counter. \t\t $element \n\n";
|
detectedValue += "$counter. \t\t $element \n\n";
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onDetectError: (error) {
|
onDetectError: (error) {
|
||||||
///This error will occurred in Android only while user will try to crop image at max zoom level then ml kit will throw max 32 height/width exception
|
///This error will occurred in Android only while user will try to crop image at max zoom level then ml kit will throw max 32 height/width exception
|
||||||
if (error is PlatformException && (error.message?.contains("InputImage width and height should be at least 32!") ?? false)) {
|
if (error is PlatformException &&
|
||||||
BaseEasyLoading.toast('Selected area should be able to crop image with at least 32 width and height.');
|
(error.message?.contains(
|
||||||
}
|
"InputImage width and height should be at least 32!") ??
|
||||||
},
|
false)) {
|
||||||
))?.then(
|
BaseEasyLoading.toast(
|
||||||
(onValue) {
|
'Selected area should be able to crop image with at least 32 width and height.');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
))?.then(
|
||||||
|
(onValue) {
|
||||||
if (ObjUtil.isEmpty(detectedValue)) {
|
if (ObjUtil.isEmpty(detectedValue)) {
|
||||||
BaseEasyLoading.toast('No text recognized');
|
BaseEasyLoading.toast('No text recognized');
|
||||||
return;
|
return;
|
||||||
@ -192,10 +223,12 @@ class HomeLogic extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> onTapSpeak() async {
|
Future<void> onTapSpeak() async {
|
||||||
bool micResult = await PermissionUtil.checkPermission([Permission.microphone]);
|
bool micResult =
|
||||||
|
await PermissionUtil.checkPermission([Permission.microphone]);
|
||||||
if (!micResult) return;
|
if (!micResult) return;
|
||||||
if (Platform.isIOS) {
|
if (Platform.isIOS) {
|
||||||
bool speechResult = await PermissionUtil.checkPermission([Permission.speech]);
|
bool speechResult =
|
||||||
|
await PermissionUtil.checkPermission([Permission.speech]);
|
||||||
if (!speechResult) return;
|
if (!speechResult) return;
|
||||||
}
|
}
|
||||||
await Get.dialog(
|
await Get.dialog(
|
||||||
@ -211,7 +244,9 @@ class HomeLogic extends GetxController {
|
|||||||
if (SpeechToTextManager().isListening.value) {
|
if (SpeechToTextManager().isListening.value) {
|
||||||
_openTranslatorResultPage();
|
_openTranslatorResultPage();
|
||||||
} else {
|
} else {
|
||||||
SpeechToTextManager().startListening(TranslateLanguage().fromLanguageEntity.value.languageCode, _onSpeechResult);
|
SpeechToTextManager().startListening(
|
||||||
|
TranslateLanguage().fromLanguageEntity.value.languageCode,
|
||||||
|
_onSpeechResult);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Get.back();
|
Get.back();
|
||||||
@ -247,10 +282,12 @@ class HomeLogic extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> openFaceToFace() async {
|
Future<void> openFaceToFace() async {
|
||||||
bool micResult = await PermissionUtil.checkPermission([Permission.microphone]);
|
bool micResult =
|
||||||
|
await PermissionUtil.checkPermission([Permission.microphone]);
|
||||||
if (!micResult) return;
|
if (!micResult) return;
|
||||||
if (Platform.isIOS) {
|
if (Platform.isIOS) {
|
||||||
bool speechResult = await PermissionUtil.checkPermission([Permission.speech]);
|
bool speechResult =
|
||||||
|
await PermissionUtil.checkPermission([Permission.speech]);
|
||||||
if (!speechResult) return;
|
if (!speechResult) return;
|
||||||
}
|
}
|
||||||
Get.toNamed(GetRouter.faceToFace);
|
Get.toNamed(GetRouter.faceToFace);
|
||||||
|
|||||||
@ -145,7 +145,8 @@ class HomePage extends StatelessWidget {
|
|||||||
height: 76,
|
height: 76,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: const Color.fromARGB(213, 69, 168, 254),
|
color:
|
||||||
|
const Color.fromARGB(213, 69, 168, 254),
|
||||||
borderRadius: BorderRadius.circular(16),
|
borderRadius: BorderRadius.circular(16),
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
width: 1.5,
|
width: 1.5,
|
||||||
@ -168,7 +169,8 @@ class HomePage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 20),
|
padding:
|
||||||
|
const EdgeInsets.only(right: 20),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: logic.onTapSpeak,
|
onTap: logic.onTapSpeak,
|
||||||
child: Container(
|
child: Container(
|
||||||
@ -177,10 +179,11 @@ class HomePage extends StatelessWidget {
|
|||||||
padding: const EdgeInsets.all(5),
|
padding: const EdgeInsets.all(5),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: const Color(0xff8BCFFE),
|
color: const Color(0xff8BCFFE),
|
||||||
borderRadius: BorderRadius.circular(18),
|
borderRadius:
|
||||||
|
BorderRadius.circular(18),
|
||||||
),
|
),
|
||||||
child:
|
child: SvgPicture.asset(
|
||||||
SvgPicture.asset(Assets.svgHomeVoice),
|
Assets.svgHomeVoice),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -188,13 +191,9 @@ class HomePage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(
|
const SizedBox(height: 20),
|
||||||
height: 20,
|
|
||||||
),
|
|
||||||
const LanguageBar(),
|
const LanguageBar(),
|
||||||
const SizedBox(
|
const SizedBox(height: 20),
|
||||||
height: 20,
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -323,7 +322,9 @@ class HomePage extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Obx(() {
|
Obx(() {
|
||||||
return Text(
|
return Text(
|
||||||
logic.fromLanguage.value != null ? logic.fromLanguage.value!.languageName : '',
|
logic.fromLanguage.value != null
|
||||||
|
? logic.fromLanguage.value!.languageName
|
||||||
|
: '',
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: Color(0xffC2C3C5),
|
color: Color(0xffC2C3C5),
|
||||||
@ -354,7 +355,8 @@ class HomePage extends StatelessWidget {
|
|||||||
height: 24,
|
height: 24,
|
||||||
padding: const EdgeInsets.all(3),
|
padding: const EdgeInsets.all(3),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: const Color.fromARGB(78, 78, 202, 140),
|
color:
|
||||||
|
const Color.fromARGB(78, 78, 202, 140),
|
||||||
borderRadius: BorderRadius.circular(12)),
|
borderRadius: BorderRadius.circular(12)),
|
||||||
child: FittedBox(
|
child: FittedBox(
|
||||||
fit: BoxFit.none,
|
fit: BoxFit.none,
|
||||||
@ -382,7 +384,9 @@ class HomePage extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Obx(() {
|
Obx(() {
|
||||||
return Text(
|
return Text(
|
||||||
logic.toLanguage.value != null ? logic.toLanguage.value!.languageName : '',
|
logic.toLanguage.value != null
|
||||||
|
? logic.toLanguage.value!.languageName
|
||||||
|
: '',
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: Color(0xffC2C3C5),
|
color: Color(0xffC2C3C5),
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import 'package:get/get_state_manager/get_state_manager.dart';
|
|||||||
import 'package:trans_lark/entity/language_entity.dart';
|
import 'package:trans_lark/entity/language_entity.dart';
|
||||||
import 'package:trans_lark/generated/assets.dart';
|
import 'package:trans_lark/generated/assets.dart';
|
||||||
import 'package:trans_lark/global/translate_language.dart';
|
import 'package:trans_lark/global/translate_language.dart';
|
||||||
|
import 'package:trans_lark/page/home/home_logic.dart';
|
||||||
import 'package:trans_lark/widget/base_scrollbar.dart';
|
import 'package:trans_lark/widget/base_scrollbar.dart';
|
||||||
import 'package:trans_lark/widget/language_bar.dart';
|
import 'package:trans_lark/widget/language_bar.dart';
|
||||||
|
|
||||||
@ -112,6 +113,9 @@ class LanguageBottomSheet extends StatelessWidget {
|
|||||||
fn?.languageName = item.languageName;
|
fn?.languageName = item.languageName;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if(Get.isRegistered<HomeLogic>()) {
|
||||||
|
HomeLogic.to.getDailyQuote();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onTapFrom() {
|
void _onTapFrom() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user