Open DevHyeon0312 opened 2 months ago
해당 처리기 백화현상은 일단 해결되며, 결제 프로세스 자체에 영향을 끼치지는 않는 것으로 보여집니다.
나름 화면 회전을 고려하여 Stack 을 사용한 init 화면 등의 처리를 했음에도, 회전되는 애니메이션에서 발생하는 시각적인 측면에서의 유저경험을 방해한다는 것은 부정할 수 없었습니다.
https://gist.github.com/DevHyeon0312/714c9890538812dd004fdbcd2fb0583b
-- 핵심 요약 --
class _YourWidgetState extends State<YourWidget> with WidgetsBindingObserver { bool isLandscape = false; ... @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) async { if (await _isSamsungIssueDevice()) { if (state == AppLifecycleState.resumed) { _showPortrait(); } else if (state == AppLifecycleState.hidden) { _shouldLandScape(); } } } Future<bool> _isSamsungIssueDevice() async { if (Platform.isAndroid) { /// DeviceInfoPlugin 을 사용하면 sdkIn 34, manufacturer samsung 일 경우에만 적용되도록 처리 가능합니다. /// (모든 Android 기기에서 이슈에 대한 처리를 하는 것은 비효율적이기 때문입니다.) // try { // var androidInfo = await DeviceInfoPlugin().androidInfo; // var sdkInt = androidInfo.version.sdkInt; // var manufacturer = androidInfo.manufacturer; // if (sdkInt == 34 && manufacturer == 'samsung') { // return true; // } // } catch (_) {} return true; } return false; } Future<void> _shouldLandScape() async { SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft]); Future.delayed(const Duration(milliseconds: 500), () { setState(() { isLandscape = true; }); }); } Future<void> _showPortrait() async { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); Future.delayed(const Duration(milliseconds: 500), () { setState(() { isLandscape = false; }); }); } ...
해당 처리기 백화현상은 일단 해결되며, 결제 프로세스 자체에 영향을 끼치지는 않는 것으로 보여집니다.
나름 화면 회전을 고려하여 Stack 을 사용한 init 화면 등의 처리를 했음에도, 회전되는 애니메이션에서 발생하는 시각적인 측면에서의 유저경험을 방해한다는 것은 부정할 수 없었습니다.
https://gist.github.com/DevHyeon0312/714c9890538812dd004fdbcd2fb0583b
-- 핵심 요약 --