Browse Source

修改新手指引

weicu
tanlongsheng 1 year ago
parent
commit
232b5153f1
  1. 65
      lib/data/services/novice_guide_service.dart
  2. 258
      lib/modules/agent/views/agent_view.dart
  3. 22
      lib/modules/home/views/home_view.dart

65
lib/data/services/novice_guide_service.dart

@ -1,4 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'dart:io';
import 'package:ble_service/ble_service.dart'; import 'package:ble_service/ble_service.dart';
import 'package:flutter_intro/flutter_intro.dart'; import 'package:flutter_intro/flutter_intro.dart';
@ -82,21 +83,23 @@ class NoviceGuideService extends GetxService {
'send': '小言会为你拨打电话', 'send': '小言会为你拨打电话',
'end': '小言已成功为您拨打电话,试试其他指令吧', 'end': '小言已成功为您拨打电话,试试其他指令吧',
'method': () async { 'method': () async {
// 拨打电话需要电话权限 if (Platform.isAndroid) {
await PermissionUtil.instance.requestPermission( // 拨打电话需要电话权限
permissionType: Permission.phone, await PermissionUtil.instance.requestPermission(
permissionName: 'phone'.tr, // 电话 permissionType: Permission.phone,
explanationText: 'phonePermissionDesc'.tr, // 用于拨打电话功能 permissionName: 'phone'.tr, // 电话
permanentDenialText: 'phonePermissionDetailDesc'.tr, // 拨打电话功能需要电话权限 explanationText: 'phonePermissionDesc'.tr, // 用于拨打电话功能
); permanentDenialText: 'phonePermissionDetailDesc'.tr, // 拨打电话功能需要电话权限
//拨打电话还需要联系人权限 );
await PermissionUtil.instance.requestPermission( //拨打电话还需要联系人权限
permissionType: Permission.contacts, await PermissionUtil.instance.requestPermission(
permissionName: 'contacts'.tr, // 联系人 permissionType: Permission.contacts,
explanationText: 'contactsPermissionDesc'.tr, // 用于访问联系人信息 permissionName: 'contacts'.tr, // 联系人
permanentDenialText: explanationText: 'contactsPermissionDesc'.tr, // 用于访问联系人信息
'contactsPermissionDetailDesc'.tr, // 拨打电话功能需要联系人权限 permanentDenialText:
); 'contactsPermissionDetailDesc'.tr, // 拨打电话功能需要联系人权限
);
}
}, },
}, },
{ {
@ -105,21 +108,23 @@ class NoviceGuideService extends GetxService {
'send': '小言会为你发送短信', 'send': '小言会为你发送短信',
'end': '短信已发送,语音操控更便捷', 'end': '短信已发送,语音操控更便捷',
'method': () async { 'method': () async {
// 发送短信需要短信权限 if (Platform.isAndroid) {
await PermissionUtil.instance.requestPermission( // 发送短信需要短信权限
permissionType: Permission.sms, await PermissionUtil.instance.requestPermission(
permissionName: 'sms'.tr, // 短信 permissionType: Permission.sms,
explanationText: 'smsPermissionDesc'.tr, // 用于发送短信功能 permissionName: 'sms'.tr, // 短信
permanentDenialText: 'smsPermissionDetailDesc'.tr, // 发送短信功能需要短信权限 explanationText: 'smsPermissionDesc'.tr, // 用于发送短信功能
); permanentDenialText: 'smsPermissionDetailDesc'.tr, // 发送短信功能需要短信权限
//发送短信还需要联系人权限 );
await PermissionUtil.instance.requestPermission( //发送短信还需要联系人权限
permissionType: Permission.contacts, await PermissionUtil.instance.requestPermission(
permissionName: 'contacts'.tr, // 联系人 permissionType: Permission.contacts,
explanationText: 'contactsPermissionDesc'.tr, // 用于访问联系人信息 permissionName: 'contacts'.tr, // 联系人
permanentDenialText: explanationText: 'contactsPermissionDesc'.tr, // 用于访问联系人信息
'contactsPermissionDetailDesc'.tr, // 发送短信功能需要联系人权限 permanentDenialText:
); 'contactsPermissionDetailDesc'.tr, // 发送短信功能需要联系人权限
);
}
}, },
}, },
]; ];

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

