From 577a4e6b8fad900fdffe50bc9c7af8a685b09ebc Mon Sep 17 00:00:00 2001 From: xh <36baea72@gmail.com> Date: Tue, 23 Jul 2024 16:16:11 +0800 Subject: [PATCH] 1 --- lib/entity/history_model.dart | 4 - lib/entity/scene_entity.dart | 4 - lib/entity/translator_history_entity.dart | 1 - lib/global/app_config.dart | 9 - .../app_tracking_authorization_manager.dart | 7 +- ..._manager.dart => flutter_tts_manager.dart} | 16 +- lib/global/global_config.dart | 4 + lib/global/speech_to_text_manager.dart | 16 +- ...e_language.dart => translate_manager.dart} | 12 +- lib/main.dart | 18 +- .../face_to_face/face_to_face_binding.dart | 3 +- .../face_to_face/face_to_face_controller.dart | 19 +- lib/page/face_to_face/face_to_face_view.dart | 3 +- lib/page/home/home_logic.dart | 22 +- lib/page/home/home_view.dart | 21 +- lib/page/scene_list/scene_list_binding.dart | 3 +- .../scene_list/scene_list_controller.dart | 12 +- lib/page/scene_list/scene_list_view.dart | 6 +- lib/page/scene_type/scene_type_binding.dart | 3 +- .../scene_type/scene_type_controller.dart | 2 +- lib/page/scene_type/scene_type_view.dart | 3 +- lib/page/settings/settings_controller.dart | 2 +- lib/page/settings/settings_view.dart | 4 +- lib/page/splash/splash_controller.dart | 2 +- lib/page/translator/translator_logic.dart | 18 +- lib/page/translator/translator_view.dart | 210 +++++++++--------- .../translator_history_logic.dart | 18 +- .../translator_history_state.dart | 3 - .../translator_history_view.dart | 8 +- .../translator_result_logic.dart | 37 ++- .../translator_result_state.dart | 4 - .../translator_result_view.dart | 26 ++- lib/page/web_page/web_page_binding.dart | 3 +- lib/page/web_page/web_page_controller.dart | 3 +- lib/{core => }/router/router.dart | 2 - lib/storage/history_data.dart | 4 - lib/storage/hive_storage.dart | 4 - lib/util/date_util.dart | 8 - lib/util/device_info_util.dart | 4 - lib/util/log_print.dart | 46 ++++ lib/util/num_util.dart | 6 +- lib/util/obj_util.dart | 6 +- lib/util/permission_util.dart | 37 +-- lib/widget/base_appbar.dart | 23 +- lib/widget/base_easyloading.dart | 4 - lib/widget/base_scrollbar.dart | 4 - lib/widget/divider_widget.dart | 4 - lib/widget/language_bar.dart | 46 ++-- lib/widget/language_bottom_sheet.dart | 59 +++-- lib/widget/remind_dialog.dart | 4 - lib/widget/speak_dialog.dart | 14 +- .../translate_text_full_screen_page.dart | 9 +- lib/widget/view_state_widget.dart | 4 - pubspec.yaml | 69 +----- 54 files changed, 423 insertions(+), 460 deletions(-) delete mode 100644 lib/global/app_config.dart rename lib/global/{tts_manager.dart => flutter_tts_manager.dart} (76%) mode change 100755 => 100644 create mode 100644 lib/global/global_config.dart rename lib/global/{translate_language.dart => translate_manager.dart} (88%) rename lib/{core => }/router/router.dart (95%) mode change 100755 => 100644 create mode 100644 lib/util/log_print.dart diff --git a/lib/entity/history_model.dart b/lib/entity/history_model.dart index f3aa465..07045d6 100644 --- a/lib/entity/history_model.dart +++ b/lib/entity/history_model.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/6/4 -// Description: 历史记录模型 - import 'dart:convert'; import 'package:hive/hive.dart'; diff --git a/lib/entity/scene_entity.dart b/lib/entity/scene_entity.dart index 79d0ee9..cf4906e 100644 --- a/lib/entity/scene_entity.dart +++ b/lib/entity/scene_entity.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/7/8 -// Description: 常用场景模型 - import 'dart:convert'; class SceneEntity { diff --git a/lib/entity/translator_history_entity.dart b/lib/entity/translator_history_entity.dart index d940404..807791c 100755 --- a/lib/entity/translator_history_entity.dart +++ b/lib/entity/translator_history_entity.dart @@ -1,4 +1,3 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first import 'dart:convert'; class TranslatorHistoryEntity { diff --git a/lib/global/app_config.dart b/lib/global/app_config.dart deleted file mode 100644 index 0f4766c..0000000 --- a/lib/global/app_config.dart +++ /dev/null @@ -1,9 +0,0 @@ -// Author: fengshengxiong -// Date: 2024/6/13 -// Description: App配置 - -class AppConfig { - /// App名称 - static const appName = 'TransLark'; -} - diff --git a/lib/global/app_tracking_authorization_manager.dart b/lib/global/app_tracking_authorization_manager.dart index 9a7a955..03da7ef 100644 --- a/lib/global/app_tracking_authorization_manager.dart +++ b/lib/global/app_tracking_authorization_manager.dart @@ -1,12 +1,9 @@ -// Author: fengshengxiong -// Date: 2024/6/26 -// Description: iOS跟踪授权工具 - import 'dart:async'; import 'dart:io'; import 'package:app_tracking_transparency/app_tracking_transparency.dart'; import 'package:flutter/material.dart'; +import 'package:trans_lark/util/log_print.dart'; class AppTrackingAuthorizationManager { AppTrackingAuthorizationManager._(); @@ -26,7 +23,7 @@ class AppTrackingAuthorizationManager { if (status == TrackingStatus.notDetermined) { if (_timer != null && _timer!.isActive) { final TrackingStatus status = await AppTrackingTransparency.requestTrackingAuthorization(); - debugPrint('跟踪授权状态: $status'); + LogPrint.d('跟踪授权状态: $status'); } else { _startTimer(); } diff --git a/lib/global/tts_manager.dart b/lib/global/flutter_tts_manager.dart old mode 100755 new mode 100644 similarity index 76% rename from lib/global/tts_manager.dart rename to lib/global/flutter_tts_manager.dart index 5652869..3ae1efb --- a/lib/global/tts_manager.dart +++ b/lib/global/flutter_tts_manager.dart @@ -1,20 +1,20 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter_tts/flutter_tts.dart'; +import 'package:trans_lark/util/log_print.dart'; import 'package:trans_lark/widget/base_easyloading.dart'; -class TtsManager { - TtsManager._(); +class FlutterTtsManager { + FlutterTtsManager._(); - static final TtsManager _instance = TtsManager._(); + static final FlutterTtsManager _instance = FlutterTtsManager._(); - factory TtsManager() { + factory FlutterTtsManager() { return _instance; } late FlutterTts ttsController; - Future initTts() async { - debugPrint("TTS Service init start"); + Future init() async { + LogPrint.d("TTS Service init start"); ttsController = FlutterTts(); await ttsController.setSharedInstance(true); await ttsController.setIosAudioCategory( @@ -27,7 +27,7 @@ class TtsManager { IosTextToSpeechAudioMode.voicePrompt); await ttsController.awaitSpeakCompletion(true); await ttsController.awaitSynthCompletion(true); - debugPrint("TTS Service init success"); + LogPrint.d("TTS Service init success"); } Future translatorTtsPlay(String text, String language) async { diff --git a/lib/global/global_config.dart b/lib/global/global_config.dart new file mode 100644 index 0000000..b659a80 --- /dev/null +++ b/lib/global/global_config.dart @@ -0,0 +1,4 @@ +class GlobalConfig { + static const appName = 'TransLark'; +} + diff --git a/lib/global/speech_to_text_manager.dart b/lib/global/speech_to_text_manager.dart index eb884fc..59bd5a9 100644 --- a/lib/global/speech_to_text_manager.dart +++ b/lib/global/speech_to_text_manager.dart @@ -1,11 +1,7 @@ -// Author: fengshengxiong -// Date: 2024/5/8 -// Description: 语音转文本 - -import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:speech_to_text/speech_recognition_error.dart'; import 'package:speech_to_text/speech_to_text.dart'; +import 'package:trans_lark/util/log_print.dart'; import 'package:trans_lark/widget/base_easyloading.dart'; class SpeechToTextManager { @@ -32,12 +28,12 @@ class SpeechToTextManager { _speechToText.statusListener ??= _statusListener; _speechToText.errorListener ??= _errorListener; } catch (e) { - debugPrint('Speech recognition failed: ${e.toString()}'); + LogPrint.d('Speech recognition failed: ${e.toString()}'); } } void _statusListener(String status) { - debugPrint('状态:$status'); + LogPrint.d('状态:$status'); if (status == 'listening') { isListening.value = true; } else { @@ -46,7 +42,7 @@ class SpeechToTextManager { } void _errorListener(SpeechRecognitionError error) { - debugPrint('Received error status: $error, listening: ${_speechToText.isListening}'); + LogPrint.d('Received error status: $error, listening: ${_speechToText.isListening}'); BaseEasyLoading.toast('Speech recognition failed: ${error.errorMsg}'); } @@ -67,9 +63,9 @@ class SpeechToTextManager { BaseEasyLoading.dismiss(); } catch (e) { if (e.runtimeType == ListenFailedException) { - debugPrint('speechToText.listen:${(e as ListenFailedException).message}'); + LogPrint.d('speechToText.listen:${(e as ListenFailedException).message}'); } else { - debugPrint('speechToText.listen:${e.toString()}'); + LogPrint.d('speechToText.listen:${e.toString()}'); } BaseEasyLoading.toast('The current language does not support speech recognition'); } diff --git a/lib/global/translate_language.dart b/lib/global/translate_manager.dart similarity index 88% rename from lib/global/translate_language.dart rename to lib/global/translate_manager.dart index dd752e3..a4ccf7c 100644 --- a/lib/global/translate_language.dart +++ b/lib/global/translate_manager.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/8 -// Description: 历史数据操作单例 - import 'dart:convert'; import 'dart:ui'; @@ -12,12 +8,12 @@ import 'package:trans_lark/entity/language_entity.dart'; import 'package:trans_lark/generated/assets.dart'; import 'package:trans_lark/util/num_util.dart'; -class TranslateLanguage { - TranslateLanguage._(); +class TranslateManager { + TranslateManager._(); - static final TranslateLanguage _instance = TranslateLanguage._(); + static final TranslateManager _instance = TranslateManager._(); - factory TranslateLanguage() { + factory TranslateManager() { return _instance; } diff --git a/lib/main.dart b/lib/main.dart index 5e2376a..899ff8a 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,10 +5,10 @@ import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:get/get.dart'; -import 'package:trans_lark/core/router/router.dart'; -import 'package:trans_lark/global/app_config.dart'; -import 'package:trans_lark/global/translate_language.dart'; -import 'package:trans_lark/global/tts_manager.dart'; +import 'package:trans_lark/global/flutter_tts_manager.dart'; +import 'package:trans_lark/global/global_config.dart'; +import 'package:trans_lark/global/translate_manager.dart'; +import 'package:trans_lark/router/router.dart'; import 'package:trans_lark/storage/hive_storage.dart'; import 'package:trans_lark/widget/base_easyloading.dart'; @@ -31,8 +31,8 @@ void main() async { )); } - await TranslateLanguage().init(); - await TtsManager().initTts(); + await TranslateManager().init(); + await FlutterTtsManager().init(); runApp(const MyApp()); } @@ -46,9 +46,11 @@ class MyApp extends StatelessWidget { return KeyboardDismissOnTap( child: GetMaterialApp( debugShowCheckedModeBanner: false, - title: AppConfig.appName, + title: GlobalConfig.appName, theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: const Color.fromARGB(255, 185, 239, 200)), + colorScheme: ColorScheme.fromSeed( + seedColor: const Color.fromARGB(255, 185, 239, 200), + ), useMaterial3: true, ), initialRoute: GetRouter.home, diff --git a/lib/page/face_to_face/face_to_face_binding.dart b/lib/page/face_to_face/face_to_face_binding.dart index b3c77e8..e4ea3d3 100644 --- a/lib/page/face_to_face/face_to_face_binding.dart +++ b/lib/page/face_to_face/face_to_face_binding.dart @@ -1,6 +1,5 @@ import 'package:get/get.dart'; - -import 'face_to_face_controller.dart'; +import 'package:trans_lark/page/face_to_face/face_to_face_controller.dart'; class FaceToFaceBinding extends Bindings { @override diff --git a/lib/page/face_to_face/face_to_face_controller.dart b/lib/page/face_to_face/face_to_face_controller.dart index 49ccb40..e93ad23 100644 --- a/lib/page/face_to_face/face_to_face_controller.dart +++ b/lib/page/face_to_face/face_to_face_controller.dart @@ -1,9 +1,10 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:speech_to_text/speech_recognition_result.dart'; +import 'package:trans_lark/global/translate_manager.dart'; +import 'package:trans_lark/util/log_print.dart'; import 'package:translator/translator.dart'; import 'package:trans_lark/global/speech_to_text_manager.dart'; -import 'package:trans_lark/global/translate_language.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/widget/base_easyloading.dart'; @@ -58,14 +59,14 @@ class FaceToFaceController extends GetxController with GetSingleTickerProviderSt } selectedUnder.value = true; _scrollToBottom(); - SpeechToTextManager().startListening(TranslateLanguage().fromLanguageEntity.value.languageCode, _onSpeechResult); + SpeechToTextManager().startListening(TranslateManager().fromLanguageEntity.value.languageCode, _onSpeechResult); } else { if (selectedUnder.value) { await SpeechToTextManager().stopListening(); } selectedUnder.value = false; _scrollToBottom(); - SpeechToTextManager().startListening(TranslateLanguage().toLanguageEntity.value.languageCode, _onSpeechResult); + SpeechToTextManager().startListening(TranslateManager().toLanguageEntity.value.languageCode, _onSpeechResult); } } else { BaseEasyLoading.toast('Speech not available'); @@ -73,19 +74,19 @@ class FaceToFaceController extends GetxController with GetSingleTickerProviderSt } Future _onSpeechResult(SpeechRecognitionResult result) async { - debugPrint('识别结果:${result.recognizedWords}'); + LogPrint.d('识别结果:${result.recognizedWords}'); if (ObjUtil.isNotEmptyStr(result.recognizedWords)) { if (selectedUnder.value) { underText.value += '${result.recognizedWords}\n'; var translateText = await _translation(result.recognizedWords); - debugPrint('翻译结果:${result.recognizedWords}'); + LogPrint.d('翻译结果:${result.recognizedWords}'); if (ObjUtil.isNotEmptyStr(translateText)) { aboveText.value += '$translateText\n'; } } else { aboveText.value += '${result.recognizedWords}\n'; var translateText = await _translation(result.recognizedWords); - debugPrint('翻译结果:${result.recognizedWords}'); + LogPrint.d('翻译结果:${result.recognizedWords}'); if (ObjUtil.isNotEmptyStr(translateText)) { underText.value += '$translateText\n'; } @@ -96,8 +97,8 @@ class FaceToFaceController extends GetxController with GetSingleTickerProviderSt Future _translation(String sourceText) async { try { - String from = selectedUnder.value ? TranslateLanguage().fromLanguageEntity.value.languageCode : TranslateLanguage().toLanguageEntity.value.languageCode; - String to = selectedUnder.value ? TranslateLanguage().toLanguageEntity.value.languageCode : TranslateLanguage().fromLanguageEntity.value.languageCode; + String from = selectedUnder.value ? TranslateManager().fromLanguageEntity.value.languageCode : TranslateManager().toLanguageEntity.value.languageCode; + String to = selectedUnder.value ? TranslateManager().toLanguageEntity.value.languageCode : TranslateManager().fromLanguageEntity.value.languageCode; Translation translate = await _translator.translate( sourceText, from: from, @@ -105,7 +106,7 @@ class FaceToFaceController extends GetxController with GetSingleTickerProviderSt ); return translate.text; } catch (e) { - debugPrint('Translation failed,${e.toString()}'); + LogPrint.d('Translation failed,${e.toString()}'); } return ''; } diff --git a/lib/page/face_to_face/face_to_face_view.dart b/lib/page/face_to_face/face_to_face_view.dart index f8ee388..fb8bc94 100644 --- a/lib/page/face_to_face/face_to_face_view.dart +++ b/lib/page/face_to_face/face_to_face_view.dart @@ -3,13 +3,12 @@ import 'package:flutter_svg/svg.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; import 'package:trans_lark/global/speech_to_text_manager.dart'; +import 'package:trans_lark/page/face_to_face/face_to_face_controller.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/widget/base_appbar.dart'; import 'package:wave/config.dart'; import 'package:wave/wave.dart'; -import 'face_to_face_controller.dart'; - class FaceToFaceView extends StatelessWidget { FaceToFaceView({super.key}); diff --git a/lib/page/home/home_logic.dart b/lib/page/home/home_logic.dart index 929dfd2..9a69b97 100755 --- a/lib/page/home/home_logic.dart +++ b/lib/page/home/home_logic.dart @@ -1,23 +1,23 @@ import 'dart:convert'; import 'dart:io'; -import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_text_detect_area/flutter_text_detect_area.dart'; import 'package:get/get.dart'; import 'package:image_picker/image_picker.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:speech_to_text/speech_recognition_result.dart'; -import 'package:trans_lark/core/router/router.dart'; import 'package:trans_lark/entity/language_entity.dart'; import 'package:trans_lark/entity/scene_entity.dart'; import 'package:trans_lark/generated/assets.dart'; import 'package:trans_lark/global/app_tracking_authorization_manager.dart'; +import 'package:trans_lark/global/flutter_tts_manager.dart'; import 'package:trans_lark/global/speech_to_text_manager.dart'; -import 'package:trans_lark/global/translate_language.dart'; -import 'package:trans_lark/global/tts_manager.dart'; +import 'package:trans_lark/global/translate_manager.dart'; import 'package:trans_lark/page/settings/settings_view.dart'; +import 'package:trans_lark/router/router.dart'; import 'package:trans_lark/util/device_info_util.dart'; +import 'package:trans_lark/util/log_print.dart'; import 'package:trans_lark/util/num_util.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/util/permission_util.dart'; @@ -25,9 +25,6 @@ import 'package:trans_lark/widget/base_easyloading.dart'; import 'package:trans_lark/widget/photo_picker_bottom_sheet.dart'; import 'package:trans_lark/widget/speak_dialog.dart'; -/// @description: -/// @author -/// @date: 2024-06-26 14:23:43 class HomeLogic extends GetxController { static HomeLogic get to => Get.find(); var lastWords = ''; @@ -51,9 +48,8 @@ class HomeLogic extends GetxController { Future getDailyQuote() async { LanguageEntity fromLanguageEntity = - TranslateLanguage().fromLanguageEntity.value; - LanguageEntity toLanguageEntity = - TranslateLanguage().toLanguageEntity.value; + TranslateManager().fromLanguageEntity.value; + LanguageEntity toLanguageEntity = TranslateManager().toLanguageEntity.value; var languageScene = [ LanguageEntity(languageCode: 'ar', languageName: 'Arabic'), LanguageEntity(languageCode: 'bn', languageName: 'Bengali'), @@ -128,7 +124,7 @@ class HomeLogic extends GetxController { void translatorTtsPlay(bool isFrom) { if (fromLanguage.value != null && toLanguage.value != null) { - TtsManager().translatorTtsPlay( + FlutterTtsManager().translatorTtsPlay( isFrom ? fromStr.value! : toStr.value!, isFrom ? fromLanguage.value!.languageCode @@ -245,7 +241,7 @@ class HomeLogic extends GetxController { _openTranslatorResultPage(); } else { SpeechToTextManager().startListening( - TranslateLanguage().fromLanguageEntity.value.languageCode, + TranslateManager().fromLanguageEntity.value.languageCode, _onSpeechResult); } } else { @@ -261,7 +257,7 @@ class HomeLogic extends GetxController { } void _onSpeechResult(SpeechRecognitionResult result) { - debugPrint('识别结果:${result.recognizedWords}'); + LogPrint.d('识别结果:${result.recognizedWords}'); lastWords = result.recognizedWords; } diff --git a/lib/page/home/home_view.dart b/lib/page/home/home_view.dart index 4619759..64141ad 100755 --- a/lib/page/home/home_view.dart +++ b/lib/page/home/home_view.dart @@ -6,9 +6,6 @@ import 'package:trans_lark/page/home/home_logic.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/widget/language_bar.dart'; -/// @description: 翻译首页 -/// @author : lifu -/// @date: 2024-06-26 14:23:43 class HomePage extends StatelessWidget { final HomeLogic logic = Get.put(HomeLogic()); @@ -145,8 +142,12 @@ 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, @@ -169,8 +170,9 @@ class HomePage extends StatelessWidget { ), ), Padding( - padding: - const EdgeInsets.only(right: 20), + padding: const EdgeInsets.only( + right: 20, + ), child: GestureDetector( onTap: logic.onTapSpeak, child: Container( @@ -183,10 +185,11 @@ class HomePage extends StatelessWidget { BorderRadius.circular(18), ), child: SvgPicture.asset( - Assets.svgHomeVoice), + Assets.svgHomeVoice, + ), ), ), - ) + ), ], ), ), diff --git a/lib/page/scene_list/scene_list_binding.dart b/lib/page/scene_list/scene_list_binding.dart index de4fb91..a4b9bf0 100644 --- a/lib/page/scene_list/scene_list_binding.dart +++ b/lib/page/scene_list/scene_list_binding.dart @@ -1,6 +1,5 @@ import 'package:get/get.dart'; - -import 'scene_list_controller.dart'; +import 'package:trans_lark/page/scene_list/scene_list_controller.dart'; class SceneListBinding extends Bindings { @override diff --git a/lib/page/scene_list/scene_list_controller.dart b/lib/page/scene_list/scene_list_controller.dart index 09e9317..f06b287 100644 --- a/lib/page/scene_list/scene_list_controller.dart +++ b/lib/page/scene_list/scene_list_controller.dart @@ -1,7 +1,7 @@ import 'package:get/get.dart'; import 'package:trans_lark/entity/language_entity.dart'; import 'package:trans_lark/entity/scene_entity.dart'; -import 'package:trans_lark/global/tts_manager.dart'; +import 'package:trans_lark/global/flutter_tts_manager.dart'; import 'package:trans_lark/widget/language_scene_bottom_sheet.dart'; class SceneListController extends GetxController { @@ -57,7 +57,10 @@ class SceneListController 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; } @@ -69,8 +72,9 @@ class SceneListController extends GetxController { } void translatorTtsPlay(bool isFrom, SceneList item) { - TtsManager().translatorTtsPlay( - getSentence(isFrom, item), isFrom ? fromLanguage.value.languageCode : toLanguage.value.languageCode + FlutterTtsManager().translatorTtsPlay( + getSentence(isFrom, item), + isFrom ? fromLanguage.value.languageCode : toLanguage.value.languageCode, ); } } diff --git a/lib/page/scene_list/scene_list_view.dart b/lib/page/scene_list/scene_list_view.dart index 8cff489..2208a8f 100644 --- a/lib/page/scene_list/scene_list_view.dart +++ b/lib/page/scene_list/scene_list_view.dart @@ -3,12 +3,11 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:trans_lark/entity/scene_entity.dart'; import 'package:trans_lark/generated/assets.dart'; +import 'package:trans_lark/page/scene_list/scene_list_controller.dart'; import 'package:trans_lark/widget/base_appbar.dart'; import 'package:trans_lark/widget/base_scrollbar.dart'; import 'package:trans_lark/widget/language_scene_bar.dart'; -import 'scene_list_controller.dart'; - class SceneListView extends StatelessWidget { SceneListView({super.key}); @@ -33,7 +32,8 @@ class SceneListView extends StatelessWidget { Expanded( child: BaseScrollbar( child: ListView.separated( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + padding: + const EdgeInsets.symmetric(horizontal: 16, vertical: 12), itemCount: controller.sceneList.length, itemBuilder: (context, index) { var item = controller.sceneList[index]; diff --git a/lib/page/scene_type/scene_type_binding.dart b/lib/page/scene_type/scene_type_binding.dart index ff54032..9b6000d 100644 --- a/lib/page/scene_type/scene_type_binding.dart +++ b/lib/page/scene_type/scene_type_binding.dart @@ -1,6 +1,5 @@ import 'package:get/get.dart'; - -import 'scene_type_controller.dart'; +import 'package:trans_lark/page/scene_type/scene_type_controller.dart'; class SceneTypeBinding extends Bindings { @override diff --git a/lib/page/scene_type/scene_type_controller.dart b/lib/page/scene_type/scene_type_controller.dart index ab93d78..5d4c9a9 100644 --- a/lib/page/scene_type/scene_type_controller.dart +++ b/lib/page/scene_type/scene_type_controller.dart @@ -2,9 +2,9 @@ import 'dart:convert'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; -import 'package:trans_lark/core/router/router.dart'; import 'package:trans_lark/entity/scene_entity.dart'; import 'package:trans_lark/generated/assets.dart'; +import 'package:trans_lark/router/router.dart'; import 'package:trans_lark/widget/view_state_widget.dart'; class SceneTypeController extends GetxController { diff --git a/lib/page/scene_type/scene_type_view.dart b/lib/page/scene_type/scene_type_view.dart index 17eb59f..87f67cd 100644 --- a/lib/page/scene_type/scene_type_view.dart +++ b/lib/page/scene_type/scene_type_view.dart @@ -3,13 +3,12 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:trans_lark/entity/scene_entity.dart'; import 'package:trans_lark/generated/assets.dart'; +import 'package:trans_lark/page/scene_type/scene_type_controller.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/widget/base_appbar.dart'; import 'package:trans_lark/widget/base_scrollbar.dart'; import 'package:trans_lark/widget/view_state_widget.dart'; -import 'scene_type_controller.dart'; - class SceneTypeView extends StatelessWidget { SceneTypeView({super.key}); diff --git a/lib/page/settings/settings_controller.dart b/lib/page/settings/settings_controller.dart index 207936e..970d3a7 100644 --- a/lib/page/settings/settings_controller.dart +++ b/lib/page/settings/settings_controller.dart @@ -1,6 +1,6 @@ import 'package:get/get.dart'; import 'package:package_info_plus/package_info_plus.dart'; -import 'package:trans_lark/core/router/router.dart'; +import 'package:trans_lark/router/router.dart'; class SettingsController extends GetxController { var versionName = ''.obs; diff --git a/lib/page/settings/settings_view.dart b/lib/page/settings/settings_view.dart index 36f32b6..b1d094a 100644 --- a/lib/page/settings/settings_view.dart +++ b/lib/page/settings/settings_view.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; -import 'package:trans_lark/global/app_config.dart'; +import 'package:trans_lark/global/global_config.dart'; import 'package:trans_lark/widget/divider_widget.dart'; import 'settings_controller.dart'; @@ -53,7 +53,7 @@ class SettingsView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( - AppConfig.appName, + GlobalConfig.appName, style: TextStyle( color: Colors.black, fontSize: 22, diff --git a/lib/page/splash/splash_controller.dart b/lib/page/splash/splash_controller.dart index 1fd3a03..c31292e 100644 --- a/lib/page/splash/splash_controller.dart +++ b/lib/page/splash/splash_controller.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:trans_lark/core/router/router.dart'; +import 'package:trans_lark/router/router.dart'; class SplashController extends GetxController with GetTickerProviderStateMixin { var processValue = 0.0.obs; diff --git a/lib/page/translator/translator_logic.dart b/lib/page/translator/translator_logic.dart index e66fd6b..952b0f4 100755 --- a/lib/page/translator/translator_logic.dart +++ b/lib/page/translator/translator_logic.dart @@ -1,14 +1,14 @@ import 'dart:io'; -import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:speech_to_text/speech_recognition_result.dart'; -import 'package:trans_lark/core/router/router.dart'; import 'package:trans_lark/entity/history_model.dart'; import 'package:trans_lark/global/speech_to_text_manager.dart'; -import 'package:trans_lark/global/translate_language.dart'; +import 'package:trans_lark/global/translate_manager.dart'; +import 'package:trans_lark/router/router.dart'; import 'package:trans_lark/storage/history_data.dart'; +import 'package:trans_lark/util/log_print.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/util/permission_util.dart'; import 'package:trans_lark/widget/base_easyloading.dart'; @@ -48,10 +48,12 @@ class TranslatorLogic 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( @@ -67,7 +69,9 @@ class TranslatorLogic extends GetxController { if (SpeechToTextManager().isListening.value) { _openTranslatorResultPage(); } else { - SpeechToTextManager().startListening(TranslateLanguage().fromLanguageEntity.value.languageCode, _onSpeechResult); + SpeechToTextManager().startListening( + TranslateManager().fromLanguageEntity.value.languageCode, + _onSpeechResult); } } else { Get.back(); @@ -82,7 +86,7 @@ class TranslatorLogic extends GetxController { } void _onSpeechResult(SpeechRecognitionResult result) { - debugPrint('识别结果:${result.recognizedWords}'); + LogPrint.d('识别结果:${result.recognizedWords}'); state.lastWords = result.recognizedWords; } diff --git a/lib/page/translator/translator_view.dart b/lib/page/translator/translator_view.dart index 47147ed..7c7ea8b 100755 --- a/lib/page/translator/translator_view.dart +++ b/lib/page/translator/translator_view.dart @@ -3,16 +3,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; +import 'package:trans_lark/page/translator/translator_logic.dart'; +import 'package:trans_lark/page/translator/translator_state.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/widget/base_appbar.dart'; import 'package:trans_lark/widget/language_bar.dart'; -import 'translator_logic.dart'; -import 'translator_state.dart'; - -/// @description: 翻译页面 -/// @lifu -/// @date: 2024-06-27 13:55:27 class TranslatorPage extends StatefulWidget { const TranslatorPage({super.key}); @@ -84,7 +80,8 @@ class _TranslatorPageState extends State { ), Obx(() { return Padding( - padding: EdgeInsets.only(top: state.isValue.value ? 26 : 20, right: 20), + padding: EdgeInsets.only( + top: state.isValue.value ? 26 : 20, right: 20), child: GestureDetector( onTap: logic.onTapSuffix, child: ClipOval( @@ -113,118 +110,123 @@ class _TranslatorPageState extends State { ], ), ), - Obx(() => state.historyList.isNotEmpty - ? Expanded( - child: Column( - children: [ - const SizedBox(height: 30), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text( - "History", - style: TextStyle( - fontSize: 16, - color: Color(0xff979797), - fontWeight: FontWeight.w500, - ), - ), - IconButton( - onPressed: logic.cleanAllHistory, - icon: Image.asset( - Assets.imagesDeleteIcon, - width: 24, - height: 24, - ), - ), - ], - ), - Expanded( - child: ListView.builder( - itemCount: state.historyList.length, - itemBuilder: (context, index) { - final historyEntity = state.historyList[index]; - return CustomPopupMenu( - arrowColor: Colors.black, - barrierColor: Colors.transparent, - position: PreferredPosition.top, - verticalMargin: 0, - pressType: PressType.longPress, - menuBuilder: () { - return GestureDetector( - onTap: () => logic.deleteItem(index), - child: Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(8), + Obx( + () => state.historyList.isNotEmpty + ? Expanded( + child: Column( + children: [ + const SizedBox(height: 30), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + "History", + style: TextStyle( + fontSize: 16, + color: Color(0xff979797), + fontWeight: FontWeight.w500, ), - child: Image.asset( + ), + IconButton( + onPressed: logic.cleanAllHistory, + icon: Image.asset( Assets.imagesDeleteIcon, width: 24, height: 24, ), ), - ); - }, - child: InkWell( - onTap: () => logic.onTapHistoryItem(historyEntity), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.symmetric(vertical: 10), - child: RichText( - maxLines: 1, - overflow: TextOverflow.ellipsis, - text: TextSpan( + ], + ), + Expanded( + child: ListView.builder( + itemCount: state.historyList.length, + itemBuilder: (context, index) { + final historyEntity = state.historyList[index]; + return CustomPopupMenu( + arrowColor: Colors.black, + barrierColor: Colors.transparent, + position: PreferredPosition.top, + verticalMargin: 0, + pressType: PressType.longPress, + menuBuilder: () { + return GestureDetector( + onTap: () => logic.deleteItem(index), + child: Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: Colors.black, + borderRadius: + BorderRadius.circular(8), + ), + child: Image.asset( + Assets.imagesDeleteIcon, + width: 24, + height: 24, + ), + ), + ); + }, + child: InkWell( + onTap: () => + logic.onTapHistoryItem(historyEntity), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, children: [ - TextSpan( - text: ObjUtil.getStr( - historyEntity.sourceText), - style: const TextStyle( - fontWeight: FontWeight.w500, - fontSize: 16, - color: Color(0xff212121), - ), - ), - const WidgetSpan( - child: SizedBox( - width: 6, - ), - ), - TextSpan( - text: ObjUtil.getStr( - historyEntity.targetText), - style: const TextStyle( - color: Color(0xff979797), - fontSize: 13, - fontWeight: FontWeight.w400, + Padding( + padding: const EdgeInsets.symmetric( + vertical: 10), + child: RichText( + maxLines: 1, + overflow: TextOverflow.ellipsis, + text: TextSpan( + children: [ + TextSpan( + text: ObjUtil.getStr( + historyEntity.sourceText), + style: const TextStyle( + fontWeight: FontWeight.w500, + fontSize: 16, + color: Color(0xff212121), + ), + ), + const WidgetSpan( + child: SizedBox( + width: 6, + ), + ), + TextSpan( + text: ObjUtil.getStr( + historyEntity.targetText), + style: const TextStyle( + color: Color(0xff979797), + fontSize: 13, + fontWeight: FontWeight.w400, + ), + ), + ], + ), ), ), ], ), ), - ), - ], + ); + }, ), ), - ); - }, + ], + ), + ) + : Expanded( + child: Center( + child: Image.asset( + Assets.imagesRabbitSayGood, + width: 90, + height: 90, + ), + ), ), - ), - ], - ), - ) - : Expanded( - child: Center( - child: Image.asset( - Assets.imagesRabbitSayGood, - width: 90, - height: 90, - ), - ), - ), ), ], ), diff --git a/lib/page/translator_history/translator_history_logic.dart b/lib/page/translator_history/translator_history_logic.dart index 1ee8062..ccef8bc 100755 --- a/lib/page/translator_history/translator_history_logic.dart +++ b/lib/page/translator_history/translator_history_logic.dart @@ -1,15 +1,11 @@ import 'package:get/get.dart'; -import 'package:trans_lark/core/router/router.dart'; import 'package:trans_lark/entity/history_model.dart'; -import 'package:trans_lark/global/tts_manager.dart'; +import 'package:trans_lark/global/flutter_tts_manager.dart'; +import 'package:trans_lark/page/translator_history/translator_history_state.dart'; +import 'package:trans_lark/router/router.dart'; import 'package:trans_lark/storage/history_data.dart'; import 'package:trans_lark/util/obj_util.dart'; -import 'translator_history_state.dart'; - -/// @description: -/// @author -/// @date: 2024-06-28 16:26:22 class TranslatorHistoryLogic extends GetxController { final state = TranslatorHistoryState(); @@ -34,7 +30,10 @@ class TranslatorHistoryLogic extends GetxController { void translatorTtsPlay(HistoryEntity entity) { if (ObjUtil.isNotEmpty(entity.targetText)) { - TtsManager().translatorTtsPlay(entity.targetText!, entity.targetLanguageCode!); + FlutterTtsManager().translatorTtsPlay( + entity.targetText!, + entity.targetLanguageCode!, + ); } } @@ -46,7 +45,8 @@ class TranslatorHistoryLogic extends GetxController { if (state.historyList[key] != null && state.historyList[key]!.isEmpty) { state.historyList.remove(key); } - final deleteEntity = list.firstWhereOrNull((item) => item.translationTime == entity.translationTime); + final deleteEntity = list.firstWhereOrNull( + (item) => item.translationTime == entity.translationTime); if (deleteEntity != null) { HistoryData().delete(list.indexOf(deleteEntity)); } diff --git a/lib/page/translator_history/translator_history_state.dart b/lib/page/translator_history/translator_history_state.dart index ea45444..f332ee0 100755 --- a/lib/page/translator_history/translator_history_state.dart +++ b/lib/page/translator_history/translator_history_state.dart @@ -3,9 +3,6 @@ import 'package:get/get_rx/get_rx.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:trans_lark/entity/history_model.dart'; -/// @description: -/// @author -/// @date: 2024-06-28 16:26:22 class TranslatorHistoryState { RxMap> historyList = >{}.obs; } diff --git a/lib/page/translator_history/translator_history_view.dart b/lib/page/translator_history/translator_history_view.dart index 9212079..5f70486 100755 --- a/lib/page/translator_history/translator_history_view.dart +++ b/lib/page/translator_history/translator_history_view.dart @@ -2,16 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; +import 'package:trans_lark/page/translator_history/translator_history_logic.dart'; +import 'package:trans_lark/page/translator_history/translator_history_state.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/widget/base_appbar.dart'; import 'package:trans_lark/widget/base_scrollbar.dart'; -import 'translator_history_logic.dart'; -import 'translator_history_state.dart'; - -/// @description: -/// @author -/// @date: 2024-06-28 16:26:22 class TranslatorHistoryPage extends StatefulWidget { static String routName = "/translateHistory"; diff --git a/lib/page/translator_result/translator_result_logic.dart b/lib/page/translator_result/translator_result_logic.dart index ea4a90b..5c169e3 100755 --- a/lib/page/translator_result/translator_result_logic.dart +++ b/lib/page/translator_result/translator_result_logic.dart @@ -1,21 +1,17 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; +import 'package:trans_lark/global/flutter_tts_manager.dart'; +import 'package:trans_lark/global/translate_manager.dart'; +import 'package:trans_lark/page/translator_result/translator_result_state.dart'; +import 'package:trans_lark/util/log_print.dart'; import 'package:translator/translator.dart'; import 'package:trans_lark/entity/history_model.dart'; -import 'package:trans_lark/global/translate_language.dart'; -import 'package:trans_lark/global/tts_manager.dart'; import 'package:trans_lark/page/translator/translator_logic.dart'; import 'package:trans_lark/storage/history_data.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/widget/base_easyloading.dart'; import 'package:trans_lark/widget/translate_text_full_screen_page.dart'; -import 'translator_result_state.dart'; - -/// @description: -/// @author -/// @date: 2024-06-27 16:53:29 class TranslatorResultPageLogic extends GetxController { final state = TranslatorResultPageState(); @@ -44,14 +40,14 @@ class TranslatorResultPageLogic extends GetxController { try { Translation translate = await state.translator.translate( state.sourceText.value, - from: TranslateLanguage().fromLanguageEntity.value.languageCode, - to: TranslateLanguage().toLanguageEntity.value.languageCode, + from: TranslateManager().fromLanguageEntity.value.languageCode, + to: TranslateManager().toLanguageEntity.value.languageCode, ); state.targetText.value = translate.text; addHistory(); } catch (e) { BaseEasyLoading.toast('Translation failed'); - debugPrint('Translation failed,${e.toString()}'); + LogPrint.d('Translation failed,${e.toString()}'); } state.isTranslationCompleted.value = true; } @@ -62,13 +58,13 @@ class TranslatorResultPageLogic extends GetxController { sourceText: state.sourceText.value, targetText: state.targetText.value, sourceLanguageName: - TranslateLanguage().fromLanguageEntity.value.languageName, + TranslateManager().fromLanguageEntity.value.languageName, sourceLanguageCode: - TranslateLanguage().fromLanguageEntity.value.languageCode, + TranslateManager().fromLanguageEntity.value.languageCode, targetLanguageName: - TranslateLanguage().toLanguageEntity.value.languageName, + TranslateManager().toLanguageEntity.value.languageName, targetLanguageCode: - TranslateLanguage().toLanguageEntity.value.languageCode, + TranslateManager().toLanguageEntity.value.languageCode, ); HistoryData().addData(entity); if (Get.isRegistered()) { @@ -79,16 +75,19 @@ class TranslatorResultPageLogic extends GetxController { void translatorTtsPlay(String text, type) { if (ObjUtil.isNotEmpty(text)) { - String language = TranslateLanguage().fromLanguageEntity.value.languageCode; + String language = + TranslateManager().fromLanguageEntity.value.languageCode; switch (type) { case "from": - language = state.fromLanguage ?? TranslateLanguage().fromLanguageEntity.value.languageCode; + language = state.fromLanguage ?? + TranslateManager().fromLanguageEntity.value.languageCode; break; case "to": - language = state.toLanguage ?? TranslateLanguage().toLanguageEntity.value.languageCode; + language = state.toLanguage ?? + TranslateManager().toLanguageEntity.value.languageCode; break; } - TtsManager().translatorTtsPlay(text, language); + FlutterTtsManager().translatorTtsPlay(text, language); } } diff --git a/lib/page/translator_result/translator_result_state.dart b/lib/page/translator_result/translator_result_state.dart index 1cbc1d2..ad642a3 100755 --- a/lib/page/translator_result/translator_result_state.dart +++ b/lib/page/translator_result/translator_result_state.dart @@ -1,10 +1,6 @@ import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:translator/translator.dart'; -import 'package:trans_lark/entity/history_model.dart'; -/// @description: -/// @author -/// @date: 2024-06-27 16:53:29 class TranslatorResultPageState { var translator = GoogleTranslator(); RxString sourceText = "".obs; diff --git a/lib/page/translator_result/translator_result_view.dart b/lib/page/translator_result/translator_result_view.dart index b4b373c..c917ff6 100755 --- a/lib/page/translator_result/translator_result_view.dart +++ b/lib/page/translator_result/translator_result_view.dart @@ -2,16 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; -import 'package:trans_lark/global/translate_language.dart'; +import 'package:trans_lark/global/translate_manager.dart'; import 'package:trans_lark/page/translator_result/translator_result_logic.dart'; import 'package:trans_lark/page/translator_result/translator_result_state.dart'; import 'package:trans_lark/util/obj_util.dart'; import 'package:trans_lark/widget/base_appbar.dart'; import 'package:trans_lark/widget/language_result_bar.dart'; -/// @description: -/// @author -/// @date: 2024-06-27 16:53:29 class TranslatorResultPage extends StatefulWidget { const TranslatorResultPage({super.key}); @@ -22,7 +19,8 @@ class TranslatorResultPage extends StatefulWidget { class _TranslatorResultPageState extends State { final TranslatorResultPageLogic logic = Get.put(TranslatorResultPageLogic()); - final TranslatorResultPageState state = Get.find().state; + final TranslatorResultPageState state = + Get.find().state; @override Widget build(BuildContext context) { @@ -43,10 +41,10 @@ class _TranslatorResultPageState extends State { titleWidget: LanguageResultBar( fromLanguage: state.isHistory ? (state.fromLanguage != null ? state.fromLanguage! : '') - : TranslateLanguage().fromLanguageEntity.value.languageName, + : TranslateManager().fromLanguageEntity.value.languageName, toLanguage: state.isHistory ? (state.toLanguage != null ? state.toLanguage! : '') - : TranslateLanguage().toLanguageEntity.value.languageName, + : TranslateManager().toLanguageEntity.value.languageName, ), ), Expanded( @@ -92,7 +90,8 @@ class _TranslatorResultPageState extends State { height: 30, ), GestureDetector( - onTap: () => logic.translatorTtsPlay(state.sourceText.value, "from"), + onTap: () => logic.translatorTtsPlay( + state.sourceText.value, "from"), child: ClipOval( child: Container( width: 32, @@ -131,7 +130,10 @@ class _TranslatorResultPageState extends State { children: [ Flexible( child: Text( - TranslateLanguage().toLanguageEntity.value.languageName, + TranslateManager() + .toLanguageEntity + .value + .languageName, style: const TextStyle( color: Color(0xff949494), fontSize: 16, @@ -170,11 +172,13 @@ class _TranslatorResultPageState extends State { ), Obx(() { return Visibility( - visible: ObjUtil.isNotEmptyStr(state.targetText.value), + visible: + ObjUtil.isNotEmptyStr(state.targetText.value), child: Row( children: [ GestureDetector( - onTap: () => logic.translatorTtsPlay(state.targetText.value, "to"), + onTap: () => logic.translatorTtsPlay( + state.targetText.value, "to"), child: ClipOval( child: Container( width: 32, diff --git a/lib/page/web_page/web_page_binding.dart b/lib/page/web_page/web_page_binding.dart index b6fd67e..3b03d86 100644 --- a/lib/page/web_page/web_page_binding.dart +++ b/lib/page/web_page/web_page_binding.dart @@ -1,6 +1,5 @@ import 'package:get/get.dart'; - -import 'web_page_controller.dart'; +import 'package:trans_lark/page/web_page/web_page_controller.dart'; class WebPageBinding extends Bindings { @override diff --git a/lib/page/web_page/web_page_controller.dart b/lib/page/web_page/web_page_controller.dart index 7c158b0..d3cd3da 100644 --- a/lib/page/web_page/web_page_controller.dart +++ b/lib/page/web_page/web_page_controller.dart @@ -26,8 +26,7 @@ class WebPageController extends GetxController { onPageFinished: (String url) { viewState.value = ViewState.normal; }, - onWebResourceError: (WebResourceError error) { - }, + onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) { return NavigationDecision.navigate; }, diff --git a/lib/core/router/router.dart b/lib/router/router.dart old mode 100755 new mode 100644 similarity index 95% rename from lib/core/router/router.dart rename to lib/router/router.dart index 81d3eeb..ee77491 --- a/lib/core/router/router.dart +++ b/lib/router/router.dart @@ -6,8 +6,6 @@ import 'package:trans_lark/page/scene_list/scene_list_binding.dart'; import 'package:trans_lark/page/scene_list/scene_list_view.dart'; import 'package:trans_lark/page/scene_type/scene_type_binding.dart'; import 'package:trans_lark/page/scene_type/scene_type_view.dart'; -import 'package:trans_lark/page/splash/splash_binding.dart'; -import 'package:trans_lark/page/splash/splash_view.dart'; import 'package:trans_lark/page/translator/translator_view.dart'; import 'package:trans_lark/page/translator_history/translator_history_view.dart'; import 'package:trans_lark/page/translator_result/translator_result_view.dart'; diff --git a/lib/storage/history_data.dart b/lib/storage/history_data.dart index 080a753..399da5b 100644 --- a/lib/storage/history_data.dart +++ b/lib/storage/history_data.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/8 -// Description: 历史数据操作单例 - import 'package:collection/collection.dart'; import 'package:trans_lark/entity/history_model.dart'; import 'package:trans_lark/storage/hive_storage.dart'; diff --git a/lib/storage/hive_storage.dart b/lib/storage/hive_storage.dart index 7c114fb..ecfdf44 100644 --- a/lib/storage/hive_storage.dart +++ b/lib/storage/hive_storage.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/8 -// Description: 持久化储存 - import 'package:hive_flutter/hive_flutter.dart'; import 'package:trans_lark/entity/history_model.dart'; diff --git a/lib/util/date_util.dart b/lib/util/date_util.dart index 38cbf29..237e35b 100644 --- a/lib/util/date_util.dart +++ b/lib/util/date_util.dart @@ -1,11 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/11 -// Description: 日期工具类 - -/// 一些常用格式参照。可以自定义格式,例如:'yyyy/MM/dd HH:mm:ss','yyyy/M/d HH:mm:ss'。 -/// 格式要求 -/// year -> yyyy/yy month -> MM/M day -> dd/d -/// hour -> HH/H minute -> mm/m second -> ss/s class DateFormats { static String full = 'yyyy-MM-dd HH:mm:ss'; static String yMoDHM = 'yyyy-MM-dd HH:mm'; diff --git a/lib/util/device_info_util.dart b/lib/util/device_info_util.dart index aeb1d09..61df21c 100644 --- a/lib/util/device_info_util.dart +++ b/lib/util/device_info_util.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/11 -// Description: 设备信息 - import 'package:device_info_plus/device_info_plus.dart'; class DeviceInfoUtil { diff --git a/lib/util/log_print.dart b/lib/util/log_print.dart new file mode 100644 index 0000000..5fd9b75 --- /dev/null +++ b/lib/util/log_print.dart @@ -0,0 +1,46 @@ +import 'package:logger/logger.dart'; + +final _logger = Logger( + printer: PrettyPrinter( + // 要显示的方法调用的数量 + methodCount: 0, + // 如果提供了stacktrace,则方法调用的数量 + errorMethodCount: 8, + // 输出的宽度 + lineLength: 120, + // 丰富多彩的日志消息 + colors: true, + // 是否打印表情符号 + printEmojis: true, + // 是否打印时间 + printTime: false, + ), +); + +class LogPrint { + static const String _tag = 'LogPrint'; + + LogPrint.t(dynamic msg, {String tag = _tag}) { + _logger.t('[$tag]: $msg'); + } + + LogPrint.d(dynamic msg, {String tag = _tag}) { + _logger.d('[$tag]: $msg'); + } + + LogPrint.i(dynamic msg, {String tag = _tag}) { + _logger.i('[$tag]: $msg'); + } + + LogPrint.w(dynamic msg, {String tag = _tag}) { + _logger.w('[$tag]: $msg'); + } + + LogPrint.e(dynamic msg, {String tag = _tag}) { + _logger.e('[$tag]: $msg'); + } + + LogPrint.f(dynamic msg, {String tag = _tag}) { + _logger.f('[$tag]: $msg'); + } +} \ No newline at end of file diff --git a/lib/util/num_util.dart b/lib/util/num_util.dart index d9abd77..a05aabc 100644 --- a/lib/util/num_util.dart +++ b/lib/util/num_util.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/7 -// Description: 整数、浮点数工具类 - import 'dart:math'; class NumUtil { @@ -20,4 +16,4 @@ class NumUtil { } while (newNumber == current); return newNumber; } -} \ No newline at end of file +} diff --git a/lib/util/obj_util.dart b/lib/util/obj_util.dart index d1a6fae..4347e97 100644 --- a/lib/util/obj_util.dart +++ b/lib/util/obj_util.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/7 -// Description: 对象工具类 - class ObjUtil { static bool isNotEmptyStr(String? str) { return str != null && str.trim().isNotEmpty; @@ -48,4 +44,4 @@ class ObjUtil { } return true; } -} \ No newline at end of file +} diff --git a/lib/util/permission_util.dart b/lib/util/permission_util.dart index a4b3a6e..06fee9a 100644 --- a/lib/util/permission_util.dart +++ b/lib/util/permission_util.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/10 -// Description: 权限处理 - import 'dart:io'; import 'package:get/get.dart'; @@ -11,7 +7,8 @@ import 'package:trans_lark/widget/remind_dialog.dart'; class PermissionUtil { /// 检测是否有权限 /// [permissionList] 权限申请列表 - static Future checkPermission(List permissionList, {bool showDialog = true}) async { + static Future checkPermission(List permissionList, + {bool showDialog = true}) async { // 一个新待申请权限列表 List newPermissionList = []; // 遍历当前权限申请列表 @@ -25,7 +22,8 @@ class PermissionUtil { // 如果需要重新申请的列表不是空的 if (newPermissionList.isNotEmpty) { - PermissionStatus permissionStatus = await _requestPermission(newPermissionList); + PermissionStatus permissionStatus = + await _requestPermission(newPermissionList); switch (permissionStatus) { // 拒绝状态 case PermissionStatus.denied: @@ -39,7 +37,8 @@ class PermissionUtil { case PermissionStatus.provisional: case PermissionStatus.restricted: case PermissionStatus.permanentlyDenied: - if (showDialog) _showFailedDialog(newPermissionList, isPermanentlyDenied: true); + if (showDialog) + _showFailedDialog(newPermissionList, isPermanentlyDenied: true); break; } } else { @@ -49,7 +48,8 @@ class PermissionUtil { } /// 获取新列表中的权限 如果有一项不合格就返回false - static Future _requestPermission(List permissionList) async { + static Future _requestPermission( + List permissionList) async { Map statuses = await permissionList.request(); PermissionStatus currentPermissionStatus = PermissionStatus.granted; statuses.forEach((key, value) { @@ -81,7 +81,8 @@ class PermissionUtil { return true; } else { // 如果有一个拒绝那么就失败了 - _showFailedDialog([Permission.locationWhenInUse, Permission.locationAlways], + _showFailedDialog( + [Permission.locationWhenInUse, Permission.locationAlways], isPermanentlyDenied: Platform.isIOS ? true : false, ); } @@ -102,7 +103,8 @@ class PermissionUtil { } /// 权限拒绝后弹窗 - static _showFailedDialog(List permissionList, {bool isPermanentlyDenied = false}) async { + static _showFailedDialog(List permissionList, + {bool isPermanentlyDenied = false}) async { Get.dialog( barrierDismissible: false, RemindDialog( @@ -131,15 +133,20 @@ class PermissionUtil { String description = ''; if (failedPermission == Permission.camera) { - description = 'This will enable you to take photos and recognize text within them for translation.'; + description = + 'This will enable you to take photos and recognize text within them for translation.'; } else if (failedPermission == Permission.photos) { - description = 'This will enable you to select photos from your library for text recognition and translation.'; + description = + 'This will enable you to select photos from your library for text recognition and translation.'; } else if (failedPermission == Permission.microphone) { - description = 'This will enable you to input content through voice for recognition and translation.'; + description = + 'This will enable you to input content through voice for recognition and translation.'; } else if (failedPermission == Permission.speech) { - description = 'This will enable you to use speech recognition to convert voice content to text for translation.'; + description = + 'This will enable you to use speech recognition to convert voice content to text for translation.'; } else if (failedPermission == Permission.appTrackingTransparency) { - description = 'This will help us provide a more personalized advertising experience. Your data privacy will be protected.'; + description = + 'This will help us provide a more personalized advertising experience. Your data privacy will be protected.'; } return description; } diff --git a/lib/widget/base_appbar.dart b/lib/widget/base_appbar.dart index 6f5dc0c..1723639 100644 --- a/lib/widget/base_appbar.dart +++ b/lib/widget/base_appbar.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/7 -// Description: BaseAppBar - import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; @@ -69,15 +65,16 @@ class BaseAppBar extends StatelessWidget implements PreferredSizeWidget { ), ), Expanded( - child: titleWidget ?? Text( - title ?? '', - overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: Colors.black, - fontSize: 16, - fontWeight: FontWeight.w500, - ), - ), + child: titleWidget ?? + Text( + title ?? '', + overflow: TextOverflow.ellipsis, + style: const TextStyle( + color: Colors.black, + fontSize: 16, + fontWeight: FontWeight.w500, + ), + ), ), SizedBox( width: 60, diff --git a/lib/widget/base_easyloading.dart b/lib/widget/base_easyloading.dart index 7ec946a..32f9bee 100644 --- a/lib/widget/base_easyloading.dart +++ b/lib/widget/base_easyloading.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/7 -// Description: 加载、进度、提示框 - import 'package:flutter_easyloading/flutter_easyloading.dart'; class BaseEasyLoading { diff --git a/lib/widget/base_scrollbar.dart b/lib/widget/base_scrollbar.dart index c52bf5a..029f093 100644 --- a/lib/widget/base_scrollbar.dart +++ b/lib/widget/base_scrollbar.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/6/17 -// Description: 列表滚动条 - import 'package:flutter/material.dart'; class BaseScrollbar extends StatelessWidget { diff --git a/lib/widget/divider_widget.dart b/lib/widget/divider_widget.dart index 8b1a888..13bcb74 100644 --- a/lib/widget/divider_widget.dart +++ b/lib/widget/divider_widget.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/9 -// Description: 分割线 - import 'package:flutter/material.dart'; class DividerWidget extends StatelessWidget { diff --git a/lib/widget/language_bar.dart b/lib/widget/language_bar.dart index e172ea8..b78fbf2 100755 --- a/lib/widget/language_bar.dart +++ b/lib/widget/language_bar.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; -import 'package:trans_lark/global/translate_language.dart'; +import 'package:trans_lark/global/translate_manager.dart'; import 'package:trans_lark/widget/language_bottom_sheet.dart'; class LanguageBar extends StatelessWidget { @@ -34,9 +34,17 @@ class LanguageBar extends StatelessWidget { const SizedBox(width: 8), Flexible( child: Text( - TranslateLanguage().fromLanguageEntity.value.languageName, + TranslateManager() + .fromLanguageEntity + .value + .languageName, style: TextStyle( - color: !isSelect || !TranslateLanguage().isSelectFromLanguage.value ? const Color(0xff435561) : const Color(0xff4ECA8C), + color: !isSelect || + !TranslateManager() + .isSelectFromLanguage + .value + ? const Color(0xff435561) + : const Color(0xff4ECA8C), fontSize: 14, fontWeight: FontWeight.w500, overflow: TextOverflow.ellipsis, @@ -91,9 +99,17 @@ class LanguageBar extends StatelessWidget { const SizedBox(width: 8), Flexible( child: Text( - TranslateLanguage().toLanguageEntity.value.languageName, + TranslateManager() + .toLanguageEntity + .value + .languageName, style: TextStyle( - color: !isSelect || TranslateLanguage().isSelectFromLanguage.value ? const Color(0xff435561) : const Color(0xff4ECA8C), + color: !isSelect || + TranslateManager() + .isSelectFromLanguage + .value + ? const Color(0xff435561) + : const Color(0xff4ECA8C), fontSize: 14, fontWeight: FontWeight.w500, overflow: TextOverflow.ellipsis, @@ -118,21 +134,25 @@ class LanguageBar extends StatelessWidget { } void _exchangeOnTap() { - var tempLanguageCode = TranslateLanguage().toLanguageEntity.value.languageCode; - var tempLanguageName = TranslateLanguage().toLanguageEntity.value.languageName; + var tempLanguageCode = + TranslateManager().toLanguageEntity.value.languageCode; + var tempLanguageName = + TranslateManager().toLanguageEntity.value.languageName; - TranslateLanguage().toLanguageEntity.update((fn) { - fn?.languageCode = TranslateLanguage().fromLanguageEntity.value.languageCode; - fn?.languageName = TranslateLanguage().fromLanguageEntity.value.languageName; + TranslateManager().toLanguageEntity.update((fn) { + fn?.languageCode = + TranslateManager().fromLanguageEntity.value.languageCode; + fn?.languageName = + TranslateManager().fromLanguageEntity.value.languageName; }); - TranslateLanguage().fromLanguageEntity.update((fn) { + TranslateManager().fromLanguageEntity.update((fn) { fn?.languageCode = tempLanguageCode; fn?.languageName = tempLanguageName; }); } void _onTapFrom() { - TranslateLanguage().isSelectFromLanguage.value = true; + TranslateManager().isSelectFromLanguage.value = true; Get.bottomSheet( isScrollControlled: true, const LanguageBottomSheet(), @@ -140,7 +160,7 @@ class LanguageBar extends StatelessWidget { } void _onTapTo() { - TranslateLanguage().isSelectFromLanguage.value = false; + TranslateManager().isSelectFromLanguage.value = false; Get.bottomSheet( isScrollControlled: true, const LanguageBottomSheet(), diff --git a/lib/widget/language_bottom_sheet.dart b/lib/widget/language_bottom_sheet.dart index 9e77daf..757a6cd 100644 --- a/lib/widget/language_bottom_sheet.dart +++ b/lib/widget/language_bottom_sheet.dart @@ -3,7 +3,7 @@ import 'package:get/get.dart'; 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/global/translate_manager.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'; @@ -19,7 +19,8 @@ class LanguageBottomSheet extends StatelessWidget { decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( - topLeft: Radius.circular(26), topRight: Radius.circular(26), + topLeft: Radius.circular(26), + topRight: Radius.circular(26), ), ), child: Column( @@ -50,15 +51,16 @@ class LanguageBottomSheet extends StatelessWidget { return Expanded( child: BaseScrollbar( child: ListView.builder( - itemCount: TranslateLanguage().languageList.length, + itemCount: TranslateManager().languageList.length, itemBuilder: (context, index) { - var item = TranslateLanguage().languageList[index]; + var item = TranslateManager().languageList[index]; return Material( color: Colors.transparent, child: InkWell( onTap: () => _itemOnTap(item), child: Container( - padding: const EdgeInsets.symmetric(vertical: 13, horizontal: 33), + padding: + const EdgeInsets.symmetric(vertical: 13, horizontal: 33), child: Row( children: [ Expanded( @@ -66,9 +68,22 @@ class LanguageBottomSheet extends StatelessWidget { return Text( item.languageName, style: TextStyle( - color: TranslateLanguage().isSelectFromLanguage.value - ? (item.languageName == TranslateLanguage().fromLanguageEntity.value.languageName ? const Color(0xff4ECA8C) : const Color(0xff152A3D)) - : (item.languageName == TranslateLanguage().toLanguageEntity.value.languageName ? const Color(0xff4ECA8C) : const Color(0xff152A3D)), + color: + TranslateManager().isSelectFromLanguage.value + ? (item.languageName == + TranslateManager() + .fromLanguageEntity + .value + .languageName + ? const Color(0xff4ECA8C) + : const Color(0xff152A3D)) + : (item.languageName == + TranslateManager() + .toLanguageEntity + .value + .languageName + ? const Color(0xff4ECA8C) + : const Color(0xff152A3D)), fontSize: 16, overflow: TextOverflow.ellipsis, ), @@ -77,9 +92,17 @@ class LanguageBottomSheet extends StatelessWidget { ), Obx(() { return Visibility( - visible: TranslateLanguage().isSelectFromLanguage.value - ? (item.languageName == TranslateLanguage().fromLanguageEntity.value.languageName) - : (item.languageName == TranslateLanguage().toLanguageEntity.value.languageName), + visible: TranslateManager().isSelectFromLanguage.value + ? (item.languageName == + TranslateManager() + .fromLanguageEntity + .value + .languageName) + : (item.languageName == + TranslateManager() + .toLanguageEntity + .value + .languageName), child: Padding( padding: const EdgeInsets.only(left: 10), child: Image.asset( @@ -102,27 +125,27 @@ class LanguageBottomSheet extends StatelessWidget { } void _itemOnTap(LanguageEntity item) { - if (TranslateLanguage().isSelectFromLanguage.value) { - TranslateLanguage().fromLanguageEntity.update((fn) { + if (TranslateManager().isSelectFromLanguage.value) { + TranslateManager().fromLanguageEntity.update((fn) { fn?.languageCode = item.languageCode; fn?.languageName = item.languageName; }); } else { - TranslateLanguage().toLanguageEntity.update((fn) { + TranslateManager().toLanguageEntity.update((fn) { fn?.languageCode = item.languageCode; fn?.languageName = item.languageName; }); } - if(Get.isRegistered()) { + if (Get.isRegistered()) { HomeLogic.to.getDailyQuote(); } } void _onTapFrom() { - TranslateLanguage().isSelectFromLanguage.value = true; + TranslateManager().isSelectFromLanguage.value = true; } void _onTapTo() { - TranslateLanguage().isSelectFromLanguage.value = false; + TranslateManager().isSelectFromLanguage.value = false; } -} \ No newline at end of file +} diff --git a/lib/widget/remind_dialog.dart b/lib/widget/remind_dialog.dart index 508061f..d587c28 100644 --- a/lib/widget/remind_dialog.dart +++ b/lib/widget/remind_dialog.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/11 -// Description: 提示框 - import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/widget/speak_dialog.dart b/lib/widget/speak_dialog.dart index ea67d12..3d6577c 100644 --- a/lib/widget/speak_dialog.dart +++ b/lib/widget/speak_dialog.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; -import 'package:trans_lark/global/translate_language.dart'; +import 'package:trans_lark/global/translate_manager.dart'; class SpeakDialog extends StatelessWidget { const SpeakDialog({ @@ -44,7 +44,8 @@ class SpeakDialog extends StatelessWidget { clipBehavior: Clip.antiAlias, decoration: const BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20)), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(20), topRight: Radius.circular(20)), ), child: Column( children: [ @@ -73,7 +74,10 @@ class SpeakDialog extends StatelessWidget { ), Flexible( child: Text( - TranslateLanguage().fromLanguageEntity.value.languageName, + TranslateManager() + .fromLanguageEntity + .value + .languageName, maxLines: 2, overflow: TextOverflow.ellipsis, style: const TextStyle( @@ -89,7 +93,9 @@ class SpeakDialog extends StatelessWidget { }), Obx(() { return Text( - isListening.value ? 'I am listening, Click the button to end and translate' : 'Click the button to start speaking', + isListening.value + ? 'I am listening, Click the button to end and translate' + : 'Click the button to start speaking', maxLines: 2, overflow: TextOverflow.ellipsis, textAlign: TextAlign.center, diff --git a/lib/widget/translate_text_full_screen_page.dart b/lib/widget/translate_text_full_screen_page.dart index 13e69a6..813d39f 100755 --- a/lib/widget/translate_text_full_screen_page.dart +++ b/lib/widget/translate_text_full_screen_page.dart @@ -3,8 +3,8 @@ import 'package:flutter/services.dart'; import 'package:flutter_svg/svg.dart'; import 'package:get/get.dart'; import 'package:trans_lark/generated/assets.dart'; -import 'package:trans_lark/global/translate_language.dart'; -import 'package:trans_lark/global/tts_manager.dart'; +import 'package:trans_lark/global/flutter_tts_manager.dart'; +import 'package:trans_lark/global/translate_manager.dart'; class TranslateTextFullScreenPage extends StatefulWidget { const TranslateTextFullScreenPage({super.key}); @@ -65,7 +65,10 @@ class _TranslateTextFullScreenPageState ), GestureDetector( onTap: () { - TtsManager().translatorTtsPlay(showData, TranslateLanguage().toLanguageEntity.value.languageCode); + FlutterTtsManager().translatorTtsPlay( + showData, + TranslateManager().toLanguageEntity.value.languageCode, + ); }, child: Padding( padding: const EdgeInsets.only(top: 20), diff --git a/lib/widget/view_state_widget.dart b/lib/widget/view_state_widget.dart index ceaa559..13e070e 100644 --- a/lib/widget/view_state_widget.dart +++ b/lib/widget/view_state_widget.dart @@ -1,7 +1,3 @@ -// Author: fengshengxiong -// Date: 2024/5/7 -// Description: 状态视图 - import 'package:flutter/material.dart'; /// 四种视图状态 diff --git a/pubspec.yaml b/pubspec.yaml index 239caf8..ed11c39 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,39 +1,16 @@ name: trans_lark description: "A new Flutter project." -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev +publish_to: 'none' -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -# In Windows, build-name is used as the major, minor, and patch parts -# of the product and file versions while build-number is used as the build suffix. version: 1.0.0+1 environment: sdk: '>=3.3.1 <4.0.0' -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.6 get: ^4.6.6 flutter_tts: ^4.0.2 @@ -85,6 +62,9 @@ dependencies: # 获取当前设备信息 device_info_plus: ^10.1.0 + # 日志打印 + logger: ^2.3.0 + flutter_launcher_icons: android: "launcher_icon" ios: true @@ -94,57 +74,16 @@ flutter_launcher_icons: dev_dependencies: flutter_test: sdk: flutter - - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. flutter_lints: ^3.0.0 hive_generator: ^2.0.1 build_runner: ^2.4.11 flutter_launcher_icons: ^0.13.1 -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. flutter: - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. uses-material-design: true - - # To add assets to your application, add an assets section, like this: assets: - assets/launcher_icon/ - assets/images/ - assets/svg/ - assets/json/ - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages