Commit 777787e2b374fe9064a73e71b0d681fc77300bf0

Authored by 权海
1 parent b5ac2c45

feat(ui):增加手表链接错误显示

... ... @@ -8,7 +8,6 @@ import 'package:doublefeel_flutter/app/routes/app_pages.dart';
import 'package:doublefeel_flutter/app/utils/dialog_utils.dart';
import 'package:doublefeel_flutter/core/config/app_environment_config.dart';
import 'package:doublefeel_flutter/core/theme/app_theme.dart';
import 'package:doublefeel_flutter/core/util/size_extensions.dart';
import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart';
import 'package:doublefeel_flutter/data/models/local/user_preferences.dart';
import 'package:doublefeel_flutter/data/models/user/user_models.dart';
... ...
... ... @@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:convert';
import 'package:doublefeel_flutter/app/modules/friends/data/friends_repository.dart';
import 'package:doublefeel_flutter/app/modules/watch_theme/models/watch_device_extension.dart';
import 'package:doublefeel_flutter/core/network/api/friend_api.dart';
import 'package:doublefeel_flutter/core/network/api/theme_api.dart';
import 'package:doublefeel_flutter/core/result/app_result.dart';
... ... @@ -32,6 +33,8 @@ class CustomWatchThemePreviewController extends GetxController {
final friendThemeItem = Rx<WatchThemeItem?>(null);
final selectedThemeItem = Rx<WatchThemeItem?>(null);
final watchConnectErrorDesc = Rx<String?>(null);
bool get hasFriend {
return (friendThemeItem.value?.userId ?? 0) > 0;
}
... ... @@ -143,8 +146,10 @@ class CustomWatchThemePreviewController extends GetxController {
WearDeviceInfo? device;
try {
device = await WearEngineHostApi().checkConnectedDevice();
} catch (_) {
watchConnectErrorDesc.value = device?.connectedDeviceDesc;
} catch (e) {
device = null;
watchConnectErrorDesc.value = e.toString();
}
if (device?.isPaired != true ||
device?.isReachable != true ||
... ... @@ -167,8 +172,10 @@ class CustomWatchThemePreviewController extends GetxController {
WearDeviceInfo? device;
try {
device = await WearEngineHostApi().checkConnectedDevice();
} catch (_) {
watchConnectErrorDesc.value = device?.connectedDeviceDesc;
} catch (e) {
device = null;
watchConnectErrorDesc.value = e.toString();
}
if (device?.isPaired != true ||
device?.isReachable != true ||
... ...
... ... @@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:convert';
import 'package:doublefeel_flutter/app/modules/friends/data/friends_repository.dart';
import 'package:doublefeel_flutter/app/modules/watch_theme/models/watch_device_extension.dart';
import 'package:doublefeel_flutter/core/network/api/friend_api.dart';
import 'package:doublefeel_flutter/core/network/api/theme_api.dart';
import 'package:doublefeel_flutter/core/result/app_result.dart';
... ... @@ -30,6 +31,8 @@ class WatchThemePreviewController extends GetxController {
final friendThemeItem = Rx<WatchThemeItem?>(null);
final selectedThemeItem = Rx<WatchThemeItem?>(null);
final watchConnectErrorDesc = Rx<String?>(null);
bool get hasFriend {
return (friendThemeItem.value?.userId ?? 0) > 0;
}
... ... @@ -114,8 +117,10 @@ class WatchThemePreviewController extends GetxController {
WearDeviceInfo? device;
try {
device = await WearEngineHostApi().checkConnectedDevice();
} catch (_) {
watchConnectErrorDesc.value = device?.connectedDeviceDesc;
} catch (e) {
device = null;
watchConnectErrorDesc.value = e.toString();
}
if (device?.isPaired != true ||
device?.isReachable != true ||
... ... @@ -139,8 +144,10 @@ class WatchThemePreviewController extends GetxController {
WearDeviceInfo? device;
try {
device = await WearEngineHostApi().checkConnectedDevice();
} catch (_) {
watchConnectErrorDesc.value = device?.connectedDeviceDesc;
} catch (e) {
device = null;
watchConnectErrorDesc.value = e.toString();
}
if (device?.isPaired != true ||
device?.isReachable != true ||
... ...
import 'package:doublefeel_flutter/pigeon/wear_engine_api.g.dart';
extension WatchDeviceExtension on WearDeviceInfo {
String? get connectedDeviceDesc {
if (isPaired != true) {
return '手表未配对';
}
if (isReachable != true) {
return '手表数据无法传递';
}
if (isWatchAppInstalled != true) {
return 'watch app未安装';
}
return null;
}
}
... ...
... ... @@ -35,10 +35,13 @@ class CustomWatchThemePreviewView
padding: EdgeInsets.only(top: topPadding, bottom: 96),
child: Column(
children: [
WatchThemeHeader(
title: controller.themeItem.title,
themeImageUrl: controller.themeItem.energeticImage,
),
Obx(() {
return WatchThemeHeader(
title: controller.themeItem.title,
themeImageUrl: controller.themeItem.energeticImage,
errorDesc: controller.watchConnectErrorDesc.value,
);
}),
const SizedBox(height: 26),
StatusPreviewCard(themeItem: controller.themeItem),
const SizedBox(height: 12),
... ...
... ... @@ -23,9 +23,12 @@ class WatchThemePreviewView extends GetView<WatchThemePreviewController> {
padding: EdgeInsets.only(top: topPadding, bottom: 96),
child: Column(
children: [
WatchThemeHeader(
themeImageUrl: controller.themeItem.energeticImage,
),
Obx(() {
return WatchThemeHeader(
themeImageUrl: controller.themeItem.energeticImage,
errorDesc: controller.watchConnectErrorDesc.value,
);
}),
const SizedBox(height: 26),
StatusPreviewCard(themeItem: controller.themeItem),
const SizedBox(height: 12),
... ...
import 'package:doublefeel_flutter/core/config/app_environment_config.dart';
import 'package:flutter/material.dart';
import 'package:doublefeel_flutter/l10n/l10n_extensions.dart';
import 'package:get/get.dart';
import 'watch_face_preview.dart';
import 'watch_theme_colors.dart';
... ... @@ -8,14 +10,19 @@ class WatchThemeHeader extends StatelessWidget {
const WatchThemeHeader({
super.key,
this.title,
this.errorDesc,
this.themeImageUrl,
});
final String? title;
final String? errorDesc;
final String? themeImageUrl;
@override
Widget build(BuildContext context) {
final environmentConfig = Get.find<AppEnvironmentConfig>();
return Column(
children: [
SizedBox(height: 12),
... ... @@ -35,6 +42,18 @@ class WatchThemeHeader extends StatelessWidget {
height: 1.25,
),
),
if (environmentConfig.isDebug && errorDesc != null) ...[
SizedBox(height: 8),
Text(
errorDesc!,
style: TextStyle(
color: WatchThemeColors.pro,
fontSize: 14,
fontWeight: FontWeight.w400,
),
maxLines: 2,
),
],
],
);
}
... ...