|
...
|
...
|
@@ -5,15 +5,18 @@ import 'package:doublefeel_flutter/app/apple_health_upload/apple_health_upload_t |
|
|
|
import 'package:doublefeel_flutter/app/modules/friends/controllers/friend_trend_controller.dart';
|
|
|
|
import 'package:doublefeel_flutter/app/modules/home/controllers/home_controller.dart';
|
|
|
|
import 'package:doublefeel_flutter/app/modules/home/controllers/trend/trend_controller.dart';
|
|
|
|
import 'package:doublefeel_flutter/app/modules/home/widgets/today/friend_select_bottom_sheet.dart';
|
|
|
|
import 'package:doublefeel_flutter/app/modules/home/widgets/today/no_health_data_page.dart';
|
|
|
|
import 'package:doublefeel_flutter/app/routes/app_pages.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/logging/app_logger.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/network/api/friend_api.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/network/api/health_api.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/network/api/user_api.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/result/app_result.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/services/health_kit_upload_service.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/services/user_state_service.dart';
|
|
|
|
import 'package:doublefeel_flutter/data/models/enums/app_enums.dart';
|
|
|
|
import 'package:doublefeel_flutter/data/models/friend/friend_models.dart';
|
|
|
|
import 'package:doublefeel_flutter/data/models/health/health_models.dart';
|
|
|
|
import 'package:doublefeel_flutter/data/models/health/health_v2_models.dart';
|
|
|
|
import 'package:doublefeel_flutter/pigeon/health_kit_api.g.dart';
|
|
...
|
...
|
@@ -46,26 +49,28 @@ class HrvAnnotation { |
|
|
|
|
|
|
|
class TodayController extends GetxController {
|
|
|
|
TodayController(
|
|
|
|
this._userApi,
|
|
|
|
this._healthApi,
|
|
|
|
this._friendApi,
|
|
|
|
this._userStateService,
|
|
|
|
this._healthKitUploadService,
|
|
|
|
this._appleHealthUploadTool, {
|
|
|
|
this.friendUserId, // null = 自己,非 null = 好友
|
|
|
|
});
|
|
|
|
FriendItem? friendInfo, // null = 自己,非 null = 好友
|
|
|
|
}) : _initialFriendInfo = friendInfo;
|
|
|
|
|
|
|
|
final UserApi _userApi;
|
|
|
|
final HealthApi _healthApi;
|
|
|
|
final FriendApi _friendApi;
|
|
|
|
final UserStateService _userStateService;
|
|
|
|
final HealthKitUploadService _healthKitUploadService;
|
|
|
|
final AppleHealthUploadTool _appleHealthUploadTool;
|
|
|
|
final HealthKitHostApi _hostApi = HealthKitHostApi();
|
|
|
|
|
|
|
|
/// 好友的 userId;null 表示查看自己的数据,非 null 表示查看好友的数据。
|
|
|
|
final int? friendUserId;
|
|
|
|
/// 好友的信息;null 表示查看自己的数据,非 null 表示查看好友的数据。
|
|
|
|
final FriendItem? _initialFriendInfo;
|
|
|
|
final targetFriendInfo = Rxn<FriendItem>();
|
|
|
|
|
|
|
|
/// 是否正在查看好友数据。
|
|
|
|
bool get isFriend => friendUserId != null;
|
|
|
|
bool get isFriend => targetFriendInfo.value != null;
|
|
|
|
int? get friendUserId => targetFriendInfo.value?.friendUserId;
|
|
|
|
|
|
|
|
UserStateService get userStateService => _userStateService;
|
|
|
|
|
|
...
|
...
|
@@ -140,6 +145,7 @@ class TodayController extends GetxController { |
|
|
|
@override
|
|
|
|
void onInit() {
|
|
|
|
super.onInit();
|
|
|
|
targetFriendInfo.value = _initialFriendInfo;
|
|
|
|
final today = DateUtils.dateOnly(DateTime.now());
|
|
|
|
firstSelectableDay = DateTime(today.year - 1);
|
|
|
|
lastSelectableDay = today;
|
|
...
|
...
|
@@ -497,11 +503,7 @@ class TodayController extends GetxController { |
|
|
|
if (isFriend) {
|
|
|
|
Get.toNamed(
|
|
|
|
Routes.FRIEND_TREND,
|
|
|
|
arguments: FriendTrendArguments(
|
|
|
|
userId: 58,
|
|
|
|
name: 'xxa',
|
|
|
|
avatarUrl: 'asdfa',
|
|
|
|
),
|
|
|
|
arguments: getFriendTrendArguments(),
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
Get.find<HomeController>().openTrend(TrendType.hrv);
|
|
...
|
...
|
@@ -510,14 +512,7 @@ class TodayController extends GetxController { |
|
|
|
|
|
|
|
toTrendSleepPage() {
|
|
|
|
if (isFriend) {
|
|
|
|
Get.toNamed(
|
|
|
|
Routes.FRIEND_TREND,
|
|
|
|
arguments: FriendTrendArguments(
|
|
|
|
userId: 58,
|
|
|
|
name: 'xxa',
|
|
|
|
avatarUrl: 'asdfa',
|
|
|
|
),
|
|
|
|
);
|
|
|
|
Get.toNamed(Routes.FRIEND_TREND, arguments: getFriendTrendArguments());
|
|
|
|
} else {
|
|
|
|
Get.find<HomeController>().openTrend(TrendType.sleep);
|
|
|
|
}
|
|
...
|
...
|
@@ -525,16 +520,61 @@ class TodayController extends GetxController { |
|
|
|
|
|
|
|
toTrendActivityPage() {
|
|
|
|
if (isFriend) {
|
|
|
|
Get.toNamed(
|
|
|
|
Routes.FRIEND_TREND,
|
|
|
|
arguments: FriendTrendArguments(
|
|
|
|
userId: 58,
|
|
|
|
name: 'xxa',
|
|
|
|
avatarUrl: 'asdfa',
|
|
|
|
),
|
|
|
|
);
|
|
|
|
Get.toNamed(Routes.FRIEND_TREND, arguments: getFriendTrendArguments());
|
|
|
|
} else {
|
|
|
|
Get.find<HomeController>().openTrend(TrendType.activity);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
getFriendTrendArguments() {
|
|
|
|
var value = targetFriendInfo.value;
|
|
|
|
if (value != null && value.friendUserId != null) {
|
|
|
|
return FriendTrendArguments(
|
|
|
|
userId: value.friendUserId!,
|
|
|
|
name: value.remarkName ?? '',
|
|
|
|
avatarUrl: value.avatar,
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void selectFriend(FriendItem friendInfo) {
|
|
|
|
if (friendInfo.friendUserId != targetFriendInfo.value?.friendUserId) {
|
|
|
|
targetFriendInfo.value = friendInfo;
|
|
|
|
_clearRealTimeData();
|
|
|
|
loadDataForDate(selectedDate.value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
showFriendListBottomSheet() async {
|
|
|
|
_friendApi.friendList(false).then(
|
|
|
|
(res) {
|
|
|
|
switch (res) {
|
|
|
|
case AppSuccess(:final data):
|
|
|
|
friendsList.assignAll(data.list);
|
|
|
|
case AppFailure():
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
|
|
|
|
|
|
|
Get.bottomSheet(
|
|
|
|
DraggableScrollableSheet(
|
|
|
|
maxChildSize: 0.6,
|
|
|
|
initialChildSize: 0.6,
|
|
|
|
expand: false,
|
|
|
|
snap: true,
|
|
|
|
builder: (context, scrollController) {
|
|
|
|
return FriendSelectBottomSheet(
|
|
|
|
scrollController: scrollController, controller: this);
|
|
|
|
},
|
|
|
|
),
|
|
|
|
barrierColor: Colors.black.withValues(alpha: 0.7),
|
|
|
|
enableDrag: true,
|
|
|
|
isScrollControlled: true,
|
|
|
|
persistent: false,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
RxList<FriendItem> friendsList = RxList.empty();
|
|
|
|
} |
...
|
...
|
|