- 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>
44 lines
1.5 KiB
Dart
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(),
|
|
);
|
|
}
|
|
}
|