spin-mobile/lib/main.dart
theorose49 e6c7ba9552 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>
2026-06-30 16:26:58 +09:00

44 lines
1.5 KiB
Dart

import "package:flutter/material.dart";
import "package:flutter/services.dart";
import "services/push_service.dart";
import "webview_screen.dart";
const navy = Color(0xFF03143F);
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// Edge-to-edge: 시스템바 뒤까지 그려 WebView가 전체 화면을 차지하게 한다. 그래야
// 웹의 env(safe-area-inset-*) (viewport-fit=cover)가 실제 노치/홈인디케이터 값을
// 받아 헤더/푸터 여백이 정확해진다.
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
// 상태바: 투명 + 밝은 아이콘. 하단 내비게이션바도 투명(웹 탭바가 그 위에 안착).
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.light,
statusBarBrightness: Brightness.dark,
systemNavigationBarColor: Colors.transparent,
systemNavigationBarIconBrightness: Brightness.dark,
));
await PushService.instance.init(); // Firebase 미설정이면 비활성으로 진행
runApp(const SpinApp());
}
class SpinApp extends StatelessWidget {
const SpinApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "spin",
debugShowCheckedModeBanner: false,
theme: ThemeData(
useMaterial3: true,
colorSchemeSeed: navy,
scaffoldBackgroundColor: navy,
),
home: const WebViewScreen(),
);
}
}