Przeglądaj źródła

fix:优化点击轨迹详情跳转。

zhoukun 5 miesięcy temu
rodzic
commit
13d53331e0

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

@@ -44,7 +44,6 @@ import 'package:location/data/api/response/user_avatar_response.dart';
 import 'package:retrofit/error_logger.dart';
 import 'package:retrofit/http.dart';
 import 'package:retrofit/dio.dart';
-import '../bean/track_daily_dialogs_info.dart';
 import '../bean/user_info.dart';
 
 part 'atmob_api.g.dart';

+ 4 - 2
lib/data/api/response/track_daily_dialogs_response.dart

@@ -1,7 +1,9 @@
 
 
 import 'package:json_annotation/json_annotation.dart';
-import '../../bean/track_daily_dialogs_info.dart';
+
+import '../../bean/user_info.dart';
+
 part 'track_daily_dialogs_response.g.dart';
 
 @JsonSerializable()
@@ -10,7 +12,7 @@ class TrackDailyDialogsResponse {
   bool? show;
 
   @JsonKey(name: "list")
-  List<TrackDailyDialogsInfo>? trackDailyList;
+  List<UserInfo>? trackDailyList;
 
   TrackDailyDialogsResponse({this.trackDailyList,this.show});
 

+ 1 - 2
lib/data/api/response/track_daily_dialogs_response.g.dart

@@ -10,8 +10,7 @@ TrackDailyDialogsResponse _$TrackDailyDialogsResponseFromJson(
         Map<String, dynamic> json) =>
     TrackDailyDialogsResponse(
       trackDailyList: (json['list'] as List<dynamic>?)
-          ?.map(
-              (e) => TrackDailyDialogsInfo.fromJson(e as Map<String, dynamic>))
+          ?.map((e) => UserInfo.fromJson(e as Map<String, dynamic>))
           .toList(),
       show: json['show'] as bool?,
     );

+ 0 - 39
lib/data/bean/track_daily_dialogs_info.dart

@@ -1,39 +0,0 @@
-
-import 'package:json_annotation/json_annotation.dart';
-
-part 'track_daily_dialogs_info.g.dart';
-
-@JsonSerializable()
-class TrackDailyDialogsInfo {
-
-  ///好友id
-  @JsonKey(name: 'friendId')
-  String? friendId;
-
-  ///手机号码
-  @JsonKey(name: 'phone')
-  String? phone;
-
-  ///备注
-  @JsonKey(name: 'remark')
-  String? remark;
-
-  /// 头像
-  @JsonKey(name: 'avatar')
-  String? avatar;
-
-  ///名称
-  @JsonKey(name: 'name')
-  String? name;
-
-  TrackDailyDialogsInfo({
-    this.friendId,
-    this.phone,
-    this.remark,
-    this.avatar,
-    this.name,
-  });
-
-  factory TrackDailyDialogsInfo.fromJson(Map<String, dynamic> json) =>
-      _$TrackDailyDialogsInfoFromJson(json);
-}

+ 0 - 27
lib/data/bean/track_daily_dialogs_info.g.dart

@@ -1,27 +0,0 @@
-// GENERATED CODE - DO NOT MODIFY BY HAND
-
-part of 'track_daily_dialogs_info.dart';
-
-// **************************************************************************
-// JsonSerializableGenerator
-// **************************************************************************
-
-TrackDailyDialogsInfo _$TrackDailyDialogsInfoFromJson(
-        Map<String, dynamic> json) =>
-    TrackDailyDialogsInfo(
-      friendId: json['friendId'] as String?,
-      phone: json['phone'] as String?,
-      remark: json['remark'] as String?,
-      avatar: json['avatar'] as String?,
-      name: json['name'] as String?,
-    );
-
-Map<String, dynamic> _$TrackDailyDialogsInfoToJson(
-        TrackDailyDialogsInfo instance) =>
-    <String, dynamic>{
-      'friendId': instance.friendId,
-      'phone': instance.phone,
-      'remark': instance.remark,
-      'avatar': instance.avatar,
-      'name': instance.name,
-    };

+ 4 - 0
lib/data/bean/user_info.dart

@@ -13,6 +13,9 @@ class UserInfo {
   @JsonKey(name: 'phone')
   final String phoneNumber;
 
+  @JsonKey(name: 'name')
+  final String? name;
+
   @JsonKey(name: 'remark')
   String? remark;
 
@@ -39,6 +42,7 @@ class UserInfo {
   UserInfo({
     required this.id,
     required this.phoneNumber,
+    this.name,
     this.remark,
     this.timestamp,
     this.blockedHim,

+ 2 - 0
lib/data/bean/user_info.g.dart

@@ -9,6 +9,7 @@ part of 'user_info.dart';
 UserInfo _$UserInfoFromJson(Map<String, dynamic> json) => UserInfo(
       id: json['friendId'] as String,
       phoneNumber: json['phone'] as String,
+      name: json['name'] as String?,
       remark: json['remark'] as String?,
       timestamp: (json['timestamp'] as num?)?.toInt(),
       blockedHim: json['blockedHim'] as bool?,
@@ -21,6 +22,7 @@ UserInfo _$UserInfoFromJson(Map<String, dynamic> json) => UserInfo(
 Map<String, dynamic> _$UserInfoToJson(UserInfo instance) => <String, dynamic>{
       'friendId': instance.id,
       'phone': instance.phoneNumber,
+      'name': instance.name,
       'remark': instance.remark,
       'timestamp': instance.timestamp,
       'blockedHim': instance.blockedHim,

+ 1 - 1
lib/main.dart

@@ -227,7 +227,7 @@ void initPushNotification() {
 
   IosPushNotificationService.onNotificationReceived = (data) {
     print('Received notification: $data');
-    //PushNotificationService.handleNotificationPushChick(data);
+    IosPushNotificationService.handleNotificationPushChick(data);
     // 处理前台收到的通知
   };
 

+ 1 - 1
lib/module/main/main_controller.dart

@@ -161,7 +161,7 @@ class MainController extends BaseController {
       if (trackResponse.show ?? false) {
         TrackDailyReportDialog.show(trackDailyList: trackResponse.trackDailyList,confirmOnTap: () {
           TrackChooseFriendDialog.show(trackDailyList: trackResponse.trackDailyList,onSelectItem: (selectInfo) {
-
+            onViewTraceClick(selectInfo);
           });
         });
       }

+ 6 - 6
lib/module/track/track_dialog/track_choose_friend_dialog.dart

@@ -6,7 +6,7 @@ import 'package:location/module/track/track_dialog/track_choose_friend_item.dart
 import 'package:location/resource/string.gen.dart';
 import 'package:location/utils/common_expand.dart';
 
-import '../../../data/bean/track_daily_dialogs_info.dart';
+import '../../../data/bean/user_info.dart';
 import '../../../resource/assets.gen.dart';
 import '../../../resource/colors.gen.dart';
 
@@ -14,7 +14,7 @@ import '../../../resource/colors.gen.dart';
 class TrackChooseFriendDialog {
   static const String _tag = 'TrackChooseFriendDialog';
 
-  static void show({List<TrackDailyDialogsInfo>? trackDailyList,SelectAcceptCallback? onSelectItem}) {
+  static void show({List<UserInfo>? trackDailyList,SelectAcceptCallback? onSelectItem}) {
     SmartDialog.show(
         builder: (_) => TrackChooseFriendView(confirmOnTap: () {},trackDailyList: trackDailyList,onSelectItem: onSelectItem,),
         tag: _tag,
@@ -29,7 +29,7 @@ class TrackChooseFriendDialog {
 class TrackChooseFriendView extends StatefulWidget {
   final VoidCallback? cancelOnTap;
   final VoidCallback? confirmOnTap;
-  final List<TrackDailyDialogsInfo>? trackDailyList;
+  final List<UserInfo>? trackDailyList;
   final SelectAcceptCallback? onSelectItem;
 
   const TrackChooseFriendView({
@@ -47,7 +47,7 @@ class TrackChooseFriendView extends StatefulWidget {
 
 class _TrackChooseFriendViewState extends State<TrackChooseFriendView> {
 
-  TrackDailyDialogsInfo selectDailyDialogsInfo = TrackDailyDialogsInfo();
+  UserInfo selectDailyDialogsInfo = UserInfo(phoneNumber: "0", id: '0');
 
   @override
   void initState() {
@@ -139,9 +139,9 @@ class _TrackChooseFriendViewState extends State<TrackChooseFriendView> {
     return ListView.builder(
         padding: EdgeInsets.only(top: 0, bottom: 100.w),
         itemBuilder: (_, index) {
-          TrackDailyDialogsInfo itemInfo = (widget.trackDailyList ?? [])[index];
+          UserInfo itemInfo = (widget.trackDailyList ?? [])[index];
 
-          return createUserItem(itemInfo,itemInfo.friendId == selectDailyDialogsInfo.friendId, onSelectItem: (selectInfo) {
+          return createUserItem(itemInfo,itemInfo.id == selectDailyDialogsInfo.id, onSelectItem: (selectInfo) {
             selectDailyDialogsInfo = selectInfo;
             setState(() {
             });

+ 5 - 4
lib/module/track/track_dialog/track_choose_friend_item.dart

@@ -8,12 +8,13 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:location/resource/colors.gen.dart';
 import 'package:location/utils/common_expand.dart';
 
-import '../../../data/bean/track_daily_dialogs_info.dart';
+import '../../../data/bean/user_info.dart';
 
 
-typedef SelectAcceptCallback = void Function(TrackDailyDialogsInfo itemInfo);
 
-Widget createUserItem(TrackDailyDialogsInfo itemInfo,bool isSelect,{required SelectAcceptCallback onSelectItem}) {
+typedef SelectAcceptCallback = void Function(UserInfo itemInfo);
+
+Widget createUserItem(UserInfo itemInfo,bool isSelect,{required SelectAcceptCallback onSelectItem}) {
   return GestureDetector(
     onTap: () {
       onSelectItem(itemInfo);
@@ -42,7 +43,7 @@ Widget createUserItem(TrackDailyDialogsInfo itemInfo,bool isSelect,{required Sel
           SizedBox(width: 8.w),
           Expanded(
             child: Text(
-                (itemInfo.name ?? "").length > 11 ? '${(itemInfo.name ?? "").substring(0,11)}...' : (itemInfo.name ?? itemInfo.phone ?? ""),
+                (itemInfo.name ?? "").length > 11 ? '${(itemInfo.name ?? "").substring(0,11)}...' : (itemInfo.name ?? itemInfo.phoneNumber ?? ""),
                 style: TextStyle(
                     fontSize: 12.sp,
                     color: "#333333".color,

+ 5 - 6
lib/module/track/track_dialog/track_daily_report_dialog.dart

@@ -5,17 +5,16 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 import 'package:get/get_core/src/get_main.dart';
 import 'package:location/module/track/track_dialog/track_overlapping_avatars.dart';
-import 'package:location/resource/colors.gen.dart';
 import 'package:location/utils/common_expand.dart';
 
-import '../../../data/bean/track_daily_dialogs_info.dart';
+import '../../../data/bean/user_info.dart';
 import '../../../resource/assets.gen.dart';
 
 class TrackDailyReportDialog {
   static void show({
     VoidCallback? cancelOnTap,
     VoidCallback? confirmOnTap,
-    List<TrackDailyDialogsInfo>? trackDailyList,
+    List<UserInfo>? trackDailyList,
   }) {
     Get.dialog(
         barrierDismissible: false,
@@ -42,7 +41,7 @@ class TrackDailyReportDialog {
 class TrackDailyReportTipView extends StatefulWidget {
   final VoidCallback? cancelOnTap;
   final VoidCallback? confirmOnTap;
-  final List<TrackDailyDialogsInfo>? trackDailyList;
+  final List<UserInfo>? trackDailyList;
 
 
   const TrackDailyReportTipView({
@@ -67,13 +66,13 @@ class _TrackDailyReportTipViewState extends State<TrackDailyReportTipView> {
     avatarUrls = extractUrls(widget.trackDailyList);//widget.trackDailyList!.map((item) => item.avatar ?? "").whereType<String>().toList();
   }
 
-  List<String> extractUrls(List<TrackDailyDialogsInfo>? trackDailyList) {
+  List<String> extractUrls(List<UserInfo>? trackDailyList) {
     // 若列表为 null,则返回空列表
     if (trackDailyList == null) return [];
 
     // 使用 map 操作提取 url 字段,并过滤掉可能的 null 值
     return trackDailyList
-        .map((item) => item.avatar) // 假设 TrackDailyDialogsInfo 类中有 url 字段
+        .map((item) => item.avatar) // 假设 UserInfo 类中有 url 字段
         .whereType<String>()     // 过滤掉可能的 null 值
         .toList();
   }

+ 36 - 20
lib/push_notification/ios_push_notification_service.dart

@@ -1,13 +1,18 @@
-import 'dart:convert';
-import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
-import 'package:get/get.dart';
-import 'package:get/get_core/src/get_main.dart';
 
+
+import '../data/bean/user_info.dart';
+import '../data/repositories/account_repository.dart';
 import '../data/repositories/track_repository.dart';
+import '../dialog/common_alert_dialog_impl.dart';
+import '../dialog/common_confirm_dialog_impl.dart';
 import '../handler/error_handler.dart';
+import '../module/login/login_page.dart';
+import '../module/member/member_page.dart';
 import '../module/track/track_dialog/track_choose_friend_dialog.dart';
-import '../module/track/track_dialog/track_daily_report_dialog.dart';
+import '../module/track/track_page.dart';
+import '../sdk/wechat/wechat_share_util.dart';
+import '../utils/toast_util.dart';
 
 
 class IosPushNotificationService {
@@ -72,35 +77,46 @@ class IosPushNotificationService {
     }
   }
 
-  ///处理推送各种点击 skipType 0-首页 1-好友申请页面 2-好友消息页面
+  ///处理推送各种点击
   static void handleNotificationPushChick(Map<String,dynamic> pushDict) {
     int skipType = pushDict["skipType"];
     TrackRepository trackRepository = TrackRepository.getInstance();
     trackRepository.locationTrackDailyDialogs().then((trackResponse) {
       if ((trackResponse.trackDailyList ?? []).isNotEmpty) {
          if ((trackResponse.trackDailyList ?? []).length == 1) {
-
+           onViewTraceClic((trackResponse.trackDailyList ?? []).first);
          } else {
            TrackChooseFriendDialog.show(trackDailyList: trackResponse.trackDailyList,onSelectItem: (selectInfo) {
-
+             onViewTraceClic(selectInfo);
            });
          }
       }
     }).catchError((error) {
       ErrorHandler.toastError(error);
     });
+  }
 
-    // skipType = 0;
-    // if (skipType == 0) {
-    //   Get.until((route) => route.isFirst);
-    //   // 在其他页面或组件中
-    //   final mainController = Get.find<MainController>();
-    //   // 调用方法
-    //   mainController.onTabClick(0); // 切换到第一个Tab
-    // } else if (skipType == 1) {
-    //   MessagePage.start(initialIndex: 0);
-    // } else if (skipType == 2) {
-    //   MessagePage.start(initialIndex: 1);
-    // }
+  static void onViewTraceClic(UserInfo userInfo) {
+    AccountRepository accountRepository = AccountRepository.getInstance();
+    if (!accountRepository.isLogin.value) {
+      showTraceTipsDialog(onConfirm: () {
+        LoginPage.start();
+      });
+      return;
+    }
+    if (!(userInfo.virtual ?? false) && accountRepository.memberIsExpired()) {
+      MemberPage.start();
+      return;
+    }
+
+    if (userInfo.blockedMe == true) {
+      showBlockMeTipDialog(confirmOnTap: () {
+        WechatShareUtil.shareWebPage().catchError((error) {
+          ToastUtil.show(error.toString());
+        });
+      });
+      return;
+    }
+    TrackPage.start(userInfo);
   }
 }