Browse Source

修改新手指引

newdev_shunjiawei
tanlongsheng 1 year ago
parent
commit
7bdda09d00
  1. 4
      lib/core/bindings/initial_binding.dart
  2. 34
      lib/data/services/novice_guide_service.dart
  3. 3
      lib/modules/agent/controllers/agent_controller.dart
  4. 21
      lib/modules/agent/views/agent_view.dart
  5. 14
      lib/modules/home/controllers/home_controller.dart
  6. 41
      lib/modules/home/views/home_view.dart

4
lib/core/bindings/initial_binding.dart

@ -6,6 +6,7 @@ import '../../../data/services/navigation_manager.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../data/services/meeting/meeting_task_service.dart'; import '../../data/services/meeting/meeting_task_service.dart';
import '../../data/services/meeting/meeting_upload_service.dart'; import '../../data/services/meeting/meeting_upload_service.dart';
import '../../data/services/novice_guide_service.dart';
import '../../data/services/speech_factory.dart'; import '../../data/services/speech_factory.dart';
import '../../data/services/volcano_translation_service.dart'; import '../../data/services/volcano_translation_service.dart';
import '../../data/services/volcano_ai_service.dart'; import '../../data/services/volcano_ai_service.dart';
@ -64,6 +65,9 @@ class InitialBinding extends Bindings {
// 会议助手音频上传 // 会议助手音频上传
Get.lazyPut<UserportraitManager>(() => UserportraitManager(), fenix: true); Get.lazyPut<UserportraitManager>(() => UserportraitManager(), fenix: true);
// 新手引导
Get.lazyPut<NoviceGuideService>(() => NoviceGuideService(), fenix: true);
// 杰理蓝牙服务 // 杰理蓝牙服务
// // 语言管理器(需要最先初始化) // // 语言管理器(需要最先初始化)

34
lib/data/services/novice_guide_service.dart

@ -0,0 +1,34 @@
import 'package:flutter_intro/flutter_intro.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
class NoviceGuideService extends GetxService {
final GetStorage _storage = GetStorage();
bool isHomeGuide = false;
bool isAIGuide = false;
@override
void onInit() {
super.onInit();
// isHomeGuide = _storage.read('home_guide') ?? false;
// isAIGuide = _storage.read('ai_guide') ?? false;
}
void startHomeGuide() {
if (!isHomeGuide) {
isHomeGuide = true;
_storage.write('home_guide', true);
Intro.of(Get.context!).start(group: 'home');
}
}
void startAIGuide() async {
if (!isAIGuide) {
await Future.delayed(const Duration(milliseconds: 100));
isAIGuide = true;
_storage.write('ai_guide', true);
Intro.of(Get.context!).start(group: 'ai');
}
}
}

3
lib/modules/agent/controllers/agent_controller.dart

@ -3,6 +3,7 @@ import 'dart:convert';
import 'dart:ffi'; import 'dart:ffi';
import 'dart:io'; import 'dart:io';
import 'package:amap_service/amap_service.dart'; import 'package:amap_service/amap_service.dart';
import '../../../data/services/novice_guide_service.dart';
import '/core/utils/upload_oss.dart'; import '/core/utils/upload_oss.dart';
import '/data/models/user_Info.dart'; import '/data/models/user_Info.dart';
import '/data/services/music_manager.dart'; import '/data/services/music_manager.dart';
@ -39,6 +40,8 @@ class AgentController extends GetxController {
final TextEditingController textController = TextEditingController(); final TextEditingController textController = TextEditingController();
final ScrollController scrollController = ScrollController(); final ScrollController scrollController = ScrollController();
final noviceGuideService = Get.find<NoviceGuideService>();
//音乐播放管理 //音乐播放管理
final _musiceManager = Get.find<MusicManager>(); final _musiceManager = Get.find<MusicManager>();

21
lib/modules/agent/views/agent_view.dart

@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'dart:math'; import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_intro/flutter_intro.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../controllers/agent_controller.dart'; import '../controllers/agent_controller.dart';
import '../controllers/message_action_controller.dart'; import '../controllers/message_action_controller.dart';
@ -388,7 +389,18 @@ class _AgentViewState extends State<AgentView> with WidgetsBindingObserver {
if (controller.isTextInputMode.value) { if (controller.isTextInputMode.value) {
// 文本输入模式 - 限制最大高度并只向上扩展 // 文本输入模式 - 限制最大高度并只向上扩展
return Container( return IntroStepBuilder(
group: 'ai',
order: 1,
text: '对小言说“今天天气怎么样”',
onWidgetLoad: () {
controller.noviceGuideService
.startAIGuide();
},
builder: (BuildContext context,
GlobalKey key) =>
Container(
key: key,
constraints: BoxConstraints( constraints: BoxConstraints(
minHeight: 44.h, minHeight: 44.h,
maxHeight: 120.h, maxHeight: 120.h,
@ -424,10 +436,12 @@ class _AgentViewState extends State<AgentView> with WidgetsBindingObserver {
maxLines: isImageActive maxLines: isImageActive
? 3 ? 3
: 5, // 设置合理的最大行数 : 5, // 设置合理的最大行数
minLines: isImageActive ? 2 : 1, minLines:
isImageActive ? 2 : 1,
keyboardType: TextInputType keyboardType: TextInputType
.multiline, // 启用多行键盘 .multiline, // 启用多行键盘
textInputAction: TextInputAction textInputAction:
TextInputAction
.newline, // 支持回车换行 .newline, // 支持回车换行
onTap: () { onTap: () {
// 当点击输入框时,如果'+'选项已展开,则收缩 // 当点击输入框时,如果'+'选项已展开,则收缩
@ -479,6 +493,7 @@ class _AgentViewState extends State<AgentView> with WidgetsBindingObserver {
), ),
], ],
), ),
),
); );
} else { } else {
Timer? _holdTimer; // 增加延迟触发的计时器 Timer? _holdTimer; // 增加延迟触发的计时器

14
lib/modules/home/controllers/home_controller.dart

@ -1,5 +1,6 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'dart:async'; import 'dart:async';
import '../../../data/services/novice_guide_service.dart';
import '../../../routes/app_routes.dart'; import '../../../routes/app_routes.dart';
import '../../../core/utils/logger.dart'; import '../../../core/utils/logger.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -55,12 +56,15 @@ class HomeController extends GetxController {
final _bleManager = Get.find<BleManager>(); final _bleManager = Get.find<BleManager>();
final _storage = GetStorage(); final _storage = GetStorage();
final noviceGuideService = Get.find<NoviceGuideService>();
// 会话级别的版本检查标记(静态变量,整个应用会话期间保持) // 会话级别的版本检查标记(静态变量,整个应用会话期间保持)
static bool _hasCheckedVersionInSession = false; static bool _hasCheckedVersionInSession = false;
// 版本检查相关常量 // 版本检查相关常量
static const String _lastVersionCheckKey = 'last_version_check_timestamp'; static const String _lastVersionCheckKey = 'last_version_check_timestamp';
static const int _versionCheckIntervalHours = 24; // 24小时间隔 static const int _versionCheckIntervalHours = 24; // 24小时间隔
@override @override
void onInit() { void onInit() {
super.onInit(); super.onInit();
@ -94,7 +98,8 @@ class HomeController extends GetxController {
update(); update();
}); });
_classicBluetoothWorker = ever(_bluetoothManager.currentDeviceRx, (BluetoothDevice? device) { _classicBluetoothWorker =
ever(_bluetoothManager.currentDeviceRx, (BluetoothDevice? device) {
if (device != null) { if (device != null) {
_lastConnectedDeviceName = device.name; _lastConnectedDeviceName = device.name;
} }
@ -181,7 +186,9 @@ class HomeController extends GetxController {
return bleDeviceName; return bleDeviceName;
} }
if (!_isFullyConnected.value && _lastConnectedDeviceName != null && _lastConnectedDeviceName!.isNotEmpty) { if (!_isFullyConnected.value &&
_lastConnectedDeviceName != null &&
_lastConnectedDeviceName!.isNotEmpty) {
return _lastConnectedDeviceName!; return _lastConnectedDeviceName!;
} }
@ -288,7 +295,8 @@ class HomeController extends GetxController {
} }
// 条件2:距离上次检查超过24小时 // 条件2:距离上次检查超过24小时
else if (lastCheckTimestamp != null) { else if (lastCheckTimestamp != null) {
final lastCheckTime = DateTime.fromMillisecondsSinceEpoch(lastCheckTimestamp); final lastCheckTime =
DateTime.fromMillisecondsSinceEpoch(lastCheckTimestamp);
final timeDifference = now.difference(lastCheckTime); final timeDifference = now.difference(lastCheckTime);
if (timeDifference.inHours >= _versionCheckIntervalHours) { if (timeDifference.inHours >= _versionCheckIntervalHours) {

41
lib/modules/home/views/home_view.dart

@ -84,11 +84,30 @@ class HomeView extends GetView<HomeController> {
_buildAppBar(isDarkMode), _buildAppBar(isDarkMode),
// 顶部图片 // 顶部图片
_buildEarbudsImage(), IntroStepBuilder(
group: 'home',
order: 1,
text: '欢迎使用Voitrans!首先,让我们唤醒你的专属 AI—— 小言',
onWidgetLoad: () {
controller.noviceGuideService.startHomeGuide();
},
builder: (BuildContext context, GlobalKey key) => SizedBox(
key: key,
child: _buildEarbudsImage(),
),
),
SizedBox(height: 20.h), SizedBox(height: 20.h),
// 设备状态卡片 // 设备状态卡片
_buildDeviceStatusCard(isDarkMode), IntroStepBuilder(
group: 'home',
order: 2,
text: '对着麦克风说“小言小言”',
builder: (BuildContext context, GlobalKey key) => SizedBox(
key: key,
child: _buildDeviceStatusCard(isDarkMode),
),
),
SizedBox(height: 20.h), SizedBox(height: 20.h),
// 热门AI体验 // 热门AI体验
@ -624,8 +643,9 @@ class HomeView extends GetView<HomeController> {
Expanded( Expanded(
flex: 1, flex: 1,
child: IntroStepBuilder( child: IntroStepBuilder(
group: 'home',
order: 3, order: 3,
text: 'AI全能助手', text: '太棒了!你已成功唤醒小言,接下来试试让它帮你做件事吧',
onHighlightWidgetTap: () { onHighlightWidgetTap: () {
Intro.of(Get.context!).dispose(); Intro.of(Get.context!).dispose();
controller.exploreAIFeatures(); controller.exploreAIFeatures();
@ -660,15 +680,7 @@ class HomeView extends GetView<HomeController> {
child: Column( child: Column(
children: [ children: [
// 右上卡片 - 同声翻译 // 右上卡片 - 同声翻译
IntroStepBuilder(
order: 1,
text: '同声传译',
// onWidgetLoad: () {
// Intro.of(Get.context!).start();
// },
builder: (BuildContext context, GlobalKey key) =>
_buildFeatureCard( _buildFeatureCard(
key: key,
title: 'simultaneousInterpretation'.tr, // 同声传译 title: 'simultaneousInterpretation'.tr, // 同声传译
description: description:
'simultaneousInterpretationInfo'.tr, // 80+语言实时翻译,出国无忧 'simultaneousInterpretationInfo'.tr, // 80+语言实时翻译,出国无忧
@ -686,18 +698,12 @@ class HomeView extends GetView<HomeController> {
isDarkMode: isDarkMode, isDarkMode: isDarkMode,
iconColor: const Color(0xFF4CAF50), iconColor: const Color(0xFF4CAF50),
), ),
),
SizedBox(height: 5.h), // 减少间距 SizedBox(height: 5.h), // 减少间距
// 右下卡片 - // 右下卡片 -
// 右下卡片 - 会议助手 // 右下卡片 - 会议助手
IntroStepBuilder(
order: 2,
text: '商务会议助手',
builder: (BuildContext context, GlobalKey key) =>
_buildFeatureCard( _buildFeatureCard(
key: key,
title: 'conferenceAssistant'.tr, // 商务会议助手 title: 'conferenceAssistant'.tr, // 商务会议助手
description: 'conferenceAssistantInfo'.tr, // 实时记录会议纪要,多语言翻译 description: 'conferenceAssistantInfo'.tr, // 实时记录会议纪要,多语言翻译
icon: Icons.people, icon: Icons.people,
@ -716,7 +722,6 @@ class HomeView extends GetView<HomeController> {
isDarkMode: isDarkMode, isDarkMode: isDarkMode,
iconColor: const Color(0xFFd81b60), // 品红 iconColor: const Color(0xFFd81b60), // 品红
), ),
),
], ],
), ),
), ),

Loading…
Cancel
Save