1+ import 'dart:developer' ;
2+
13import 'package:flutter/material.dart' ;
4+ import 'package:flutter_playground/ads/ad_helper.dart' ;
25import 'package:flutter_playground/store/theme_store.dart' ;
6+ import 'package:flutter_playground/ui_ux/home_page/my_home_page_store.dart' ;
37import 'package:flutter_playground/ui_ux/open_source_licenses.dart' ;
48import 'package:flutter_playground/ui_ux/search_widget.dart' ;
59import 'package:flutter_playground/values/assets.dart' ;
610import 'package:flutter_playground/values/imports.dart' ;
11+ import 'package:flutter_svg/flutter_svg.dart' ;
12+ import 'package:google_mobile_ads/google_mobile_ads.dart' ;
713import 'package:provider/provider.dart' ;
814import 'package:url_launcher/url_launcher.dart' ;
915
10- import 'package:flutter_playground/ui_ux/home_page/my_home_page_store.dart' ;
11-
1216class MyHomePage extends StatefulWidget {
1317 const MyHomePage ({Key ? key, required this .title}) : super (key: key);
1418 final String title;
@@ -19,12 +23,37 @@ class MyHomePage extends StatefulWidget {
1923
2024class _MyHomePageState extends State <MyHomePage > {
2125 MyHomePageStore ? store;
26+ late BannerAd _ad;
27+ bool _isAdLoaded = false ;
2228
2329 @override
2430 void initState () {
2531 super .initState ();
32+ _initGoogleMobileAds ();
33+ _ad = BannerAd (
34+ adUnitId: AdHelper .bannerAdUnitId,
35+ size: AdSize .banner,
36+ request: const AdRequest (),
37+ listener: BannerAdListener (
38+ onAdLoaded: (_) {
39+ setState (() {
40+ _isAdLoaded = true ;
41+ });
42+ },
43+ onAdFailedToLoad: (ad, error) {
44+ // Releases an ad resource when it fails to load
45+ ad.dispose ();
46+
47+ log ('Ad load failed (code=${error .code } message=${error .message })' );
48+ },
49+ ),
50+ );
51+ _ad.load ();
2652 }
2753
54+ Future <InitializationStatus > _initGoogleMobileAds () =>
55+ MobileAds .instance.initialize ();
56+
2857 @override
2958 void didChangeDependencies () {
3059 store ?? = Provider .of <MyHomePageStore >(context);
@@ -33,6 +62,7 @@ class _MyHomePageState extends State<MyHomePage> {
3362
3463 @override
3564 void dispose () {
65+ _ad.dispose ();
3666 super .dispose ();
3767 }
3868
@@ -72,9 +102,23 @@ class _MyHomePageState extends State<MyHomePage> {
72102 SafeArea (
73103 child: Container (
74104 margin: const EdgeInsets .all (16 ),
75- child: Text (
76- widget.title,
77- style: Theme .of (context).textTheme.headline6,
105+ child: Row (
106+ children: [
107+ Expanded (
108+ child: Text (
109+ widget.title,
110+ style: Theme .of (context).textTheme.headline6,
111+ ),
112+ ),
113+ IconButton (
114+ onPressed: () {
115+ _launchURL (
116+ 'https://github.com/ibhavikmakwana/FlutterPlayground' ,
117+ );
118+ },
119+ icon: SvgPicture .asset (Assets .icGithub),
120+ ),
121+ ],
78122 ),
79123 ),
80124 ),
@@ -92,6 +136,15 @@ class _MyHomePageState extends State<MyHomePage> {
92136 ),
93137 ),
94138 ),
139+ if (_isAdLoaded)
140+ Center (
141+ child: Container (
142+ width: _ad.size.width.toDouble (),
143+ height: 72.0 ,
144+ alignment: Alignment .center,
145+ child: AdWidget (ad: _ad),
146+ ),
147+ ),
95148 Flexible (
96149 child: _buildExampleItemsWidget (),
97150 ),
@@ -141,7 +194,9 @@ class _MyHomePageState extends State<MyHomePage> {
141194 const Divider (),
142195 ListTile (
143196 title: const Text ('Privacy Policy' ),
144- onTap: _launchURL,
197+ onTap: () => _launchURL (
198+ 'https://flutter-playground.flycricket.io/privacy.html' ,
199+ ),
145200 ),
146201 ],
147202 ),
@@ -163,8 +218,7 @@ class _MyHomePageState extends State<MyHomePage> {
163218 );
164219 }
165220
166- Future <void > _launchURL () async {
167- const url = 'https://flutter-playground.flycricket.io/privacy.html' ;
221+ Future <void > _launchURL (String url) async {
168222 if (await canLaunch (url)) {
169223 await launch (url);
170224 } else {
0 commit comments