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 '../../modules/home/views/home_view.dart'; |
|||
import '../../modules/home/bindings/home_binding.dart'; |
|||
import '../../modules/explore/views/explore_view.dart'; |
|||
import '../../modules/explore/bindings/explore_binding.dart'; |
|||
import '../../modules/profile/views/profile_view.dart'; |
|||
import '../../modules/profile/bindings/profile_binding.dart'; |
|||
import '../../modules/chat/bindings/chat_binding.dart'; |
|||
import '../../modules/chat/views/chat_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_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_asr_test_view.dart'; |
|||
import '../../modules/test/bindings/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/flutter_tts_test_binding.dart'; |
|||
import '../../modules/test/bindings/flutter_asr_test_binding.dart'; |
|||
import '../../modules/translation/views/translation_view.dart'; |
|||
import '../../modules/translation/bindings/translation_binding.dart'; |
|||
import '../../modules/translation/views/translation_history_view.dart'; |
|||
import '../../modules/translation/bindings/translation_history_binding.dart'; |
|||
import '../../modules/login/views/login_view.dart'; |
|||
import '../../modules/login/bindings/login_binding.dart'; |
|||
import '../../modules/splash/views/splash_view.dart'; |
|||
import '../../modules/splash/bindings/splash_binding.dart'; |
|||
import '../../modules/pairing/views/pairing_view.dart'; |
|||
import '../../modules/pairing/bindings/pairing_binding.dart'; |
|||
import '../modules/home/views/home_view.dart'; |
|||
import '../modules/home/bindings/home_binding.dart'; |
|||
import '../modules/explore/views/explore_view.dart'; |
|||
import '../modules/explore/bindings/explore_binding.dart'; |
|||
import '../modules/profile/views/profile_view.dart'; |
|||
import '../modules/profile/bindings/profile_binding.dart'; |
|||
import '../modules/chat/bindings/chat_binding.dart'; |
|||
import '../modules/chat/views/chat_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_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_asr_test_view.dart'; |
|||
import '../modules/test/bindings/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/flutter_tts_test_binding.dart'; |
|||
import '../modules/test/bindings/flutter_asr_test_binding.dart'; |
|||
import '../modules/translation/views/translation_view.dart'; |
|||
import '../modules/translation/bindings/translation_binding.dart'; |
|||
import '../modules/translation/views/translation_history_view.dart'; |
|||
import '../modules/translation/bindings/translation_history_binding.dart'; |
|||
import '../modules/login/views/login_view.dart'; |
|||
import '../modules/login/bindings/login_binding.dart'; |
|||
import '../modules/splash/views/splash_view.dart'; |
|||
import '../modules/splash/bindings/splash_binding.dart'; |
|||
import '../modules/pairing/views/pairing_view.dart'; |
|||
import '../modules/pairing/bindings/pairing_binding.dart'; |
|||
import './app_routes.dart'; |
|||
import '../../modules/settings/views/settings_view.dart'; |
|||
import '../../modules/settings/bindings/settings_binding.dart'; |
|||
import '../modules/settings/views/settings_view.dart'; |
|||
import '../modules/settings/bindings/settings_binding.dart'; |
|||
|
|||
abstract class AppPages { |
|||
static final pages = [ |
|||
Loading…
Reference in new issue