adwhale_sdk_flutter 2.7.2+7
adwhale_sdk_flutter: ^2.7.2+7 copied to clipboard
Adwhale SDK Flutter plugin for integrating Adwhale advertising mediation SDK into Flutter applications.
example/lib/main.dart
import 'dart:io' show Platform;
import 'package:flutter/material.dart';
import 'package:adwhale_sdk_flutter/adwhale_sdk_flutter.dart';
import 'android/guide_sample_android.dart';
import 'guide_sample_ios.dart';
import 'guide_sample_integration.dart';
import 'integration/mediation_ads_test_page.dart';
import 'android/advanced_appopenad.dart';
import 'android/advanced_banner.dart';
import 'android/advanced_nativead.dart';
import 'android/foreground_test_page.dart';
import 'android/native_test_page.dart';
import 'android/preload_banner.dart';
import 'android/styled_template_native.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final result = await AdWhaleMediationAds.instance.initialize();
debugPrint('AdWhale SDK 초기화 결과: $result');
if (result.isSuccess) {
runApp(const MyApp());
} else {
// 초기화 실패 시 에러 화면 표시
runApp(MaterialApp(
home: Scaffold(
body: Center(
child: Text(
'SDK 초기화 실패\nstatusCode: ${result.statusCode}\nmessage: ${result.message}',
textAlign: TextAlign.center,
),
),
),
));
}
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: MainMenuPage(),
);
}
}
/// QA 샘플앱(`activity_main.xml`)의 메인 화면과 동일한 구성을 가진 Flutter 메인 메뉴.
class MainMenuPage extends StatelessWidget {
const MainMenuPage({super.key});
@override
Widget build(BuildContext context) {
final isAndroid = Platform.isAndroid;
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: isAndroid ? _buildAndroidMenu(context) : _buildIosMenu(context),
),
),
),
);
}
/// Android 실행 시 표시: guide_sample, guide_sample_integration + lib/android 샘플.
List<Widget> _buildAndroidMenu(BuildContext context) {
return [
_buildCenterButton(
context,
text: 'AdWhaleMediationAds API 단위 테스트',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => const MediationAdsTestPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: '기본 배너, 전면, 보상형, 네이티브, 앱오프닝 테스트',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const GuideSampleAndroidPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: 'Android / iOS 통합 배너 샘플',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => const GuideSampleIntegrationPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: '고급 앱오프닝 테스트',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const AdvancedAppOpenAdPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: '고급 배너 테스트',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const AdvancedBannerPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: '고급 네이티브광고 테스트',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const AdvancedNativeAdPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: '포그라운드 테스트',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const ForegroundTestPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: '네이티브 테스트',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const NativeTestPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: '프리로드 배너',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const PreloadBannerPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: '스타일 템플릿 네이티브',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const StyledTemplateNativePage()),
);
},
),
];
}
/// iOS 등 비안드로이드 실행 시 표시.
List<Widget> _buildIosMenu(BuildContext context) {
return [
_buildCenterButton(
context,
text: 'AdWhaleMediationAds API 단위 테스트',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => const MediationAdsTestPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: 'iOS 전용 배너 샘플',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const GuideSampleIosPage()),
);
},
),
const SizedBox(height: 12),
_buildCenterButton(
context,
text: 'Android / iOS 통합 배너 샘플',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => const GuideSampleIntegrationPage()),
);
},
),
];
}
Widget _buildCenterButton(
BuildContext context, {
required String text,
required VoidCallback onPressed,
}) {
return ElevatedButton(
onPressed: onPressed,
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF6739F5), // 스크린샷과 비슷한 보라색
foregroundColor: Colors.white, // 텍스트/아이콘 색상
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12),
textStyle: const TextStyle(fontSize: 13),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
),
),
child: Text(
text,
textAlign: TextAlign.center,
),
);
}
}