Commit 68edda64c1cec4aab814d3f0c2038760545f91f5
1 parent
b728d625
feat(ui):添加检查手表设备时附带是否已经安装了 doublefeel
Showing
6 changed files
with
60 additions
and
15 deletions
| @@ -83,7 +83,8 @@ class FlutterError ( | @@ -83,7 +83,8 @@ class FlutterError ( | ||
| 83 | data class WearDeviceInfo ( | 83 | data class WearDeviceInfo ( |
| 84 | val deviceId: String? = null, | 84 | val deviceId: String? = null, |
| 85 | val deviceName: String? = null, | 85 | val deviceName: String? = null, |
| 86 | - val isConnected: Boolean? = null | 86 | + val isConnected: Boolean? = null, |
| 87 | + val isWatchAppInstalled: Boolean? = null | ||
| 87 | ) | 88 | ) |
| 88 | { | 89 | { |
| 89 | companion object { | 90 | companion object { |
| @@ -91,7 +92,8 @@ data class WearDeviceInfo ( | @@ -91,7 +92,8 @@ data class WearDeviceInfo ( | ||
| 91 | val deviceId = pigeonVar_list[0] as String? | 92 | val deviceId = pigeonVar_list[0] as String? |
| 92 | val deviceName = pigeonVar_list[1] as String? | 93 | val deviceName = pigeonVar_list[1] as String? |
| 93 | val isConnected = pigeonVar_list[2] as Boolean? | 94 | val isConnected = pigeonVar_list[2] as Boolean? |
| 94 | - return WearDeviceInfo(deviceId, deviceName, isConnected) | 95 | + val isWatchAppInstalled = pigeonVar_list[3] as Boolean? |
| 96 | + return WearDeviceInfo(deviceId, deviceName, isConnected, isWatchAppInstalled) | ||
| 95 | } | 97 | } |
| 96 | } | 98 | } |
| 97 | fun toList(): List<Any?> { | 99 | fun toList(): List<Any?> { |
| @@ -99,6 +101,7 @@ data class WearDeviceInfo ( | @@ -99,6 +101,7 @@ data class WearDeviceInfo ( | ||
| 99 | deviceId, | 101 | deviceId, |
| 100 | deviceName, | 102 | deviceName, |
| 101 | isConnected, | 103 | isConnected, |
| 104 | + isWatchAppInstalled, | ||
| 102 | ) | 105 | ) |
| 103 | } | 106 | } |
| 104 | override fun equals(other: Any?): Boolean { | 107 | override fun equals(other: Any?): Boolean { |
| @@ -117,6 +117,7 @@ struct WearDeviceInfo: Hashable { | @@ -117,6 +117,7 @@ struct WearDeviceInfo: Hashable { | ||
| 117 | var deviceId: String? = nil | 117 | var deviceId: String? = nil |
| 118 | var deviceName: String? = nil | 118 | var deviceName: String? = nil |
| 119 | var isConnected: Bool? = nil | 119 | var isConnected: Bool? = nil |
| 120 | + var isWatchAppInstalled: Bool? = nil | ||
| 120 | 121 | ||
| 121 | 122 | ||
| 122 | // swift-format-ignore: AlwaysUseLowerCamelCase | 123 | // swift-format-ignore: AlwaysUseLowerCamelCase |
| @@ -124,11 +125,13 @@ struct WearDeviceInfo: Hashable { | @@ -124,11 +125,13 @@ struct WearDeviceInfo: Hashable { | ||
| 124 | let deviceId: String? = nilOrValue(pigeonVar_list[0]) | 125 | let deviceId: String? = nilOrValue(pigeonVar_list[0]) |
| 125 | let deviceName: String? = nilOrValue(pigeonVar_list[1]) | 126 | let deviceName: String? = nilOrValue(pigeonVar_list[1]) |
| 126 | let isConnected: Bool? = nilOrValue(pigeonVar_list[2]) | 127 | let isConnected: Bool? = nilOrValue(pigeonVar_list[2]) |
| 128 | + let isWatchAppInstalled: Bool? = nilOrValue(pigeonVar_list[3]) | ||
| 127 | 129 | ||
| 128 | return WearDeviceInfo( | 130 | return WearDeviceInfo( |
| 129 | deviceId: deviceId, | 131 | deviceId: deviceId, |
| 130 | deviceName: deviceName, | 132 | deviceName: deviceName, |
| 131 | - isConnected: isConnected | 133 | + isConnected: isConnected, |
| 134 | + isWatchAppInstalled: isWatchAppInstalled | ||
| 132 | ) | 135 | ) |
| 133 | } | 136 | } |
| 134 | func toList() -> [Any?] { | 137 | func toList() -> [Any?] { |
| @@ -136,6 +139,7 @@ struct WearDeviceInfo: Hashable { | @@ -136,6 +139,7 @@ struct WearDeviceInfo: Hashable { | ||
| 136 | deviceId, | 139 | deviceId, |
| 137 | deviceName, | 140 | deviceName, |
| 138 | isConnected, | 141 | isConnected, |
| 142 | + isWatchAppInstalled, | ||
| 139 | ] | 143 | ] |
| 140 | } | 144 | } |
| 141 | static func == (lhs: WearDeviceInfo, rhs: WearDeviceInfo) -> Bool { | 145 | static func == (lhs: WearDeviceInfo, rhs: WearDeviceInfo) -> Bool { |
| 1 | -# 使用前注意: 需要先将主项目和lovenote-flutter放到同一路径下 | ||
| 2 | -SOURCE_DIR="./SDK/iOS_SDK" | 1 | +#!/bin/bash |
| 3 | 2 | ||
| 4 | -# 目标目录,绝对路径 | ||
| 5 | -TARGET_DIR="../hippo/PodLocal/Flutter/SDK" | 3 | +set -euo pipefail |
| 6 | 4 | ||
| 7 | -# 检查目标目录是否存在 | ||
| 8 | -if [ -d "$TARGET_DIR" ]; then | ||
| 9 | - echo "目标目录已存在,正在替换..." | ||
| 10 | - rm -rf "$TARGET_DIR" | 5 | +# 使用前注意:doublefeel_flutter 和 hippo 需要位于同一目录下。 |
| 6 | +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
| 7 | +SOURCE_SDK_DIR="$SCRIPT_DIR/SDK/iOS_SDK" | ||
| 8 | +SOURCE_RUNNER_DIR="$SCRIPT_DIR/ios/Runner" | ||
| 9 | + | ||
| 10 | +HIPPO_PROJECT_DIR="$SCRIPT_DIR/../hippo/hippo" | ||
| 11 | +TARGET_SDK_DIR="$SCRIPT_DIR/../hippo/PodLocal/Flutter/SDK" | ||
| 12 | +TARGET_PIGEON_DIR="$HIPPO_PROJECT_DIR/Pigeon" | ||
| 13 | + | ||
| 14 | +if [ ! -d "$SOURCE_SDK_DIR" ]; then | ||
| 15 | + echo "iOS SDK目录不存在:$SOURCE_SDK_DIR" | ||
| 16 | + exit 1 | ||
| 17 | +fi | ||
| 18 | + | ||
| 19 | +if [ ! -d "$HIPPO_PROJECT_DIR" ]; then | ||
| 20 | + echo "hippo项目目录不存在:$HIPPO_PROJECT_DIR" | ||
| 21 | + exit 1 | ||
| 22 | +fi | ||
| 23 | + | ||
| 24 | +if [ -d "$TARGET_SDK_DIR" ]; then | ||
| 25 | + echo "目标SDK目录已存在,正在替换..." | ||
| 26 | + rm -rf "$TARGET_SDK_DIR" | ||
| 11 | else | 27 | else |
| 12 | - echo "目标目录不存在,正在新增..." | 28 | + echo "目标SDK目录不存在,正在新增..." |
| 13 | fi | 29 | fi |
| 14 | 30 | ||
| 15 | -# 复制源目录到目标目录 | ||
| 16 | -cp -r "$SOURCE_DIR" "$TARGET_DIR" | 31 | +mkdir -p "$(dirname "$TARGET_SDK_DIR")" "$TARGET_PIGEON_DIR" |
| 32 | +cp -R "$SOURCE_SDK_DIR" "$TARGET_SDK_DIR" | ||
| 33 | + | ||
| 34 | +echo "正在复制GeneratedPluginRegistrant文件..." | ||
| 35 | +cp -f \ | ||
| 36 | + "$SOURCE_RUNNER_DIR/GeneratedPluginRegistrant.h" \ | ||
| 37 | + "$SOURCE_RUNNER_DIR/GeneratedPluginRegistrant.m" \ | ||
| 38 | + "$HIPPO_PROJECT_DIR/" | ||
| 39 | + | ||
| 40 | +echo "正在复制Pigeon Api文件..." | ||
| 41 | +pigeon_api_files=("$SOURCE_RUNNER_DIR"/Pigeon/*Api.swift) | ||
| 42 | +if [ ! -e "${pigeon_api_files[0]}" ]; then | ||
| 43 | + echo "未找到Pigeon Api文件:$SOURCE_RUNNER_DIR/Pigeon/*Api.swift" | ||
| 44 | + exit 1 | ||
| 45 | +fi | ||
| 46 | +cp -f "${pigeon_api_files[@]}" "$TARGET_PIGEON_DIR/" | ||
| 17 | 47 | ||
| 18 | echo "操作完成。" | 48 | echo "操作完成。" |
| 1 | import 'dart:async'; | 1 | import 'dart:async'; |
| 2 | 2 | ||
| 3 | import 'package:doublefeel_flutter/app/routes/app_pages.dart'; | 3 | import 'package:doublefeel_flutter/app/routes/app_pages.dart'; |
| 4 | +import 'package:doublefeel_flutter/core/constants/intent_keys.dart'; | ||
| 4 | import 'package:doublefeel_flutter/core/network/api/theme_api.dart'; | 5 | import 'package:doublefeel_flutter/core/network/api/theme_api.dart'; |
| 5 | import 'package:doublefeel_flutter/core/network/api/vip_api.dart'; | 6 | import 'package:doublefeel_flutter/core/network/api/vip_api.dart'; |
| 6 | import 'package:doublefeel_flutter/core/result/app_result.dart'; | 7 | import 'package:doublefeel_flutter/core/result/app_result.dart'; |
| @@ -91,7 +92,7 @@ class WatchThemeController extends GetxController { | @@ -91,7 +92,7 @@ class WatchThemeController extends GetxController { | ||
| 91 | 92 | ||
| 92 | Future<void> _toPremiumPage() async { | 93 | Future<void> _toPremiumPage() async { |
| 93 | await Get.toNamed(Routes.PURCHASE, arguments: { | 94 | await Get.toNamed(Routes.PURCHASE, arguments: { |
| 94 | - 'channel_type': '表盘主题', | 95 | + IntentKeys.channelType: '表盘主题', |
| 95 | }); | 96 | }); |
| 96 | await _refreshVip(); | 97 | await _refreshVip(); |
| 97 | } | 98 | } |
| @@ -35,6 +35,7 @@ class WearDeviceInfo { | @@ -35,6 +35,7 @@ class WearDeviceInfo { | ||
| 35 | this.deviceId, | 35 | this.deviceId, |
| 36 | this.deviceName, | 36 | this.deviceName, |
| 37 | this.isConnected, | 37 | this.isConnected, |
| 38 | + this.isWatchAppInstalled, | ||
| 38 | }); | 39 | }); |
| 39 | 40 | ||
| 40 | String? deviceId; | 41 | String? deviceId; |
| @@ -43,11 +44,14 @@ class WearDeviceInfo { | @@ -43,11 +44,14 @@ class WearDeviceInfo { | ||
| 43 | 44 | ||
| 44 | bool? isConnected; | 45 | bool? isConnected; |
| 45 | 46 | ||
| 47 | + bool? isWatchAppInstalled; | ||
| 48 | + | ||
| 46 | List<Object?> _toList() { | 49 | List<Object?> _toList() { |
| 47 | return <Object?>[ | 50 | return <Object?>[ |
| 48 | deviceId, | 51 | deviceId, |
| 49 | deviceName, | 52 | deviceName, |
| 50 | isConnected, | 53 | isConnected, |
| 54 | + isWatchAppInstalled, | ||
| 51 | ]; | 55 | ]; |
| 52 | } | 56 | } |
| 53 | 57 | ||
| @@ -60,6 +64,7 @@ class WearDeviceInfo { | @@ -60,6 +64,7 @@ class WearDeviceInfo { | ||
| 60 | deviceId: result[0] as String?, | 64 | deviceId: result[0] as String?, |
| 61 | deviceName: result[1] as String?, | 65 | deviceName: result[1] as String?, |
| 62 | isConnected: result[2] as bool?, | 66 | isConnected: result[2] as bool?, |
| 67 | + isWatchAppInstalled: result[3] as bool?, | ||
| 63 | ); | 68 | ); |
| 64 | } | 69 | } |
| 65 | 70 |
| @@ -5,11 +5,13 @@ class WearDeviceInfo { | @@ -5,11 +5,13 @@ class WearDeviceInfo { | ||
| 5 | this.deviceId, | 5 | this.deviceId, |
| 6 | this.deviceName, | 6 | this.deviceName, |
| 7 | this.isConnected, | 7 | this.isConnected, |
| 8 | + this.isWatchAppInstalled, | ||
| 8 | }); | 9 | }); |
| 9 | 10 | ||
| 10 | String? deviceId; | 11 | String? deviceId; |
| 11 | String? deviceName; | 12 | String? deviceName; |
| 12 | bool? isConnected; | 13 | bool? isConnected; |
| 14 | + bool? isWatchAppInstalled; | ||
| 13 | } | 15 | } |
| 14 | 16 | ||
| 15 | @ConfigurePigeon( | 17 | @ConfigurePigeon( |
-
Please register or login to post a comment