fix(mobile): edge-to-edge로 전환해 헤더/푸터 안전영역 정렬
- main: SystemUiMode.edgeToEdge + 내비게이션바 투명 → WebView가 시스템바 뒤까지 전체 화면 차지 → 웹의 env(safe-area-inset-*) (viewport-fit=cover)가 실제값 수신 - webview: SafeArea top·bottom 모두 false (셸은 inset을 잡지 않고 웹 CSS가 처리) → 헤더 눌림/푸터 과다 여백 해소 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e14eafd6b2
commit
e6c7ba9552
29
android/app/google-services.json
Normal file
29
android/app/google-services.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "332409988740",
|
||||||
|
"project_id": "special-partners-internal",
|
||||||
|
"storage_bucket": "special-partners-internal.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:332409988740:android:33ded5b63cb6c1644ac4d1",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.specialpartners.spin"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAzrtq093lZQacN9sDLpDyPrSSqDZMbQHc"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
@ -8,11 +8,17 @@ const navy = Color(0xFF03143F);
|
|||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
// 상태바: navy 위 밝은 아이콘 (몰입형 느낌).
|
// Edge-to-edge: 시스템바 뒤까지 그려 WebView가 전체 화면을 차지하게 한다. 그래야
|
||||||
|
// 웹의 env(safe-area-inset-*) (viewport-fit=cover)가 실제 노치/홈인디케이터 값을
|
||||||
|
// 받아 헤더/푸터 여백이 정확해진다.
|
||||||
|
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
||||||
|
// 상태바: 투명 + 밝은 아이콘. 하단 내비게이션바도 투명(웹 탭바가 그 위에 안착).
|
||||||
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
|
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
|
||||||
statusBarColor: Colors.transparent,
|
statusBarColor: Colors.transparent,
|
||||||
statusBarIconBrightness: Brightness.light,
|
statusBarIconBrightness: Brightness.light,
|
||||||
statusBarBrightness: Brightness.dark,
|
statusBarBrightness: Brightness.dark,
|
||||||
|
systemNavigationBarColor: Colors.transparent,
|
||||||
|
systemNavigationBarIconBrightness: Brightness.dark,
|
||||||
));
|
));
|
||||||
await PushService.instance.init(); // Firebase 미설정이면 비활성으로 진행
|
await PushService.instance.init(); // Firebase 미설정이면 비활성으로 진행
|
||||||
runApp(const SpinApp());
|
runApp(const SpinApp());
|
||||||
|
|||||||
@ -147,7 +147,8 @@ class _WebViewScreenState extends State<WebViewScreen> with WidgetsBindingObserv
|
|||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
backgroundColor: _navy,
|
backgroundColor: _navy,
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
top: false, // 상단 노치는 웹의 safe-area CSS가 처리
|
top: false, // 상·하단 모두 웹의 safe-area CSS(env)가 처리 — 셸은 inset을 잡지 않는다
|
||||||
|
bottom: false,
|
||||||
child: Stack(
|
child: Stack(
|
||||||
children: [
|
children: [
|
||||||
InAppWebView(
|
InAppWebView(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user