fix(animation): WASM 안정성 및 부활 동기화 개선
- GamePlayScreen에 SchedulerBinding으로 setState 안전 처리 - AsciiAnimationCard에서 재개 시 specialAnimation 동기화 - 부활 시 isPaused와 specialAnimation 동시 변경 대응
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/foundation.dart'
|
import 'package:flutter/foundation.dart'
|
||||||
show kIsWeb, defaultTargetPlatform, TargetPlatform;
|
show kIsWeb, defaultTargetPlatform, TargetPlatform;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/scheduler.dart' show SchedulerBinding, SchedulerPhase;
|
||||||
|
|
||||||
import 'package:askiineverdie/data/game_text_l10n.dart' as game_l10n;
|
import 'package:askiineverdie/data/game_text_l10n.dart' as game_l10n;
|
||||||
import 'package:askiineverdie/data/skill_data.dart';
|
import 'package:askiineverdie/data/skill_data.dart';
|
||||||
@@ -428,7 +429,18 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
|||||||
if (state != null) {
|
if (state != null) {
|
||||||
_checkSpecialEvents(state);
|
_checkSpecialEvents(state);
|
||||||
}
|
}
|
||||||
setState(() {});
|
|
||||||
|
// WASM 안정성: 프레임 빌드 중이면 다음 프레임까지 대기
|
||||||
|
if (SchedulerBinding.instance.schedulerPhase ==
|
||||||
|
SchedulerPhase.persistentCallbacks) {
|
||||||
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
|
if (mounted) {
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 캐로셀 레이아웃 사용 여부 판단
|
/// 캐로셀 레이아웃 사용 여부 판단
|
||||||
|
|||||||
@@ -147,7 +147,15 @@ class _AsciiAnimationCardState extends State<AsciiAnimationCard> {
|
|||||||
_timer?.cancel();
|
_timer?.cancel();
|
||||||
_timer = null;
|
_timer = null;
|
||||||
} else {
|
} else {
|
||||||
// 재개: 애니메이션 재시작 (현재 프레임 유지)
|
// 재개 시: specialAnimation 동기화 (isPaused와 동시에 변경될 수 있음)
|
||||||
|
// 예: 부활 시 isPaused가 true→false로 바뀌면서 동시에
|
||||||
|
// specialAnimation이 null→resurrection으로 변경됨
|
||||||
|
if (widget.specialAnimation != _currentSpecialAnimation) {
|
||||||
|
_currentSpecialAnimation = widget.specialAnimation;
|
||||||
|
_updateAnimation(); // _updateAnimation이 타이머 재시작도 처리함
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 일반 재개: 애니메이션 재시작 (현재 프레임 유지)
|
||||||
_restartTimer();
|
_restartTimer();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user