1
This commit is contained in:
parent
abceb3b772
commit
a1bfd4a3f8
@ -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<HomeLogic>();
|
||||
var lastWords = '';
|
||||
|
||||
var fromLanguage = Rx<LanguageEntity?>(null);
|
||||
@ -45,14 +46,19 @@ class HomeLogic extends GetxController {
|
||||
@override
|
||||
void 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>[
|
||||
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<void> 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<void> 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);
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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>()) {
|
||||
HomeLogic.to.getDailyQuote();
|
||||
}
|
||||
}
|
||||
|
||||
void _onTapFrom() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user