1

Hello Everyone I want to show Admob ads in my flutter pageview after a 5-page swipe and on the 6th page I want a full-page banner ad, if I swipe this then I can go on the 7th page of the news.

I have implemented but I am unable to get full-page banner ads, it shows 312x100 pixels size ads only.

Here is my full code.

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'Helper/ad_helper.dart';
import 'Models/news.dart';
import 'package:http/http.dart' as http;

class Tedd extends StatefulWidget {
  @override
  _TeddState createState() => _TeddState();
}

class _TeddState extends State<Tedd> {
  List<NewsModel> _newsList = [];
  bool isLoading = true;
  late BannerAd _bannerAd;
  bool _isBannerAdReady = false;
  int currentPage = 1;
  bool hasReachedEnd = false;
  PageController _pageController = PageController(initialPage: 0);

  _getAllNews(currentPage) async {
    var articles = await http.get(Uri.parse(
        "https://pkbhai.com/myprojects/kids-stories/api/all-stories?page=${currentPage}"));
    var result = json.decode(articles.body);
    var newDataLength = result['data'].length;
    if (newDataLength == 0) {
      setState(() {
        hasReachedEnd = true;
      });
    }
    result['data'].forEach((data) {
      var news = NewsModel();
      news.id = data["id"];
      news.articleTitle = data["name"];
      news.articleDetails = data["details"];
      if (mounted) {
        setState(() {
          _newsList.add(news);
        });
      }
    });

    setState(() {
      isLoading = true;
    });
  }

  void handleNext() {
    _pageController.addListener(() async {
      if (_pageController.page?.toInt() == _newsList.length - 1) {
        setState(() {
          currentPage += 1;
        });
        _getAllNews(currentPage);
      }
    });
  }

  @override
  void initState() {
    _bannerAd = BannerAd(
      adUnitId: AdHelper.bannerAdUnitId,
      request: AdRequest(),
      size: AdSize.banner,
      listener: BannerAdListener(
        onAdLoaded: (_) {
          setState(() {
            _isBannerAdReady = true;
          });
        },
        onAdFailedToLoad: (ad, err) {
          print('Failed to load a banner ad: ${err.message}');
          _isBannerAdReady = false;
          ad.dispose();
        },
      ),
    );
    _bannerAd.load();
    _getAllNews(currentPage);
    handleNext();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _newsList.length > 0
          ? PageView.builder(
              scrollDirection: Axis.vertical,
              controller: _pageController,
              itemCount: _newsList.length + (isLoading ? 1 : 0),
              itemBuilder: (context, index) {
                if (index == _newsList.length && hasReachedEnd) {
                  return Container(
                    color: Colors.red,
                  );
                }
                if (index == _newsList.length && !hasReachedEnd) {
                  return Center(
                    child: CircularProgressIndicator(),
                  );
                }
                if (index % 5 == 0 && index != 0) {
                  return Container(
                    child:
                        // if (_isBannerAdReady)
                        Align(
                      alignment: Alignment.topCenter,
                      child: Container(
                        width: _bannerAd.size.width.toDouble(),
                        height: _bannerAd.size.height.toDouble(),  // also tried 1000, but not worked
                        child: AdWidget(ad: _bannerAd),
                      ),
                    ),
                  );
                }
                return Container(
                  child: Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Container(
                      color: Colors.blue.shade400,
                      height: MediaQuery.of(context).size.height,
                      child: PageView(
                        reverse: true,
                        children: [
                          Text(
                            _newsList[index].articleDetails!,
                            maxLines: 4,
                          ),
                          Text(_newsList[index].articleTitle!),
                        ],
                      ),
                    ),
                  ),
                );
              },
            )
          : Center(child: CircularProgressIndicator()),
    );
  }
}
Pramod Yadav
  • 436
  • 7
  • 24

0 Answers0