From a1bfd4a3f83adaf9ac57ba6d4c98b4941be81a8d Mon Sep 17 00:00:00 2001 From: xh <36baea72@gmail.com> Date: Tue, 23 Jul 2024 14:08:40 +0800 Subject: [PATCH] 1 --- lib/page/home/home_logic.dart | 115 +++++++++++++++++--------- lib/page/home/home_view.dart | 32 +++---- lib/widget/language_bottom_sheet.dart | 4 + 3 files changed, 98 insertions(+), 53 deletions(-) diff --git a/lib/page/home/home_logic.dart b/lib/page/home/home_logic.dart index 9d978c5..929dfd2 100755 --- a/lib/page/home/home_logic.dart +++ b/lib/page/home/home_logic.dart @@ -29,6 +29,7 @@ import 'package:trans_lark/widget/speak_dialog.dart'; /// @author /// @date: 2024-06-26 14:23:43 class HomeLogic extends GetxController { + static HomeLogic get to => Get.find(); var lastWords = ''; var fromLanguage = Rx(null); @@ -45,14 +46,19 @@ class HomeLogic extends GetxController { @override void onReady() { super.onReady(); - _getDailyQuote(); + getDailyQuote(); } - Future _getDailyQuote() async { + Future getDailyQuote() async { + LanguageEntity fromLanguageEntity = + TranslateLanguage().fromLanguageEntity.value; + LanguageEntity toLanguageEntity = + TranslateLanguage().toLanguageEntity.value; var languageScene = [ LanguageEntity(languageCode: 'ar', languageName: 'Arabic'), 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: 'fr', languageName: 'French'), LanguageEntity(languageCode: 'de', languageName: 'German'), @@ -65,12 +71,27 @@ class HomeLogic extends GetxController { LanguageEntity(languageCode: 'ru', languageName: 'Russian'), LanguageEntity(languageCode: 'es', languageName: 'Spanish'), ]; - final f = NumUtil.getRandomNumber(0, languageScene.length); - final t = NumUtil.getRandomNumberExcludingCurrent(0, languageScene.length, f); - fromLanguage.value = languageScene[f]; - toLanguage.value = languageScene[t]; + fromLanguage.value = languageScene.firstWhereOrNull( + (e) => e.languageCode == fromLanguageEntity.languageCode, + ) ?? + 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) { var sceneTypeList = data.map((e) => SceneEntity.fromMap(e)).toList(); if (sceneTypeList.isNotEmpty) { @@ -91,7 +112,10 @@ class HomeLogic extends GetxController { int index = 0; for (var i = 0; i < keys.length; ++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; break; } @@ -106,7 +130,9 @@ class HomeLogic extends GetxController { if (fromLanguage.value != null && toLanguage.value != null) { TtsManager().translatorTtsPlay( 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, PhotoPickerBottomSheet( funCamera: () async { - bool result = await PermissionUtil.checkPermission([Permission.camera]); + bool result = + await PermissionUtil.checkPermission([Permission.camera]); if (!result) return; _openCameraGallery(ImageSource.camera); }, @@ -155,29 +182,33 @@ class HomeLogic extends GetxController { final XFile? photo = await picker.pickImage(source: source); if (photo != null) { Get.to(() => SelectImageAreaTextDetect( - detectOnce: true, - enableImageInteractions: true, - imagePath: photo.path, - onDetectText: (v) { - if (v is String) { - detectedValue = v; - } - if (v is List) { - int counter = 0; - for (var element in v) { - detectedValue += "$counter. \t\t $element \n\n"; - counter++; - } - } - }, - 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 - if (error is PlatformException && (error.message?.contains("InputImage width and height should be at least 32!") ?? false)) { - BaseEasyLoading.toast('Selected area should be able to crop image with at least 32 width and height.'); - } - }, - ))?.then( - (onValue) { + detectOnce: true, + enableImageInteractions: true, + imagePath: photo.path, + onDetectText: (v) { + if (v is String) { + detectedValue = v; + } + if (v is List) { + int counter = 0; + for (var element in v) { + detectedValue += "$counter. \t\t $element \n\n"; + counter++; + } + } + }, + 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 + if (error is PlatformException && + (error.message?.contains( + "InputImage width and height should be at least 32!") ?? + false)) { + BaseEasyLoading.toast( + 'Selected area should be able to crop image with at least 32 width and height.'); + } + }, + ))?.then( + (onValue) { if (ObjUtil.isEmpty(detectedValue)) { BaseEasyLoading.toast('No text recognized'); return; @@ -192,10 +223,12 @@ class HomeLogic extends GetxController { } Future onTapSpeak() async { - bool micResult = await PermissionUtil.checkPermission([Permission.microphone]); + bool micResult = + await PermissionUtil.checkPermission([Permission.microphone]); if (!micResult) return; if (Platform.isIOS) { - bool speechResult = await PermissionUtil.checkPermission([Permission.speech]); + bool speechResult = + await PermissionUtil.checkPermission([Permission.speech]); if (!speechResult) return; } await Get.dialog( @@ -211,7 +244,9 @@ class HomeLogic extends GetxController { if (SpeechToTextManager().isListening.value) { _openTranslatorResultPage(); } else { - SpeechToTextManager().startListening(TranslateLanguage().fromLanguageEntity.value.languageCode, _onSpeechResult); + SpeechToTextManager().startListening( + TranslateLanguage().fromLanguageEntity.value.languageCode, + _onSpeechResult); } } else { Get.back(); @@ -247,10 +282,12 @@ class HomeLogic extends GetxController { } Future openFaceToFace() async { - bool micResult = await PermissionUtil.checkPermission([Permission.microphone]); + bool micResult = + await PermissionUtil.checkPermission([Permission.microphone]); if (!micResult) return; if (Platform.isIOS) { - bool speechResult = await PermissionUtil.checkPermission([Permission.speech]); + bool speechResult = + await PermissionUtil.checkPermission([Permission.speech]); if (!speechResult) return; } Get.toNamed(GetRouter.faceToFace); diff --git a/lib/page/home/home_view.dart b/lib/page/home/home_view.dart index 89722dd..4619759 100755 --- a/lib/page/home/home_view.dart +++ b/lib/page/home/home_view.dart @@ -145,7 +145,8 @@ class HomePage extends StatelessWidget { height: 76, alignment: Alignment.center, decoration: BoxDecoration( - color: const Color.fromARGB(213, 69, 168, 254), + color: + const Color.fromARGB(213, 69, 168, 254), borderRadius: BorderRadius.circular(16), border: Border.all( width: 1.5, @@ -168,7 +169,8 @@ class HomePage extends StatelessWidget { ), ), Padding( - padding: const EdgeInsets.only(right: 20), + padding: + const EdgeInsets.only(right: 20), child: GestureDetector( onTap: logic.onTapSpeak, child: Container( @@ -177,10 +179,11 @@ class HomePage extends StatelessWidget { padding: const EdgeInsets.all(5), decoration: BoxDecoration( color: const Color(0xff8BCFFE), - borderRadius: BorderRadius.circular(18), + borderRadius: + BorderRadius.circular(18), ), - child: - SvgPicture.asset(Assets.svgHomeVoice), + child: SvgPicture.asset( + Assets.svgHomeVoice), ), ), ) @@ -188,13 +191,9 @@ class HomePage extends StatelessWidget { ), ), ), - const SizedBox( - height: 20, - ), + const SizedBox(height: 20), const LanguageBar(), - const SizedBox( - height: 20, - ), + const SizedBox(height: 20), ], ), ], @@ -323,7 +322,9 @@ class HomePage extends StatelessWidget { children: [ Obx(() { return Text( - logic.fromLanguage.value != null ? logic.fromLanguage.value!.languageName : '', + logic.fromLanguage.value != null + ? logic.fromLanguage.value!.languageName + : '', style: const TextStyle( fontSize: 12, color: Color(0xffC2C3C5), @@ -354,7 +355,8 @@ class HomePage extends StatelessWidget { height: 24, padding: const EdgeInsets.all(3), decoration: BoxDecoration( - color: const Color.fromARGB(78, 78, 202, 140), + color: + const Color.fromARGB(78, 78, 202, 140), borderRadius: BorderRadius.circular(12)), child: FittedBox( fit: BoxFit.none, @@ -382,7 +384,9 @@ class HomePage extends StatelessWidget { children: [ Obx(() { return Text( - logic.toLanguage.value != null ? logic.toLanguage.value!.languageName : '', + logic.toLanguage.value != null + ? logic.toLanguage.value!.languageName + : '', style: const TextStyle( fontSize: 12, color: Color(0xffC2C3C5), diff --git a/lib/widget/language_bottom_sheet.dart b/lib/widget/language_bottom_sheet.dart index 1149d2b..9e77daf 100644 --- a/lib/widget/language_bottom_sheet.dart +++ b/lib/widget/language_bottom_sheet.dart @@ -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/generated/assets.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/language_bar.dart'; @@ -112,6 +113,9 @@ class LanguageBottomSheet extends StatelessWidget { fn?.languageName = item.languageName; }); } + if(Get.isRegistered()) { + HomeLogic.to.getDailyQuote(); + } } void _onTapFrom() {