|
...
|
...
|
@@ -2,13 +2,13 @@ import 'dart:async'; |
|
|
|
|
|
|
|
import 'package:doublefeel_flutter/app/actions/dialog_action.dart';
|
|
|
|
import 'package:doublefeel_flutter/app/models/dialog_meta_data.dart';
|
|
|
|
import 'package:doublefeel_flutter/app/models/input_dialog_meta_data.dart';
|
|
|
|
import 'package:doublefeel_flutter/app/utils/dialog_utils.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/error/app_error.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/services/thinking_data_service.dart';
|
|
|
|
import 'package:doublefeel_flutter/core/util/app_toast.dart';
|
|
|
|
import 'package:doublefeel_flutter/data/local/user_account_storage.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/l10n/l10n_extensions.dart';
|
|
...
|
...
|
@@ -16,18 +16,19 @@ import 'package:doublefeel_flutter/pigeon/platform_api.g.dart'; |
|
|
|
import 'package:get/get.dart';
|
|
|
|
|
|
|
|
import '../data/friends_repository.dart';
|
|
|
|
import '../dialog/edit_remark_dialog.dart';
|
|
|
|
import '../models/friend_health_data.dart';
|
|
|
|
|
|
|
|
class FriendsController extends GetxController {
|
|
|
|
FriendsController({
|
|
|
|
FriendsRepository? repository,
|
|
|
|
Future<void> Function(WatchAppOtherInfo info)? updateWatchOtherUserInfo,
|
|
|
|
}) : _repository =
|
|
|
|
repository ??
|
|
|
|
FriendsRepositoryImpl(
|
|
|
|
Get.find<FriendApi>(),
|
|
|
|
Get.find<UserPreferencesStorage>(),
|
|
|
|
),
|
|
|
|
}) : _repository = repository ??
|
|
|
|
FriendsRepositoryImpl(
|
|
|
|
Get.find<FriendApi>(),
|
|
|
|
Get.find<UserPreferencesStorage>(),
|
|
|
|
Get.find<UserAccountStorage>(),
|
|
|
|
),
|
|
|
|
_updateWatchOtherUserInfo = updateWatchOtherUserInfo ??
|
|
|
|
((info) => PlatformHostApi().refreshWatchAppAndWidgets());
|
|
|
|
|
|
...
|
...
|
@@ -41,6 +42,7 @@ class FriendsController extends GetxController { |
|
|
|
Future<void>? _friendsRequest;
|
|
|
|
bool _isPageVisible = false;
|
|
|
|
late final Worker _preferencesWorker;
|
|
|
|
late final Worker _realtimeStressSettingsWorker;
|
|
|
|
bool _showRealtimeStress = false;
|
|
|
|
|
|
|
|
bool get isFull => friends.length >= maxFriends;
|
|
...
|
...
|
@@ -53,19 +55,28 @@ class FriendsController extends GetxController { |
|
|
|
Get.find<UserPreferencesStorage>().preferences,
|
|
|
|
_onPreferencesChanged,
|
|
|
|
);
|
|
|
|
_realtimeStressSettingsWorker = ever<int>(
|
|
|
|
Get.find<UserAccountStorage>().realtimeStressSettingsVersion,
|
|
|
|
(_) => _onPreferencesChanged(
|
|
|
|
Get.find<UserPreferencesStorage>().preferences.value),
|
|
|
|
);
|
|
|
|
unawaited(refreshData());
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
void onClose() {
|
|
|
|
_preferencesWorker.dispose();
|
|
|
|
_realtimeStressSettingsWorker.dispose();
|
|
|
|
super.onClose();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool get _currentShowRealtimeStress {
|
|
|
|
final preferences = Get.find<UserPreferencesStorage>().preferences.value;
|
|
|
|
final userId = preferences.meUserInfo?.id;
|
|
|
|
return preferences.vipInfo?.isVip == true &&
|
|
|
|
(preferences.showRealtimeStress ?? true);
|
|
|
|
(userId == null ||
|
|
|
|
(Get.find<UserAccountStorage>().showRealtimeStress(userId) ??
|
|
|
|
true));
|
|
|
|
}
|
|
|
|
|
|
|
|
void _onPreferencesChanged(UserPreferences _) {
|
|
...
|
...
|
@@ -115,28 +126,26 @@ class FriendsController extends GetxController { |
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> showEditRemarkDialog(FriendHealthData friend) async {
|
|
|
|
final result = await DialogUtils.showInputDialog(
|
|
|
|
InputDialogMetaData(
|
|
|
|
await Get.dialog<String>(
|
|
|
|
FriendEditRemarkDialog(
|
|
|
|
title: l10n.friendsEditRemarkTitle,
|
|
|
|
initialValue: friend.remark ?? '',
|
|
|
|
hintText: l10n.friendsEditRemarkHint,
|
|
|
|
confirmText: l10n.friendsSave,
|
|
|
|
maxLength: 6,
|
|
|
|
onConfirm: (remark) => _updateRemark(friend, remark),
|
|
|
|
),
|
|
|
|
barrierDismissible: true,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
final remark = result.data?.trim();
|
|
|
|
if (result.action != DialogAction.confirm ||
|
|
|
|
remark == null ||
|
|
|
|
remark.isEmpty) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<bool> _updateRemark(FriendHealthData friend, String remark) async {
|
|
|
|
final userId = friend.userId;
|
|
|
|
if (userId == null) return;
|
|
|
|
if (userId == null) return false;
|
|
|
|
try {
|
|
|
|
await _repository.updateRemark(userId, remark);
|
|
|
|
await loadFriends();
|
|
|
|
return true;
|
|
|
|
} catch (error, stackTrace) {
|
|
|
|
if (error is AppError) {
|
|
|
|
AppToast.show(error.displayMessage);
|
|
...
|
...
|
@@ -147,6 +156,7 @@ class FriendsController extends GetxController { |
|
|
|
stackTrace,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
...
|
...
|
|