bind_partner_controller.dart
4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import 'package:doublefeel_flutter/app/modules/user_onboarding/widget/guide_common_scaffold.dart';
import 'package:doublefeel_flutter/app/modules/user_onboarding/widget/onboarding_common_widgets.dart';
import 'package:doublefeel_flutter/app/routes/app_pages.dart';
import 'package:doublefeel_flutter/core/network/api/friend_api.dart';
import 'package:doublefeel_flutter/core/result/app_result.dart';
import 'package:doublefeel_flutter/core/services/user_state_service.dart';
import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart';
import 'package:doublefeel_flutter/l10n/l10n_extensions.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:share_plus/share_plus.dart';
class BindPartnerController extends GetxController {
BindPartnerController(this._friendApi);
final FriendApi _friendApi;
final TextEditingController partnerIdController = TextEditingController();
final RxString partnerIdInput = ''.obs;
final RxBool isSubmitting = false.obs;
final RxString myInviteCode = ''.obs;
@override
void onInit() {
super.onInit();
partnerIdController.addListener(() {
partnerIdInput.value = partnerIdController.text.trim();
});
final userPrefs = Get.find<UserPreferencesStorage>();
myInviteCode.value =
userPrefs.preferences.value.meUserInfo?.uniqueCode ?? '';
}
@override
void onClose() {
partnerIdController.dispose();
super.onClose();
}
bool get canSubmit => partnerIdInput.value.isNotEmpty;
void onShareMyCode() {
Share.share("""嘿 ❤️ 我发现了一个叫 DoubleFeel 的 App!
它可以帮我们互相关心 — 记录压力和睡眠、查看 HRV 与身体状态、及时了解彼此的健康状况。
快来一起使用吧 👉 https://Xxxxxxx
我的好友id:${myInviteCode.value}""");
}
Future<void> onSubmitPartnerId() async {
if (!canSubmit || isSubmitting.value) return;
isSubmitting.value = true;
try {
final result = await _friendApi.addFriend(partnerIdInput.value);
if (result is AppFailure) {
return;
}
Get.to(_BindSuccessPage());
} catch (e) {
} finally {
isSubmitting.value = false;
}
}
void onSkip() {
final userStateService = Get.find<UserStateService>();
if (!userStateService.isVip) {
Get.toNamed(Routes.MEMBERSHIP_OFFER);
} else {
Get.offAllNamed(AppRoutes.home);
}
}
}
class _BindSuccessPage extends StatelessWidget {
const _BindSuccessPage();
@override
Widget build(BuildContext context) {
final l10n = context.l10n;
return GuideCommonScaffold(
onBackPressed: () => Get.back(),
bottom: OnboardingBottomButton(
label: l10n.continueButton,
enabled: true,
onPressed: () {
final userStateService = Get.find<UserStateService>();
if (!userStateService.isVip) {
Get.toNamed(Routes.MEMBERSHIP_OFFER);
} else {
Get.offAllNamed(AppRoutes.home);
}
},
),
child: OnboardingPageScrollBody(
horizontalPadding: 0,
topPadding: 0,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Container(
height: 509,
decoration:
BoxDecoration(color: const Color(0xFFFF0000).withAlpha(120)),
),
const SizedBox(height: 16),
OnboardingTitleText(
context.l10n.healthCompanionIsNowAvailable,
maxWidth: 310,
),
const SizedBox(height: 8),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(
l10n.youCanNowViewEachOtherSHrvStressLevelsAndSleepPatternsAndReachOutToCheckInWhenTheOtherPersonSeemsTired,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.black,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
)
],
),
),
);
}
}