21 changed files with 92 additions and 99 deletions
@ -1,3 +1,42 @@ |
|||||
# deep_voice |
# Deep Voice |
||||
|
|
||||
A new Flutter project. |
Flutter 应用程序,使用 GetX 状态管理和依赖注入。 |
||||
|
|
||||
|
## 项目目录结构 |
||||
|
|
||||
|
``` |
||||
|
lib/ |
||||
|
├─ core/ |
||||
|
│ ├─ bindings/ # 全局或通用的 Bindings |
||||
|
│ ├─ constants/ # 常量、枚举、Key、全局配置等 |
||||
|
│ ├─ errors/ # 异常/错误处理相关 |
||||
|
│ ├─ themes/ # 主题(Color, TextStyle 等) |
||||
|
│ ├─ translations/ # 国际化、语言相关 |
||||
|
│ ├─ utils/ # 通用工具类、Helper、扩展函数等 |
||||
|
│ └─ widgets/ # 通用的无业务逻辑的Widgets |
||||
|
│ |
||||
|
├─ data/ |
||||
|
│ ├─ models/ # 数据模型(可与后端DTO对应) |
||||
|
│ ├─ repositories/ # 数据仓库(实际操作数据 CRUD, 远程或本地) |
||||
|
│ ├─ services/ # 第三方或原生平台封装,如网络请求、缓存、数据库等 |
||||
|
│ └─ providers/ # 适配器层,比如把网络、数据库等转换为 Repository 可调用的接口 |
||||
|
│ |
||||
|
├─ modules/ |
||||
|
│ ├─ login/ |
||||
|
│ │ ├─ controllers/ # GetX Controller |
||||
|
│ │ ├─ views/ # 页面、Widget |
||||
|
│ │ ├─ bindings/ # 该模块的 Bindings |
||||
|
│ │ └─ ... # 其他文件 |
||||
|
│ ├─ home/ |
||||
|
│ │ ├─ controllers/ |
||||
|
│ │ ├─ views/ |
||||
|
│ │ ├─ bindings/ |
||||
|
│ │ └─ ... |
||||
|
│ └─ ... |
||||
|
│ |
||||
|
├─ routes/ |
||||
|
│ ├─ app_pages.dart # 定义所有页面的 Route 列表 |
||||
|
│ └─ app_routes.dart # 定义路由常量或路由字符串 |
||||
|
│ |
||||
|
└─ main.dart # 程序入口 |
||||
|
``` |
||||
|
|||||
@ -1,47 +0,0 @@ |
|||||
import 'package:get/get.dart'; |
|
||||
import 'package:permission_handler/permission_handler.dart'; |
|
||||
import 'dart:io' show Platform; |
|
||||
|
|
||||
class PermissionController extends GetxController { |
|
||||
@override |
|
||||
void onReady() async { |
|
||||
super.onReady(); |
|
||||
await requestPermissions(); |
|
||||
} |
|
||||
|
|
||||
Future<void> requestPermissions() async { |
|
||||
if (Platform.isAndroid || Platform.isIOS) { |
|
||||
// 请求所有必要的权限 |
|
||||
final permissions = [ |
|
||||
Permission.microphone, |
|
||||
Permission.storage, |
|
||||
Permission.bluetooth, |
|
||||
Permission.bluetoothConnect, |
|
||||
]; |
|
||||
|
|
||||
// Android 13+ 需要额外请求 POST_NOTIFICATIONS 权限 |
|
||||
if (Platform.isAndroid) { |
|
||||
permissions.add(Permission.notification); |
|
||||
} |
|
||||
|
|
||||
// 请求权限并打印结果 |
|
||||
final statuses = await permissions.request(); |
|
||||
|
|
||||
// 打印权限状态,便于调试 |
|
||||
statuses.forEach((permission, status) { |
|
||||
print('权限 $permission: $status'); |
|
||||
}); |
|
||||
|
|
||||
// 请求悬浮窗权限(需要特殊处理) |
|
||||
if (Platform.isAndroid) { |
|
||||
if (!await Permission.systemAlertWindow.isGranted) { |
|
||||
print('请求悬浮窗权限'); |
|
||||
final status = await Permission.systemAlertWindow.request(); |
|
||||
print('悬浮窗权限状态: $status'); |
|
||||
} else { |
|
||||
print('悬浮窗权限已授予'); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,36 +1,36 @@ |
|||||
import 'package:get/get.dart'; |
import 'package:get/get.dart'; |
||||
import '../../modules/home/views/home_view.dart'; |
import '../modules/home/views/home_view.dart'; |
||||
import '../../modules/home/bindings/home_binding.dart'; |
import '../modules/home/bindings/home_binding.dart'; |
||||
import '../../modules/explore/views/explore_view.dart'; |
import '../modules/explore/views/explore_view.dart'; |
||||
import '../../modules/explore/bindings/explore_binding.dart'; |
import '../modules/explore/bindings/explore_binding.dart'; |
||||
import '../../modules/profile/views/profile_view.dart'; |
import '../modules/profile/views/profile_view.dart'; |
||||
import '../../modules/profile/bindings/profile_binding.dart'; |
import '../modules/profile/bindings/profile_binding.dart'; |
||||
import '../../modules/chat/bindings/chat_binding.dart'; |
import '../modules/chat/bindings/chat_binding.dart'; |
||||
import '../../modules/chat/views/chat_view.dart'; |
import '../modules/chat/views/chat_view.dart'; |
||||
import '../../modules/test/views/volcano_tts_test_view.dart'; |
import '../modules/test/views/volcano_tts_test_view.dart'; |
||||
import '../../modules/test/views/azure_tts_test_view.dart'; |
import '../modules/test/views/azure_tts_test_view.dart'; |
||||
import '../../modules/test/views/azure_asr_test_view.dart'; |
import '../modules/test/views/azure_asr_test_view.dart'; |
||||
import '../../modules/test/views/volcano_asr_test_view.dart'; |
import '../modules/test/views/volcano_asr_test_view.dart'; |
||||
import '../../modules/test/views/flutter_tts_test_view.dart'; |
import '../modules/test/views/flutter_tts_test_view.dart'; |
||||
import '../../modules/test/views/flutter_asr_test_view.dart'; |
import '../modules/test/views/flutter_asr_test_view.dart'; |
||||
import '../../modules/test/bindings/test_binding.dart'; |
import '../modules/test/bindings/test_binding.dart'; |
||||
import '../../modules/test/bindings/azure_tts_test_binding.dart'; |
import '../modules/test/bindings/azure_tts_test_binding.dart'; |
||||
import '../../modules/test/bindings/volcano_asr_test_binding.dart'; |
import '../modules/test/bindings/volcano_asr_test_binding.dart'; |
||||
import '../../modules/test/bindings/flutter_tts_test_binding.dart'; |
import '../modules/test/bindings/flutter_tts_test_binding.dart'; |
||||
import '../../modules/test/bindings/flutter_asr_test_binding.dart'; |
import '../modules/test/bindings/flutter_asr_test_binding.dart'; |
||||
import '../../modules/translation/views/translation_view.dart'; |
import '../modules/translation/views/translation_view.dart'; |
||||
import '../../modules/translation/bindings/translation_binding.dart'; |
import '../modules/translation/bindings/translation_binding.dart'; |
||||
import '../../modules/translation/views/translation_history_view.dart'; |
import '../modules/translation/views/translation_history_view.dart'; |
||||
import '../../modules/translation/bindings/translation_history_binding.dart'; |
import '../modules/translation/bindings/translation_history_binding.dart'; |
||||
import '../../modules/login/views/login_view.dart'; |
import '../modules/login/views/login_view.dart'; |
||||
import '../../modules/login/bindings/login_binding.dart'; |
import '../modules/login/bindings/login_binding.dart'; |
||||
import '../../modules/splash/views/splash_view.dart'; |
import '../modules/splash/views/splash_view.dart'; |
||||
import '../../modules/splash/bindings/splash_binding.dart'; |
import '../modules/splash/bindings/splash_binding.dart'; |
||||
import '../../modules/pairing/views/pairing_view.dart'; |
import '../modules/pairing/views/pairing_view.dart'; |
||||
import '../../modules/pairing/bindings/pairing_binding.dart'; |
import '../modules/pairing/bindings/pairing_binding.dart'; |
||||
import './app_routes.dart'; |
import './app_routes.dart'; |
||||
import '../../modules/settings/views/settings_view.dart'; |
import '../modules/settings/views/settings_view.dart'; |
||||
import '../../modules/settings/bindings/settings_binding.dart'; |
import '../modules/settings/bindings/settings_binding.dart'; |
||||
|
|
||||
abstract class AppPages { |
abstract class AppPages { |
||||
static final pages = [ |
static final pages = [ |
||||
Loading…
Reference in new issue