|
@@ -0,0 +1,239 @@
|
|
|
|
|
+import 'package:electronic_assistant/base/base_controller.dart';
|
|
|
|
|
+import 'package:electronic_assistant/base/base_page.dart';
|
|
|
|
|
+import 'package:electronic_assistant/resource/colors.gen.dart';
|
|
|
|
|
+import 'package:electronic_assistant/resource/string.gen.dart';
|
|
|
|
|
+import 'package:electronic_assistant/router/app_pages.dart';
|
|
|
|
|
+import 'package:electronic_assistant/utils/common_style.dart';
|
|
|
|
|
+import 'package:electronic_assistant/utils/expand.dart';
|
|
|
|
|
+import 'package:flutter/material.dart';
|
|
|
|
|
+import 'package:flutter/src/widgets/framework.dart';
|
|
|
|
|
+import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
|
|
|
+import 'package:get/get.dart';
|
|
|
|
|
+import 'package:get/get_core/src/get_main.dart';
|
|
|
|
|
+
|
|
|
|
|
+import '../../resource/assets.gen.dart';
|
|
|
|
|
+import 'controller.dart';
|
|
|
|
|
+
|
|
|
|
|
+class ShortCutPage extends BasePage<ShortCutController> {
|
|
|
|
|
+ const ShortCutPage({super.key});
|
|
|
|
|
+
|
|
|
|
|
+ static Future? start() {
|
|
|
|
|
+ return Get.toNamed(RoutePath.recordShortcut);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @override
|
|
|
|
|
+ Color backgroundColor() {
|
|
|
|
|
+ return '#F6F6F6'.color;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @override
|
|
|
|
|
+ Widget buildBody(BuildContext context) {
|
|
|
|
|
+ return Scaffold(
|
|
|
|
|
+ backgroundColor: Colors.transparent,
|
|
|
|
|
+ appBar: _buildAppBar(),
|
|
|
|
|
+ body: _buildShortcutContainer());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Widget _buildShortcutContainer() {
|
|
|
|
|
+ return SingleChildScrollView(
|
|
|
|
|
+ child: Container(
|
|
|
|
|
+ padding: EdgeInsets.all(12.w),
|
|
|
|
|
+ margin: EdgeInsets.symmetric(horizontal: 12.w, vertical: 12.w),
|
|
|
|
|
+ decoration: const BoxDecoration(
|
|
|
|
|
+ color: Colors.white,
|
|
|
|
|
+ borderRadius: BorderRadius.all(Radius.circular(12)),
|
|
|
|
|
+ ),
|
|
|
|
|
+ child: Column(
|
|
|
|
|
+ children: [
|
|
|
|
|
+ SizedBox(height: 8.w),
|
|
|
|
|
+ Row(
|
|
|
|
|
+ children: [
|
|
|
|
|
+ getStep('1'),
|
|
|
|
|
+ SizedBox(width: 6.w),
|
|
|
|
|
+ Text(
|
|
|
|
|
+ '点击',
|
|
|
|
|
+ style: TextStyle(
|
|
|
|
|
+ fontSize: 14.sp, color: ColorName.primaryTextColor),
|
|
|
|
|
+ ),
|
|
|
|
|
+ Text(
|
|
|
|
|
+ '【添加快捷指令】',
|
|
|
|
|
+ style: TextStyle(
|
|
|
|
|
+ fontSize: 14.sp, color: ColorName.colorPrimary),
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ SizedBox(height: 32.w),
|
|
|
|
|
+ GestureDetector(
|
|
|
|
|
+ onTap: controller.onAddIosShortCut,
|
|
|
|
|
+ child: Container(
|
|
|
|
|
+ width: 240.w,
|
|
|
|
|
+ height: 48.w,
|
|
|
|
|
+ decoration: getCommonDecoration(8.w),
|
|
|
|
|
+ child: Center(
|
|
|
|
|
+ child: Text('添加快捷方式',
|
|
|
|
|
+ style: TextStyle(
|
|
|
|
|
+ fontSize: 16.sp, color: ColorName.white)))),
|
|
|
|
|
+ ),
|
|
|
|
|
+ SizedBox(height: 32.w),
|
|
|
|
|
+ Row(
|
|
|
|
|
+ children: [
|
|
|
|
|
+ getStep('2'),
|
|
|
|
|
+ SizedBox(width: 6.w),
|
|
|
|
|
+ Text(
|
|
|
|
|
+ '依照教程,设置权限',
|
|
|
|
|
+ style: TextStyle(
|
|
|
|
|
+ fontSize: 14.sp, color: ColorName.primaryTextColor),
|
|
|
|
|
+ )
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ SizedBox(height: 12.w),
|
|
|
|
|
+ Container(
|
|
|
|
|
+ padding: EdgeInsets.only(left: 32.w),
|
|
|
|
|
+ child: _buildTwoStepDesc(),
|
|
|
|
|
+ ),
|
|
|
|
|
+ SizedBox(height: 12.w),
|
|
|
|
|
+ Container(
|
|
|
|
|
+ margin: EdgeInsets.only(left: 24.w),
|
|
|
|
|
+ child: GestureDetector(
|
|
|
|
|
+ onTap: controller.onShowIosShortcutVideo,
|
|
|
|
|
+ child: AspectRatio(
|
|
|
|
|
+ aspectRatio: 852 / 444,
|
|
|
|
|
+ child: Assets.images.bgIosShortcutVideoPreview.image()),
|
|
|
|
|
+ ),
|
|
|
|
|
+ ),
|
|
|
|
|
+ SizedBox(height: 32.w),
|
|
|
|
|
+ Row(
|
|
|
|
|
+ children: [
|
|
|
|
|
+ getStep('3'),
|
|
|
|
|
+ SizedBox(width: 6.w),
|
|
|
|
|
+ Text(
|
|
|
|
|
+ '快点下手机背面,体验快捷录音吧~',
|
|
|
|
|
+ style: TextStyle(
|
|
|
|
|
+ fontSize: 14.sp, color: ColorName.primaryTextColor),
|
|
|
|
|
+ )
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ SizedBox(height: 8.w),
|
|
|
|
|
+ ],
|
|
|
|
|
+ )));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Widget _buildTwoStepDesc() {
|
|
|
|
|
+ return Column(
|
|
|
|
|
+ children: [
|
|
|
|
|
+ Row(
|
|
|
|
|
+ crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
+ children: [
|
|
|
|
|
+ Container(
|
|
|
|
|
+ decoration: const BoxDecoration(
|
|
|
|
|
+ color: ColorName.secondaryTextColor,
|
|
|
|
|
+ shape: BoxShape.circle,
|
|
|
|
|
+ ),
|
|
|
|
|
+ width: 3.w,
|
|
|
|
|
+ height: 3.w,
|
|
|
|
|
+ margin: EdgeInsets.only(right: 10.w, top: 8.w),
|
|
|
|
|
+ ),
|
|
|
|
|
+ Expanded(
|
|
|
|
|
+ child: RichText(
|
|
|
|
|
+ text: TextSpan(
|
|
|
|
|
+ style: TextStyle(
|
|
|
|
|
+ fontSize: 13.sp, color: ColorName.secondaryTextColor),
|
|
|
|
|
+ children: const [
|
|
|
|
|
+ TextSpan(text: "在手机"),
|
|
|
|
|
+ TextSpan(
|
|
|
|
|
+ text: "【设置】",
|
|
|
|
|
+ style: TextStyle(color: ColorName.colorPrimary)),
|
|
|
|
|
+ TextSpan(text: "中点击"),
|
|
|
|
|
+ TextSpan(
|
|
|
|
|
+ text: "【辅助功能】",
|
|
|
|
|
+ style: TextStyle(color: ColorName.colorPrimary)),
|
|
|
|
|
+ TextSpan(text: "-"),
|
|
|
|
|
+ TextSpan(
|
|
|
|
|
+ text: "【触控】",
|
|
|
|
|
+ style: TextStyle(color: ColorName.colorPrimary)),
|
|
|
|
|
+ TextSpan(text: ",滑动至底部找到"),
|
|
|
|
|
+ TextSpan(
|
|
|
|
|
+ text: "【轻点背面】",
|
|
|
|
|
+ style: TextStyle(color: ColorName.colorPrimary)),
|
|
|
|
|
+ ])),
|
|
|
|
|
+ )
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ Row(
|
|
|
|
|
+ crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
+ children: [
|
|
|
|
|
+ Container(
|
|
|
|
|
+ decoration: const BoxDecoration(
|
|
|
|
|
+ color: ColorName.secondaryTextColor,
|
|
|
|
|
+ shape: BoxShape.circle,
|
|
|
|
|
+ ),
|
|
|
|
|
+ width: 3.w,
|
|
|
|
|
+ height: 3.w,
|
|
|
|
|
+ margin: EdgeInsets.only(right: 10.w, top: 8.w),
|
|
|
|
|
+ ),
|
|
|
|
|
+ Expanded(
|
|
|
|
|
+ child: RichText(
|
|
|
|
|
+ text: TextSpan(
|
|
|
|
|
+ style: TextStyle(
|
|
|
|
|
+ fontSize: 13.sp, color: ColorName.secondaryTextColor),
|
|
|
|
|
+ children: const [
|
|
|
|
|
+ TextSpan(text: "进入"),
|
|
|
|
|
+ TextSpan(
|
|
|
|
|
+ text: "【轻点背面】",
|
|
|
|
|
+ style: TextStyle(color: ColorName.colorPrimary)),
|
|
|
|
|
+ TextSpan(text: ",找到"),
|
|
|
|
|
+ TextSpan(
|
|
|
|
|
+ text: "【轻点两下/三下】",
|
|
|
|
|
+ style: TextStyle(color: ColorName.colorPrimary)),
|
|
|
|
|
+ TextSpan(text: ",选"),
|
|
|
|
|
+ TextSpan(
|
|
|
|
|
+ text: "【小听-录音】",
|
|
|
|
|
+ style: TextStyle(color: ColorName.colorPrimary)),
|
|
|
|
|
+ ])),
|
|
|
|
|
+ )
|
|
|
|
|
+ ],
|
|
|
|
|
+ )
|
|
|
|
|
+ ],
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Widget getStep(String step) {
|
|
|
|
|
+ return Container(
|
|
|
|
|
+ width: 20.w,
|
|
|
|
|
+ height: 20.w,
|
|
|
|
|
+ decoration: const BoxDecoration(
|
|
|
|
|
+ color: ColorName.colorPrimary, // Set the background color
|
|
|
|
|
+ shape: BoxShape.circle, // Set the shape to circle
|
|
|
|
|
+ ),
|
|
|
|
|
+ child: Center(
|
|
|
|
|
+ child: Text(step,
|
|
|
|
|
+ style:
|
|
|
|
|
+ TextStyle(fontSize: 14.sp, color: ColorName.white, height: 1)),
|
|
|
|
|
+ ),
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ AppBar _buildAppBar() {
|
|
|
|
|
+ return AppBar(
|
|
|
|
|
+ scrolledUnderElevation: 0,
|
|
|
|
|
+ leading: IconButton(
|
|
|
|
|
+ icon: SizedBox(
|
|
|
|
|
+ width: 24.w,
|
|
|
|
|
+ height: 24.w,
|
|
|
|
|
+ child: Assets.images.iconRecordShortcutPageClose.image()),
|
|
|
|
|
+ // Custom icon
|
|
|
|
|
+ onPressed: () {
|
|
|
|
|
+ Get.back();
|
|
|
|
|
+ },
|
|
|
|
|
+ ),
|
|
|
|
|
+ title: Text(StringName.recordShortcutTitle.tr,
|
|
|
|
|
+ style: TextStyle(
|
|
|
|
|
+ fontSize: 17.sp,
|
|
|
|
|
+ color: ColorName.primaryTextColor,
|
|
|
|
|
+ fontWeight: FontWeight.bold)),
|
|
|
|
|
+ centerTitle: true,
|
|
|
|
|
+ backgroundColor: Colors.transparent,
|
|
|
|
|
+ elevation: 0,
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+}
|