|
...
|
...
|
@@ -48,16 +48,12 @@ class LoginController extends GetxController { |
|
|
|
|
|
|
|
AppleSignInModel? appleSignInModel;
|
|
|
|
|
|
|
|
DateTime? _lastToggleTime;
|
|
|
|
bool _isToggling = false;
|
|
|
|
|
|
|
|
Future<void> toggleTermsChecked() async {
|
|
|
|
// 防抖:300ms 内的重复调用直接忽略,防止积压的手势事件互相抵消勾选状态
|
|
|
|
final now = DateTime.now();
|
|
|
|
if (_lastToggleTime != null &&
|
|
|
|
now.difference(_lastToggleTime!) < const Duration(milliseconds: 300)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
_lastToggleTime = now;
|
|
|
|
void toggleTermsChecked() {
|
|
|
|
// 互斥锁:函数执行期间忽略所有重入调用(手势积压、快速连点)
|
|
|
|
if (_isToggling) return;
|
|
|
|
_isToggling = true;
|
|
|
|
|
|
|
|
final newValue = !termsChecked.value;
|
|
|
|
termsChecked.value = newValue;
|
|
...
|
...
|
@@ -71,6 +67,11 @@ class LoginController extends GetxController { |
|
|
|
// ② SDK 初始化完全异步,不阻塞任何点击
|
|
|
|
unawaited(_initSdksAndTrack());
|
|
|
|
}
|
|
|
|
|
|
|
|
// 释放锁:推迟到下一帧,确保当前帧内积压的所有手势事件都已被忽略
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
|
|
_isToggling = false;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> _initSdksAndTrack() async {
|
...
|
...
|
|