Forráskód Böngészése

add:添加去评价功能。

zhoukun 5 hónapja
szülő
commit
27d0f5d510

BIN
assets/images/icon_member_contact_click_help.webp


+ 6 - 0
ios/Podfile.lock

@@ -28,6 +28,8 @@ PODS:
   - in_app_purchase_storekit (0.0.1):
     - Flutter
     - FlutterMacOS
+  - in_app_review (2.0.0):
+    - Flutter
   - map_mapkit_ios (0.0.1):
     - Flutter
   - MMKV (2.2.2):
@@ -70,6 +72,7 @@ DEPENDENCIES:
   - flutter_umeng (from `.symlinks/plugins/flutter_umeng/ios`)
   - gravity_engine (from `.symlinks/plugins/gravity_engine/ios`)
   - in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`)
+  - in_app_review (from `.symlinks/plugins/in_app_review/ios`)
   - map_mapkit_ios (from `.symlinks/plugins/map_mapkit_ios/ios`)
   - mmkv_ios (from `.symlinks/plugins/mmkv_ios/ios`)
   - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
@@ -109,6 +112,8 @@ EXTERNAL SOURCES:
     :path: ".symlinks/plugins/gravity_engine/ios"
   in_app_purchase_storekit:
     :path: ".symlinks/plugins/in_app_purchase_storekit/darwin"
+  in_app_review:
+    :path: ".symlinks/plugins/in_app_review/ios"
   map_mapkit_ios:
     :path: ".symlinks/plugins/map_mapkit_ios/ios"
   mmkv_ios:
@@ -139,6 +144,7 @@ SPEC CHECKSUMS:
   flutter_umeng: c1bb7f26be0aea78e454fed645eb146a5d26d182
   gravity_engine: 9075091c4adcd0169506f97688ebac7f5454c4ac
   in_app_purchase_storekit: d1a48cb0f8b29dbf5f85f782f5dd79b21b90a5e6
+  in_app_review: 5596fe56fab799e8edb3561c03d053363ab13457
   map_mapkit_ios: ca064ca09018af4608239db3d98b46cb2233e8b9
   MMKV: b4802ebd5a7c68fc0c4a5ccb4926fbdfb62d68e0
   mmkv_ios: b1c2c12115c0ff971534015f61aea8de18d8d126

+ 1 - 1
lib/data/api/atmob_api.dart

@@ -197,7 +197,7 @@ abstract class AtmobApi {
       @Body() UserAvatarUpdateRequest request);
 
   ///检查是否是首次购买-中台
-  @POST("/s/v1/order/first/check")
+  @POST("/s/v1/order/pay/check")
   Future<BaseResponse<OrderFirstCheckResponse>> orderFirstCheck(
       @Body() AppBaseRequest request);
 }

+ 1 - 1
lib/data/api/atmob_api.g.dart

@@ -1486,7 +1486,7 @@ class _AtmobApi implements AtmobApi {
     )
             .compose(
               _dio.options,
-              '/s/v1/order/first/check',
+              '/s/v1/order/pay/check',
               queryParameters: queryParameters,
               data: _data,
             )

+ 9 - 3
lib/data/api/response/order_first_check_response.dart

@@ -6,10 +6,16 @@ part 'order_first_check_response.g.dart';
 
 @JsonSerializable()
 class OrderFirstCheckResponse {
-  @JsonKey(name: 'first')
-  bool first;
+  @JsonKey(name: 'showInvite')
+  bool showInvite;
 
-  OrderFirstCheckResponse(this.first);
+  @JsonKey(name: 'showEvaluate')
+  bool showEvaluate;
+
+  @JsonKey(name: 'days')
+  bool days;
+
+  OrderFirstCheckResponse(this.showInvite,this.showEvaluate,this.days);
 
   factory OrderFirstCheckResponse.fromJson(Map<String, dynamic> json) =>
       _$OrderFirstCheckResponseFromJson(json);

+ 6 - 2
lib/data/api/response/order_first_check_response.g.dart

@@ -9,11 +9,15 @@ part of 'order_first_check_response.dart';
 OrderFirstCheckResponse _$OrderFirstCheckResponseFromJson(
         Map<String, dynamic> json) =>
     OrderFirstCheckResponse(
-      json['first'] as bool,
+      json['showInvite'] as bool,
+      json['showEvaluate'] as bool,
+      json['days'] as bool,
     );
 
 Map<String, dynamic> _$OrderFirstCheckResponseToJson(
         OrderFirstCheckResponse instance) =>
     <String, dynamic>{
-      'first': instance.first,
+      'showInvite': instance.showInvite,
+      'showEvaluate': instance.showEvaluate,
+      'days': instance.days,
     };

+ 24 - 23
lib/module/member/member_controller.dart

@@ -32,6 +32,7 @@ import '../../dialog/member_retain_dialog.dart';
 import '../../dialog/wechat_qr_code_dialog.dart';
 import '../../resource/string.gen.dart';
 import '../../sdk/wechat/wechat_share_util.dart';
+import '../../utils/app_review_service.dart';
 import '../../utils/http_handler.dart';
 import '../../utils/mmkv_util.dart';
 import '../../utils/payment_status_manager.dart';
@@ -146,14 +147,6 @@ class MemberController extends BaseController implements PaymentStatusCallback {
     });
     refreshMemberData();
 
-    /*
-    评价
-    MemberEvaluationPopUpDialog.show(payClick: () {
-
-    }, cancelClick: () {
-
-    });
-    */
   }
 
   ///是否弹窗提示
@@ -612,27 +605,35 @@ class MemberController extends BaseController implements PaymentStatusCallback {
   @override
   void onPaymentSuccess(
       String orderNo, PayItemBean paymentWay, GoodsBean storeItemBean) {
-    MemberPageType pageType = Get.arguments ?? MemberPageType.universalAccessEnter;
-    if (pageType == MemberPageType.addFriendToEnter) {
-      ///购买成功之后弹出
-      afterTheFirstPurchasePromptSharingBoxPops();
-    } else {
-      onPaySucessShow();
-    }
+    ///购买成功之后弹出
+    afterTheFirstPurchasePromptSharingBoxPops();
   }
 
   ///第一次购买之后弹出提示分享框
   void afterTheFirstPurchasePromptSharingBoxPops() {
     paymentStatusManager.onOrderFirstCheck().then((checkReponse) {
-      if (checkReponse.first) {
-        MemberPaymentCompletedDialog.show(confirmOnTap: () {
-          WechatShareUtil.shareWebPage().catchError((error) {
-            ToastUtil.show(error);
+      //是否展示邀请弹框
+      if (checkReponse.showInvite || checkReponse.showEvaluate) {
+        MemberPageType pageType = Get.arguments ?? MemberPageType.universalAccessEnter;
+        //去分享
+        if (checkReponse.showInvite && pageType == MemberPageType.addFriendToEnter) {
+          MemberPaymentCompletedDialog.show(confirmOnTap: () {
+            WechatShareUtil.shareWebPage().catchError((error) {
+              ToastUtil.show(error);
+            });
+            onPaySucessShow();
+          },cancelOnTap: () {
+            onPaySucessShow();
           });
-          onPaySucessShow();
-        },cancelOnTap: () {
-          onPaySucessShow();
-        });
+        }
+        if (checkReponse.showEvaluate) {
+          ///是否展示好评领会员弹框
+          //去评价
+          MemberEvaluationPopUpDialog.show(confirmOnTap: () {
+            AppReviewService.requestAppReview(Get.context!);
+            onPaySucessShow();
+          },days: 1);
+        }
       } else {
         onPaySucessShow();
       }

+ 87 - 5
lib/module/member/member_evaluation_pop_up_dialog.dart

@@ -7,11 +7,14 @@ import 'package:get/get_core/src/get_main.dart';
 import 'package:location/utils/common_expand.dart';
 
 import '../../resource/assets.gen.dart';
+import '../../resource/colors.gen.dart';
 
 class MemberEvaluationPopUpDialog {
   static void show({
     VoidCallback? cancelOnTap,
-    VoidCallback? confirmOnTap,}) {
+    VoidCallback? confirmOnTap,
+    int? days
+  }) {
     Get.dialog(
         SimpleDialog(
           titlePadding: EdgeInsets.zero,
@@ -24,7 +27,9 @@ class MemberEvaluationPopUpDialog {
                   Get.back();
                   cancelOnTap!();
                 },
-                confirmOnTap: confirmOnTap)
+                confirmOnTap: confirmOnTap,
+              days: days,
+            )
           ],
         )
     );
@@ -35,12 +40,13 @@ class MemberEvaluationPopUpDialog {
 class MemberPaymentCompletedTipView extends StatefulWidget {
   final VoidCallback? cancelOnTap;
   final VoidCallback? confirmOnTap;
-
+  final int? days;
 
   const MemberPaymentCompletedTipView({
     super.key,
     this.cancelOnTap,
     required this.confirmOnTap,
+    this.days
   });
 
   @override
@@ -71,8 +77,84 @@ class _MemberPaymentCompletedTipViewState extends State<MemberPaymentCompletedTi
                   child: Column(
                     children: [
                       SizedBox(
-                        height: 183.w,
+                        height: 110.w,
+                      ),
+                      Row(
+                        crossAxisAlignment: CrossAxisAlignment.end,
+                        mainAxisAlignment: MainAxisAlignment.center,
+                        children: [
+                          Text("五星好评,",
+                              style: TextStyle(
+                                  fontSize: 18.sp,
+                                  color: "#333333".color,
+                                  fontWeight: FontWeight.bold)),
+                          Text("免费领" ,
+                              style: TextStyle(
+                                  fontSize: 18.sp,
+                                  color: "#5E61F7".color,
+                                  fontWeight: FontWeight.bold)),
+                          Transform.translate(
+                            offset: Offset(0, 8), // 向下偏移4像素
+                            child: Text("${widget.days ?? 0}",
+                                style: TextStyle(
+                                    fontSize: 32.sp,
+                                    color: "#5E61F7".color,
+                                    fontWeight: FontWeight.bold)),
+                          ),
+                          Text("天会员",
+                              style: TextStyle(
+                                  fontSize: 18.sp,
+                                  color: "#5E61F7".color,
+                                  fontWeight: FontWeight.bold))
+                        ],
+                      ),
+                      SizedBox(height: 8.w,),
+                      Row(
+                        mainAxisAlignment: MainAxisAlignment.center,
+                        children: [
+                          Container(
+                            decoration: BoxDecoration(
+                              gradient: LinearGradient(
+                                // 渐变方向:90度(从左到右)
+                                begin: Alignment.centerLeft,
+                                end: Alignment.centerRight,
+                                // 渐变颜色:从透明灰到#AAA
+                                colors: [
+                                  Color.fromRGBO(170, 170, 170, 0.0), // rgba(170, 170, 170, 0.00)
+                                  Color(0xFFAAAAAA), // #AAA
+                                ],
+                                // 渐变位置:0%到100%
+                                stops: [0.0, 1.0],
+                              ),
+                            ),
+                            width: 14.w,
+                            height: 1.w,
+                          ),
+                          SizedBox(width: 6.w,),
+                          Text("为你重要的朋友保驾护航",
+                              style: TextStyle(fontSize: 12.sp, color: ColorName.black60)),
+                          SizedBox(width: 6.w,),
+                          Container(
+                            width: 14.w,
+                            height: 1.w,
+                            decoration: BoxDecoration(
+                              gradient: LinearGradient(
+                                // 90度渐变(从左到右)
+                                begin:  Alignment(1.0, 0.0),// 左侧起点
+                                end: Alignment(-1.0, 0.0),   // 右侧终点
+                                // 渐变颜色:透明灰到#AAA
+                                colors: [
+                                  Color.fromARGB(0, 170, 170, 170), // rgba(170, 170, 170, 0.00)
+                                  Color(0xFFAAAAAA),               // #AAA
+                                ],
+                                // 颜色分布位置
+                                stops: [0.0, 1.0],
+                              ),
+                            ),
+                          )
+                        ],
                       ),
+                      SizedBox(height: 20.w,),
                       GestureDetector(
                         onTap: () {
                           Get.back();
@@ -113,7 +195,7 @@ class _MemberPaymentCompletedTipViewState extends State<MemberPaymentCompletedTi
             ),
           ),
           Positioned(
-            top: 41.w,
+            top: 48.w,
             right: 16.w,
             width: 20.w,
             height: 20.w,

+ 2 - 2
lib/module/member/member_payment_completed_dialog.dart

@@ -109,8 +109,8 @@ class _MemberPaymentCompletedTipViewState extends State<MemberPaymentCompletedTi
                         decoration: BoxDecoration(
                           gradient: LinearGradient(
                             // 90度渐变(从左到右)
-                            begin: Alignment(-1.0, 0.0), // 左侧起点
-                            end: Alignment(1.0, 0.0),   // 右侧终点
+                            begin: Alignment(1.0, 0.0), // 左侧起点
+                            end: Alignment(-1.0, 0.0),   // 右侧终点
                             // 渐变颜色:透明灰到#AAA
                             colors: [
                               Color.fromARGB(0, 170, 170, 170), // rgba(170, 170, 170, 0.00)

+ 2 - 2
lib/module/urgent_contact/urgent_contact_click_help_dialog.dart

@@ -107,8 +107,8 @@ class _MemberPaymentCompletedTipViewState extends State<MemberPaymentCompletedTi
                         decoration: BoxDecoration(
                           gradient: LinearGradient(
                             // 90度渐变(从左到右)
-                            begin: Alignment(-1.0, 0.0), // 左侧起点
-                            end: Alignment(1.0, 0.0),   // 右侧终点
+                            begin: Alignment(1.0, 0.0), // 左侧起点
+                            end: Alignment(-1.0, 0.0),   // 右侧终点
                             // 渐变颜色:透明灰到#AAA
                             colors: [
                               Color.fromARGB(0, 170, 170, 170), // rgba(170, 170, 170, 0.00)

+ 32 - 0
lib/utils/app_review_service.dart

@@ -0,0 +1,32 @@
+import 'package:flutter/material.dart';
+import 'package:in_app_review/in_app_review.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+class AppReviewService {
+  static final InAppReview _inAppReview = InAppReview.instance;
+
+  // 触发评价逻辑
+  static Future<void> requestAppReview(BuildContext context) async {
+    try {
+      // iOS和Android优先使用应用内评价
+      if (await _inAppReview.isAvailable()) {
+        await _inAppReview.requestReview();
+      } else {
+        await _openStoreListing();
+      }
+    } catch (e) {
+      ScaffoldMessenger.of(context).showSnackBar(
+          SnackBar(content: Text('评价功能暂时不可用,请稍后再试'))
+      );
+      print('Error requesting review: $e');
+    }
+  }
+
+  // 打开应用商店列表
+  static Future<void> _openStoreListing() async {
+    await _inAppReview.openStoreListing(
+      appStoreId: 'com.shishi.dingwei', // iOS应用ID
+    );
+  }
+
+}

+ 16 - 0
pubspec.lock

@@ -696,6 +696,22 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "0.4.2"
+  in_app_review:
+    dependency: "direct main"
+    description:
+      name: in_app_review
+      sha256: "36a06771b88fb0e79985b15e7f2ac0f1142e903fe72517f3c055d78bc3bc1819"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.0.10"
+  in_app_review_platform_interface:
+    dependency: transitive
+    description:
+      name: in_app_review_platform_interface
+      sha256: fed2c755f2125caa9ae10495a3c163aa7fab5af3585a9c62ef4a6920c5b45f10
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.0.5"
   injectable:
     dependency: "direct main"
     description:

+ 3 - 0
pubspec.yaml

@@ -130,6 +130,9 @@ dependencies:
   #图片缓存
   cached_network_image: ^3.4.1
 
+  #跳转评价
+  in_app_review: ^2.0.10
+
   ######################地图########################
   flutter_map:
     path: plugins/map