@ -196,17 +196,7 @@ class _AgentViewState extends State<AgentView> with WidgetsBindingObserver {
IntroStepBuilder( IntroStepBuilder(
group: 'ai', group: 'ai',
order: 3, order: 3,
getOverlayPosition: ({ getOverlayPosition: IntroOverlayBuilder.overlayPosition,
required Offset offset,
required Size screenSize,
required Size size,
}) {
return OverlayPosition(
top: 200.h,
width: screenSize.width,
crossAxisAlignment: CrossAxisAlignment.end,
);
},
overlayBuilder: (params) { overlayBuilder: (params) {
return Obx( return Obx(
() => IntroOverlayBuilder.homeBuilder( () => IntroOverlayBuilder.homeBuilder(
@ -252,6 +242,8 @@ class _AgentViewState extends State<AgentView> with WidgetsBindingObserver {
? IntroStepBuilder( ? IntroStepBuilder(
group: 'ai', group: 'ai',
order: 4, order: 4,
getOverlayPosition:
IntroOverlayBuilder.overlayPosition,
overlayBuilder: (params) { overlayBuilder: (params) {
return IntroOverlayBuilder.aiBuilder( return IntroOverlayBuilder.aiBuilder(
params, params,
@ -511,6 +503,8 @@ class _AgentViewState extends State<AgentView> with WidgetsBindingObserver {
return IntroStepBuilder( return IntroStepBuilder(
group: 'ai', group: 'ai',
order: 1, order: 1,
getOverlayPosition:
IntroOverlayBuilder.overlayPosition,
overlayBuilder: (params) { overlayBuilder: (params) {
return IntroOverlayBuilder.aiBuilder( return IntroOverlayBuilder.aiBuilder(
params, params,
@ -756,149 +750,143 @@ class _AgentViewState extends State<AgentView> with WidgetsBindingObserver {
SizedBox(width: 8.w), SizedBox(width: 8.w),
// 动态按钮区域:展开按钮 + 发送按钮 或 图片选择按钮 // 动态按钮区域:展开按钮 + 发送按钮 或 图片选择按钮
Builder(builder: (context) { IntroStepBuilder(
StepWidgetParams? widgetParams; group: 'ai',
return IntroStepBuilder( order: 2,
group: 'ai', getOverlayPosition:
order: 2, IntroOverlayBuilder.overlayPosition,
onHighlightWidgetTap: () async { overlayBuilder: (params) {
await controller return IntroOverlayBuilder.aiBuilder(
.noviceGuideService.aiStepsList[ params,
controller.noviceGuideService.aiStep] '点击发送,${controller.noviceGuideService.aiStepsList[controller.noviceGuideService.aiStep]['send']}',
['method'](); alignment: false,
widgetParams!.onNext!(); onTap: () async {
controller.sendMessage(); await controller
}, .noviceGuideService.aiStepsList[
overlayBuilder: (params) { controller.noviceGuideService
widgetParams = params; .aiStep]['method']();
return IntroOverlayBuilder.aiBuilder( params.onNext!();
params, controller.sendMessage();
'点击发送,${controller.noviceGuideService.aiStepsList[controller.noviceGuideService.aiStep]['send']}', },
alignment: false, );
); },
}, builder: (BuildContext context, GlobalKey key) =>
builder: Obx(
(BuildContext context, GlobalKey key) => key: key,
Obx( () {
key: key, final hasText = controller.hasTextInput.value;
() { final hasImage =
final hasText = controller.isImageInputActive.value;
controller.hasTextInput.value; final shouldShowSend = hasText || hasImage;
final hasImage = final shouldShowExpand =
controller.isImageInputActive.value; controller.shouldShowExpandButton.value;
final shouldShowSend = hasText || hasImage;
final shouldShowExpand =
controller.shouldShowExpandButton.value;
if (shouldShowSend) { if (shouldShowSend) {
// 显示发送按钮(可能还有展开按钮) // 显示发送按钮(可能还有展开按钮)
return Column( return Column(
children: [ children: [
// 展开按钮(在发送按钮上方) // 展开按钮(在发送按钮上方)
if (shouldShowExpand && hasText) if (shouldShowExpand && hasText)
Padding( Padding(
padding: padding:
EdgeInsets.only(bottom: 40.h), EdgeInsets.only(bottom: 40.h),
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
// 打开底部弹出编辑模式 // 打开底部弹出编辑模式
controller.openFullScreenEdit();
showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor:
Colors.transparent,
builder: (context) =>
const FullScreenEditor(),
).then((_) {
// 弹出页关闭时的回调
controller controller
.openFullScreenEdit(); .closeFullScreenEdit();
showModalBottomSheet( });
context: context, },
isScrollControlled: true, child: Container(
backgroundColor: width: 32.w,
Colors.transparent, height: 32.w,
builder: (context) => decoration: BoxDecoration(
const FullScreenEditor(), color: isDarkMode
).then((_) { ? Colors.grey[700]
// 弹出页关闭时的回调 : Colors.grey[300],
controller borderRadius:
.closeFullScreenEdit(); BorderRadius.circular(
}); 16.w),
}, ),
child: Container( child: Icon(
width: 32.w, Icons.expand_less,
height: 32.w, color: isDarkMode
decoration: BoxDecoration( ? Colors.grey[300]
color: isDarkMode : Colors.grey[700],
? Colors.grey[700] size: 20.sp,
: Colors.grey[300],
borderRadius:
BorderRadius.circular(
16.w),
),
child: Icon(
Icons.expand_less,
color: isDarkMode
? Colors.grey[300]
: Colors.grey[700],
size: 20.sp,
),
), ),
),
),
// 发送按钮
GestureDetector(
onTap: () =>
controller.sendMessage(),
child: Container(
width: 44.w,
height: 44.w,
margin: EdgeInsets.symmetric(
vertical: 2.w),
decoration: BoxDecoration(
color: primaryColor,
borderRadius:
BorderRadius.circular(22.w),
),
child: Icon(
Icons.send,
color: Colors.white,
size: 22.sp,
), ),
), ),
), ),
], // 发送按钮
); GestureDetector(
} else { onTap: () => controller.sendMessage(),
// 显示'+'选择按钮
return Obx(() {
final isExpanded = controller
.isPlusOptionsExpanded.value;
return GestureDetector(
onTap: () {
controller.togglePlusOptions();
},
child: Container( child: Container(
width: 44.w, width: 44.w,
height: 44.w, height: 44.w,
margin: EdgeInsets.symmetric( margin: EdgeInsets.symmetric(
vertical: 2.w), vertical: 2.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: isDarkMode color: primaryColor,
? Colors.grey[800]
: Colors.grey[200],
borderRadius: borderRadius:
BorderRadius.circular(22.w), BorderRadius.circular(22.w),
), ),
child: Icon( child: Icon(
isExpanded Icons.send,
? Icons.close color: Colors.white,
: Icons.add,
color: isDarkMode
? Colors.grey[300]
: Colors.grey[700],
size: 22.sp, size: 22.sp,
), ),
), ),
); ),
}); ],
} );
}, } else {
), // 显示'+'选择按钮
); return Obx(() {
}), final isExpanded = controller
.isPlusOptionsExpanded.value;
return GestureDetector(
onTap: () {
controller.togglePlusOptions();
},
child: Container(
width: 44.w,
height: 44.w,
margin: EdgeInsets.symmetric(
vertical: 2.w),
decoration: BoxDecoration(
color: isDarkMode
? Colors.grey[800]
: Colors.grey[200],
borderRadius:
BorderRadius.circular(22.w),
),
child: Icon(
isExpanded
? Icons.close
: Icons.add,
color: isDarkMode
? Colors.grey[300]
: Colors.grey[700],
size: 22.sp,
),
),
);
});
}
},
),
),
], ],
), ),

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

@ -96,6 +96,7 @@ class HomeView extends GetView<HomeController> {
onWidgetLoad: () { onWidgetLoad: () {
controller.noviceGuideService.startHomeGuide(); controller.noviceGuideService.startHomeGuide();
}, },
getOverlayPosition: IntroOverlayBuilder.overlayPosition,
overlayBuilder: (params) { overlayBuilder: (params) {
return IntroOverlayBuilder.aiBuilder( return IntroOverlayBuilder.aiBuilder(
params, params,
@ -116,17 +117,7 @@ class HomeView extends GetView<HomeController> {
IntroStepBuilder( IntroStepBuilder(
group: 'home', group: 'home',
order: 2, order: 2,
getOverlayPosition: ({ getOverlayPosition: IntroOverlayBuilder.overlayPosition,
required Offset offset,
required Size screenSize,
required Size size,
}) {
return OverlayPosition(
top: 200.h,
width: screenSize.width,
crossAxisAlignment: CrossAxisAlignment.end,
);
},
overlayBuilder: (params) { overlayBuilder: (params) {
return Obx( return Obx(
() => IntroOverlayBuilder.homeBuilder( () => IntroOverlayBuilder.homeBuilder(
@ -730,14 +721,15 @@ class HomeView extends GetView<HomeController> {
child: IntroStepBuilder( child: IntroStepBuilder(
group: 'home', group: 'home',
order: 3, order: 3,
onHighlightWidgetTap: () { getOverlayPosition: IntroOverlayBuilder.overlayPosition,
Intro.of(Get.context!).dispose();
controller.exploreAIFeatures();
},
overlayBuilder: (params) { overlayBuilder: (params) {
return IntroOverlayBuilder.aiBuilder( return IntroOverlayBuilder.aiBuilder(
params, params,
'太棒了!你已成功唤醒小言,接下来试试让它帮你做件事吧', '太棒了!你已成功唤醒小言,接下来试试让它帮你做件事吧',
onTap: () {
params.onFinish();
controller.exploreAIFeatures();
},
); );
}, },
builder: (BuildContext context, GlobalKey key) => SizedBox( builder: (BuildContext context, GlobalKey key) => SizedBox(

Loading…
Cancel
Save