Showing
7 changed files
with
66 additions
and
12 deletions
| @@ -8,7 +8,6 @@ import 'package:doublefeel_flutter/app/routes/app_pages.dart'; | @@ -8,7 +8,6 @@ import 'package:doublefeel_flutter/app/routes/app_pages.dart'; | ||
| 8 | import 'package:doublefeel_flutter/app/utils/dialog_utils.dart'; | 8 | import 'package:doublefeel_flutter/app/utils/dialog_utils.dart'; |
| 9 | import 'package:doublefeel_flutter/core/config/app_environment_config.dart'; | 9 | import 'package:doublefeel_flutter/core/config/app_environment_config.dart'; |
| 10 | import 'package:doublefeel_flutter/core/theme/app_theme.dart'; | 10 | import 'package:doublefeel_flutter/core/theme/app_theme.dart'; |
| 11 | -import 'package:doublefeel_flutter/core/util/size_extensions.dart'; | ||
| 12 | import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart'; | 11 | import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart'; |
| 13 | import 'package:doublefeel_flutter/data/models/local/user_preferences.dart'; | 12 | import 'package:doublefeel_flutter/data/models/local/user_preferences.dart'; |
| 14 | import 'package:doublefeel_flutter/data/models/user/user_models.dart'; | 13 | import 'package:doublefeel_flutter/data/models/user/user_models.dart'; |
| @@ -2,6 +2,7 @@ import 'dart:async'; | @@ -2,6 +2,7 @@ import 'dart:async'; | ||
| 2 | import 'dart:convert'; | 2 | import 'dart:convert'; |
| 3 | 3 | ||
| 4 | import 'package:doublefeel_flutter/app/modules/friends/data/friends_repository.dart'; | 4 | import 'package:doublefeel_flutter/app/modules/friends/data/friends_repository.dart'; |
| 5 | +import 'package:doublefeel_flutter/app/modules/watch_theme/models/watch_device_extension.dart'; | ||
| 5 | import 'package:doublefeel_flutter/core/network/api/friend_api.dart'; | 6 | import 'package:doublefeel_flutter/core/network/api/friend_api.dart'; |
| 6 | import 'package:doublefeel_flutter/core/network/api/theme_api.dart'; | 7 | import 'package:doublefeel_flutter/core/network/api/theme_api.dart'; |
| 7 | import 'package:doublefeel_flutter/core/result/app_result.dart'; | 8 | import 'package:doublefeel_flutter/core/result/app_result.dart'; |
| @@ -32,6 +33,8 @@ class CustomWatchThemePreviewController extends GetxController { | @@ -32,6 +33,8 @@ class CustomWatchThemePreviewController extends GetxController { | ||
| 32 | final friendThemeItem = Rx<WatchThemeItem?>(null); | 33 | final friendThemeItem = Rx<WatchThemeItem?>(null); |
| 33 | final selectedThemeItem = Rx<WatchThemeItem?>(null); | 34 | final selectedThemeItem = Rx<WatchThemeItem?>(null); |
| 34 | 35 | ||
| 36 | + final watchConnectErrorDesc = Rx<String?>(null); | ||
| 37 | + | ||
| 35 | bool get hasFriend { | 38 | bool get hasFriend { |
| 36 | return (friendThemeItem.value?.userId ?? 0) > 0; | 39 | return (friendThemeItem.value?.userId ?? 0) > 0; |
| 37 | } | 40 | } |
| @@ -143,8 +146,10 @@ class CustomWatchThemePreviewController extends GetxController { | @@ -143,8 +146,10 @@ class CustomWatchThemePreviewController extends GetxController { | ||
| 143 | WearDeviceInfo? device; | 146 | WearDeviceInfo? device; |
| 144 | try { | 147 | try { |
| 145 | device = await WearEngineHostApi().checkConnectedDevice(); | 148 | device = await WearEngineHostApi().checkConnectedDevice(); |
| 146 | - } catch (_) { | 149 | + watchConnectErrorDesc.value = device?.connectedDeviceDesc; |
| 150 | + } catch (e) { | ||
| 147 | device = null; | 151 | device = null; |
| 152 | + watchConnectErrorDesc.value = e.toString(); | ||
| 148 | } | 153 | } |
| 149 | if (device?.isPaired != true || | 154 | if (device?.isPaired != true || |
| 150 | device?.isReachable != true || | 155 | device?.isReachable != true || |
| @@ -167,8 +172,10 @@ class CustomWatchThemePreviewController extends GetxController { | @@ -167,8 +172,10 @@ class CustomWatchThemePreviewController extends GetxController { | ||
| 167 | WearDeviceInfo? device; | 172 | WearDeviceInfo? device; |
| 168 | try { | 173 | try { |
| 169 | device = await WearEngineHostApi().checkConnectedDevice(); | 174 | device = await WearEngineHostApi().checkConnectedDevice(); |
| 170 | - } catch (_) { | 175 | + watchConnectErrorDesc.value = device?.connectedDeviceDesc; |
| 176 | + } catch (e) { | ||
| 171 | device = null; | 177 | device = null; |
| 178 | + watchConnectErrorDesc.value = e.toString(); | ||
| 172 | } | 179 | } |
| 173 | if (device?.isPaired != true || | 180 | if (device?.isPaired != true || |
| 174 | device?.isReachable != true || | 181 | device?.isReachable != true || |
| @@ -2,6 +2,7 @@ import 'dart:async'; | @@ -2,6 +2,7 @@ import 'dart:async'; | ||
| 2 | import 'dart:convert'; | 2 | import 'dart:convert'; |
| 3 | 3 | ||
| 4 | import 'package:doublefeel_flutter/app/modules/friends/data/friends_repository.dart'; | 4 | import 'package:doublefeel_flutter/app/modules/friends/data/friends_repository.dart'; |
| 5 | +import 'package:doublefeel_flutter/app/modules/watch_theme/models/watch_device_extension.dart'; | ||
| 5 | import 'package:doublefeel_flutter/core/network/api/friend_api.dart'; | 6 | import 'package:doublefeel_flutter/core/network/api/friend_api.dart'; |
| 6 | import 'package:doublefeel_flutter/core/network/api/theme_api.dart'; | 7 | import 'package:doublefeel_flutter/core/network/api/theme_api.dart'; |
| 7 | import 'package:doublefeel_flutter/core/result/app_result.dart'; | 8 | import 'package:doublefeel_flutter/core/result/app_result.dart'; |
| @@ -30,6 +31,8 @@ class WatchThemePreviewController extends GetxController { | @@ -30,6 +31,8 @@ class WatchThemePreviewController extends GetxController { | ||
| 30 | final friendThemeItem = Rx<WatchThemeItem?>(null); | 31 | final friendThemeItem = Rx<WatchThemeItem?>(null); |
| 31 | final selectedThemeItem = Rx<WatchThemeItem?>(null); | 32 | final selectedThemeItem = Rx<WatchThemeItem?>(null); |
| 32 | 33 | ||
| 34 | + final watchConnectErrorDesc = Rx<String?>(null); | ||
| 35 | + | ||
| 33 | bool get hasFriend { | 36 | bool get hasFriend { |
| 34 | return (friendThemeItem.value?.userId ?? 0) > 0; | 37 | return (friendThemeItem.value?.userId ?? 0) > 0; |
| 35 | } | 38 | } |
| @@ -114,8 +117,10 @@ class WatchThemePreviewController extends GetxController { | @@ -114,8 +117,10 @@ class WatchThemePreviewController extends GetxController { | ||
| 114 | WearDeviceInfo? device; | 117 | WearDeviceInfo? device; |
| 115 | try { | 118 | try { |
| 116 | device = await WearEngineHostApi().checkConnectedDevice(); | 119 | device = await WearEngineHostApi().checkConnectedDevice(); |
| 117 | - } catch (_) { | 120 | + watchConnectErrorDesc.value = device?.connectedDeviceDesc; |
| 121 | + } catch (e) { | ||
| 118 | device = null; | 122 | device = null; |
| 123 | + watchConnectErrorDesc.value = e.toString(); | ||
| 119 | } | 124 | } |
| 120 | if (device?.isPaired != true || | 125 | if (device?.isPaired != true || |
| 121 | device?.isReachable != true || | 126 | device?.isReachable != true || |
| @@ -139,8 +144,10 @@ class WatchThemePreviewController extends GetxController { | @@ -139,8 +144,10 @@ class WatchThemePreviewController extends GetxController { | ||
| 139 | WearDeviceInfo? device; | 144 | WearDeviceInfo? device; |
| 140 | try { | 145 | try { |
| 141 | device = await WearEngineHostApi().checkConnectedDevice(); | 146 | device = await WearEngineHostApi().checkConnectedDevice(); |
| 142 | - } catch (_) { | 147 | + watchConnectErrorDesc.value = device?.connectedDeviceDesc; |
| 148 | + } catch (e) { | ||
| 143 | device = null; | 149 | device = null; |
| 150 | + watchConnectErrorDesc.value = e.toString(); | ||
| 144 | } | 151 | } |
| 145 | if (device?.isPaired != true || | 152 | if (device?.isPaired != true || |
| 146 | device?.isReachable != true || | 153 | device?.isReachable != true || |
| 1 | +import 'package:doublefeel_flutter/pigeon/wear_engine_api.g.dart'; | ||
| 2 | + | ||
| 3 | +extension WatchDeviceExtension on WearDeviceInfo { | ||
| 4 | + String? get connectedDeviceDesc { | ||
| 5 | + if (isPaired != true) { | ||
| 6 | + return '手表未配对'; | ||
| 7 | + } | ||
| 8 | + if (isReachable != true) { | ||
| 9 | + return '手表数据无法传递'; | ||
| 10 | + } | ||
| 11 | + if (isWatchAppInstalled != true) { | ||
| 12 | + return 'watch app未安装'; | ||
| 13 | + } | ||
| 14 | + return null; | ||
| 15 | + } | ||
| 16 | +} |
| @@ -35,10 +35,13 @@ class CustomWatchThemePreviewView | @@ -35,10 +35,13 @@ class CustomWatchThemePreviewView | ||
| 35 | padding: EdgeInsets.only(top: topPadding, bottom: 96), | 35 | padding: EdgeInsets.only(top: topPadding, bottom: 96), |
| 36 | child: Column( | 36 | child: Column( |
| 37 | children: [ | 37 | children: [ |
| 38 | - WatchThemeHeader( | ||
| 39 | - title: controller.themeItem.title, | ||
| 40 | - themeImageUrl: controller.themeItem.energeticImage, | ||
| 41 | - ), | 38 | + Obx(() { |
| 39 | + return WatchThemeHeader( | ||
| 40 | + title: controller.themeItem.title, | ||
| 41 | + themeImageUrl: controller.themeItem.energeticImage, | ||
| 42 | + errorDesc: controller.watchConnectErrorDesc.value, | ||
| 43 | + ); | ||
| 44 | + }), | ||
| 42 | const SizedBox(height: 26), | 45 | const SizedBox(height: 26), |
| 43 | StatusPreviewCard(themeItem: controller.themeItem), | 46 | StatusPreviewCard(themeItem: controller.themeItem), |
| 44 | const SizedBox(height: 12), | 47 | const SizedBox(height: 12), |
| @@ -23,9 +23,12 @@ class WatchThemePreviewView extends GetView<WatchThemePreviewController> { | @@ -23,9 +23,12 @@ class WatchThemePreviewView extends GetView<WatchThemePreviewController> { | ||
| 23 | padding: EdgeInsets.only(top: topPadding, bottom: 96), | 23 | padding: EdgeInsets.only(top: topPadding, bottom: 96), |
| 24 | child: Column( | 24 | child: Column( |
| 25 | children: [ | 25 | children: [ |
| 26 | - WatchThemeHeader( | ||
| 27 | - themeImageUrl: controller.themeItem.energeticImage, | ||
| 28 | - ), | 26 | + Obx(() { |
| 27 | + return WatchThemeHeader( | ||
| 28 | + themeImageUrl: controller.themeItem.energeticImage, | ||
| 29 | + errorDesc: controller.watchConnectErrorDesc.value, | ||
| 30 | + ); | ||
| 31 | + }), | ||
| 29 | const SizedBox(height: 26), | 32 | const SizedBox(height: 26), |
| 30 | StatusPreviewCard(themeItem: controller.themeItem), | 33 | StatusPreviewCard(themeItem: controller.themeItem), |
| 31 | const SizedBox(height: 12), | 34 | const SizedBox(height: 12), |
| 1 | +import 'package:doublefeel_flutter/core/config/app_environment_config.dart'; | ||
| 1 | import 'package:flutter/material.dart'; | 2 | import 'package:flutter/material.dart'; |
| 2 | import 'package:doublefeel_flutter/l10n/l10n_extensions.dart'; | 3 | import 'package:doublefeel_flutter/l10n/l10n_extensions.dart'; |
| 4 | +import 'package:get/get.dart'; | ||
| 3 | 5 | ||
| 4 | import 'watch_face_preview.dart'; | 6 | import 'watch_face_preview.dart'; |
| 5 | import 'watch_theme_colors.dart'; | 7 | import 'watch_theme_colors.dart'; |
| @@ -8,14 +10,19 @@ class WatchThemeHeader extends StatelessWidget { | @@ -8,14 +10,19 @@ class WatchThemeHeader extends StatelessWidget { | ||
| 8 | const WatchThemeHeader({ | 10 | const WatchThemeHeader({ |
| 9 | super.key, | 11 | super.key, |
| 10 | this.title, | 12 | this.title, |
| 13 | + this.errorDesc, | ||
| 11 | this.themeImageUrl, | 14 | this.themeImageUrl, |
| 12 | }); | 15 | }); |
| 13 | 16 | ||
| 17 | + | ||
| 14 | final String? title; | 18 | final String? title; |
| 19 | + final String? errorDesc; | ||
| 15 | final String? themeImageUrl; | 20 | final String? themeImageUrl; |
| 16 | 21 | ||
| 17 | @override | 22 | @override |
| 18 | Widget build(BuildContext context) { | 23 | Widget build(BuildContext context) { |
| 24 | + final environmentConfig = Get.find<AppEnvironmentConfig>(); | ||
| 25 | + | ||
| 19 | return Column( | 26 | return Column( |
| 20 | children: [ | 27 | children: [ |
| 21 | SizedBox(height: 12), | 28 | SizedBox(height: 12), |
| @@ -35,6 +42,18 @@ class WatchThemeHeader extends StatelessWidget { | @@ -35,6 +42,18 @@ class WatchThemeHeader extends StatelessWidget { | ||
| 35 | height: 1.25, | 42 | height: 1.25, |
| 36 | ), | 43 | ), |
| 37 | ), | 44 | ), |
| 45 | + if (environmentConfig.isDebug && errorDesc != null) ...[ | ||
| 46 | + SizedBox(height: 8), | ||
| 47 | + Text( | ||
| 48 | + errorDesc!, | ||
| 49 | + style: TextStyle( | ||
| 50 | + color: WatchThemeColors.pro, | ||
| 51 | + fontSize: 14, | ||
| 52 | + fontWeight: FontWeight.w400, | ||
| 53 | + ), | ||
| 54 | + maxLines: 2, | ||
| 55 | + ), | ||
| 56 | + ], | ||
| 38 | ], | 57 | ], |
| 39 | ); | 58 | ); |
| 40 | } | 59 | } |
-
Please register or login to post a comment