Browse Source

[feat]亲密度分析,渐变色按钮,支持左侧按钮

hezihao 7 months ago
parent
commit
e6df7909a9

+ 13 - 31
lib/module/intimacy_analyse/analyse_report/intimacy_analyse_report_view.dart

@@ -5,6 +5,7 @@ import 'package:keyboard/base/base_view.dart';
 import '../../../resource/assets.gen.dart';
 import '../../../resource/colors.gen.dart';
 import '../../../resource/string.gen.dart';
+import '../../../widget/gradient_btn.dart';
 import '../widget/intimacy_analyse_report_widget.dart';
 import '../widget/intimacy_user_widget.dart';
 import 'intimacy_analyse_report_view_controller.dart';
@@ -168,38 +169,19 @@ class IntimacyAnalyseReportView
 
   /// 解锁按钮
   Widget _buildUnlockBtn(BuildContext context) {
-    return GestureDetector(
-      onTap: () {
-        controller.clickUnlockBtn(context);
-      },
-      child: Container(
-        margin: EdgeInsets.symmetric(horizontal: 16.w),
-        padding: EdgeInsets.symmetric(vertical: 14.h),
-        width: double.maxFinite,
-        decoration: ShapeDecoration(
-          color: ColorName.colorBrand,
-          shape: RoundedRectangleBorder(
-            borderRadius: BorderRadius.circular(50.r),
-          ),
-        ),
-        child: Row(
-          mainAxisAlignment: MainAxisAlignment.center,
-          children: [
-            Assets.images.iconIntimacyAnalyseUnlock.image(
-              width: 22,
-              height: 22,
-            ),
-            SizedBox(width: 4.w),
-            Text(
-              StringName.intimacyUnlockAnalyse,
-              style: TextStyle(
-                color: ColorName.white,
-                fontSize: 16.sp,
-                fontWeight: FontWeight.w500,
-              ),
-            ),
-          ],
+    return Container(
+      margin: EdgeInsets.symmetric(horizontal: 16.w),
+      width: double.maxFinite,
+      child: GradientTextBtn(
+        StringName.intimacyUnlockAnalyse,
+        color: ColorName.colorBrand,
+        leftIcon: Assets.images.iconIntimacyAnalyseUnlock.image(
+          width: 22,
+          height: 22,
         ),
+        onPressed: () {
+          controller.clickUnlockBtn(context);
+        },
       ),
     );
   }

+ 10 - 26
lib/module/intimacy_analyse/intimacy_analyse_upload/intimacy_analyse_upload_page.dart

@@ -17,6 +17,7 @@ import '../../../router/app_page_arguments.dart';
 import '../../../router/app_pages.dart';
 import '../../../utils/string_format_util.dart';
 import '../../../widget/actionbtn/action_btn.dart';
+import '../../../widget/gradient_btn.dart';
 import '../../../widget/gradient_text.dart';
 import '../widget/intimacy_analyse_report_widget.dart';
 import '../widget/intimacy_user_widget.dart';
@@ -683,32 +684,15 @@ class IntimacyAnalyseUploadPage
 
   /// 下一步按钮
   Widget _buildNextBtn() {
-    return GestureDetector(
-      onTap: () {
-        controller.clickNextBtn();
-      },
-      child: Container(
-        padding: EdgeInsets.only(top: 13.h, bottom: 13.h),
-        decoration: BoxDecoration(
-          color: ColorName.colorBrand,
-          borderRadius: BorderRadius.all(Radius.circular(30.r)),
-        ),
-        child: Row(
-          mainAxisAlignment: MainAxisAlignment.center,
-          crossAxisAlignment: CrossAxisAlignment.center,
-          children: [
-            Assets.images.iconLock.image(width: 22.w, height: 22.h),
-            SizedBox(width: 8.w),
-            Text(
-              StringName.nextStep,
-              style: TextStyle(
-                color: ColorName.white,
-                fontSize: 16.sp,
-                fontWeight: FontWeight.w500,
-              ),
-            ),
-          ],
-        ),
+    return Container(
+      padding: EdgeInsets.only(top: 13.h, bottom: 13.h),
+      child: GradientTextBtn(
+        StringName.nextStep,
+        leftIcon: Assets.images.iconLock.image(width: 22.w, height: 22.h),
+        color: ColorName.colorBrand,
+        onPressed: () {
+          controller.clickNextBtn();
+        },
       ),
     );
   }

+ 7 - 3
lib/module/intimacy_analyse/screenshot_reply/conversation_analysis/conversation_analysis_controller.dart

@@ -11,6 +11,7 @@ import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
 import '../../../../data/api/request/intimacy_reply_chat_request.dart';
 import '../../../../data/api/response/intimacy_chat_analyze_response.dart';
+import '../../../../data/bean/member_info.dart';
 import '../../../../data/bean/option_select_config.dart';
 import '../../../../data/bean/option_select_item.dart';
 import '../../../../data/bean/upload_info.dart';
@@ -50,8 +51,8 @@ class ConversationAnalysisController extends BaseController {
   /// 是否是上传页
   Rx<bool> isUploadPage = false.obs;
 
-  /// 是否已解锁
-  Rx<bool> isUnlock = false.obs;
+  /// 当前用户信息
+  Rxn<MemberInfo> get userInfo => accountRepository.memberStatusInfo;
 
   /// 选项列表
   RxList<OptionSelectConfig> optionSelectConfigList =
@@ -148,7 +149,10 @@ class ConversationAnalysisController extends BaseController {
   }
 
   /// 点击解锁按钮
-  void clickUnlockBtn(BuildContext context) async {}
+  void clickUnlockBtn(BuildContext context) async {
+    // 跳转去Vip商店
+    StorePage.start();
+  }
 
   /// 点击查看分析按钮
   void clickLookAnalyseBtn(BuildContext context) async {

+ 20 - 39
lib/module/intimacy_analyse/screenshot_reply/conversation_analysis/conversation_analysis_view.dart

@@ -373,38 +373,18 @@ class ConversationAnalysisView
 
   /// 解锁按钮
   Widget _buildUnlockBtn(BuildContext context) {
-    return GestureDetector(
-      onTap: () {
-        controller.clickUnlockBtn(context);
-      },
-      child: Container(
-        margin: EdgeInsets.symmetric(horizontal: 16.w),
-        padding: EdgeInsets.symmetric(vertical: 14.h),
-        width: double.maxFinite,
-        decoration: ShapeDecoration(
-          color: ColorName.colorBrand,
-          shape: RoundedRectangleBorder(
-            borderRadius: BorderRadius.circular(50.r),
-          ),
-        ),
-        child: Row(
-          mainAxisAlignment: MainAxisAlignment.center,
-          children: [
-            Assets.images.iconIntimacyAnalyseUnlock.image(
-              width: 22,
-              height: 22,
-            ),
-            SizedBox(width: 4.w),
-            Text(
-              StringName.intimacyUnlockAnalyse,
-              style: TextStyle(
-                color: ColorName.white,
-                fontSize: 16.sp,
-                fontWeight: FontWeight.w500,
-              ),
-            ),
-          ],
+    return Container(
+      margin: EdgeInsets.symmetric(horizontal: 16.w),
+      width: double.maxFinite,
+      child: GradientTextBtn(
+        StringName.intimacyUnlockAnalyse,
+        leftIcon: Assets.images.iconIntimacyAnalyseUnlock.image(
+          width: 22,
+          height: 22,
         ),
+        onPressed: () {
+          controller.clickUnlockBtn(context);
+        },
       ),
     );
   }
@@ -444,17 +424,18 @@ class ConversationAnalysisView
   /// 底部布局
   Widget _buildBottomLayout(BuildContext context) {
     Widget btn;
-    // 已解锁
-    if (controller.isUnlock.value) {
-      btn = _buildUnlockBtn(context);
-    } else {
-      // 未解锁,已在上传阶段,则显示查看分析按钮
-      if (controller.isUploadPage.value) {
+    // 已在上传阶段,则显示查看分析按钮
+    if (controller.isUploadPage.value) {
+      // 已解锁,显示分析按钮
+      if (controller.userInfo.value?.isMember ?? false) {
         btn = _buildLookAnalyseBtn(context);
       } else {
-        // 例子阶段,则显示上传截图按钮
-        btn = _buildUploadScreenshotBtn(context);
+        // 未解锁,显示带锁的按钮
+        btn = _buildUnlockBtn(context);
       }
+    } else {
+      // 例子阶段,则显示上传截图按钮
+      btn = _buildUploadScreenshotBtn(context);
     }
     return Column(
       // 高度包裹内容

+ 26 - 8
lib/widget/gradient_btn.dart

@@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 
+import '../resource/assets.gen.dart';
 import '../resource/colors.gen.dart';
 
 /// 渐变色按钮
@@ -69,8 +70,11 @@ class GradientBtn extends StatelessWidget {
   }
 }
 
-/// 渐变按钮,中间为文字
+/// 渐变按钮,中间为文字,文字左边是一个图标
 class GradientTextBtn extends StatelessWidget {
+  /// 文字左边的图标
+  final Image? leftIcon;
+
   /// 按钮文字
   final String text;
 
@@ -93,6 +97,7 @@ class GradientTextBtn extends StatelessWidget {
   const GradientTextBtn(
     this.text, {
     super.key,
+    this.leftIcon,
     this.color,
     this.colors = const [ColorName.purpleGradient3, ColorName.purpleGradient4],
     this.begin = Alignment.centerLeft,
@@ -108,13 +113,26 @@ class GradientTextBtn extends StatelessWidget {
       colors: colors,
       radius: radius,
       onPressed: onPressed,
-      child: Text(
-        text,
-        style: TextStyle(
-          color: ColorName.white,
-          fontSize: 16.sp,
-          fontWeight: FontWeight.bold,
-        ),
+      child: Row(
+        mainAxisAlignment: MainAxisAlignment.center,
+        children: [
+          // 左侧图标
+          Visibility(
+            visible: leftIcon != null,
+            child: Container(
+              margin: EdgeInsets.only(right: 4.w),
+              child: leftIcon,
+            ),
+          ),
+          Text(
+            text,
+            style: TextStyle(
+              color: ColorName.white,
+              fontSize: 16.sp,
+              fontWeight: FontWeight.bold,
+            ),
+          ),
+        ],
       ),
     );
   }