feat(app): add vworld geocoding and native ads placeholders

This commit is contained in:
JiWoong Sul
2025-12-03 14:30:20 +09:00
parent d101f7d0dc
commit 3ff9e5f837
23 changed files with 1108 additions and 540 deletions

View File

@@ -0,0 +1,48 @@
import 'package:flutter/material.dart';
import 'package:lunchpick/core/constants/app_colors.dart';
import 'package:lunchpick/core/constants/app_typography.dart';
/// 네이티브 광고(Native Ad) 플레이스홀더
class NativeAdPlaceholder extends StatelessWidget {
final EdgeInsetsGeometry? margin;
final double height;
const NativeAdPlaceholder({super.key, this.margin, this.height = 120});
@override
Widget build(BuildContext context) {
final isDark = Theme.of(context).brightness == Brightness.dark;
return Container(
margin: margin ?? EdgeInsets.zero,
padding: const EdgeInsets.all(16),
height: height,
width: double.infinity,
decoration: BoxDecoration(
color: isDark ? AppColors.darkSurface : Colors.white,
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: isDark ? AppColors.darkDivider : AppColors.lightDivider,
width: 2,
),
boxShadow: [
BoxShadow(
color: (isDark ? Colors.black : Colors.grey).withOpacity(0.08),
blurRadius: 8,
offset: const Offset(0, 4),
),
],
),
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.ad_units, color: AppColors.lightPrimary, size: 24),
const SizedBox(width: 8),
Text('광고 영역', style: AppTypography.heading2(isDark)),
],
),
),
);
}
}