gpt4 book ai didi

Flutter:如何在 Listview 上正确加载多个原生广告?

转载 作者:行者123 更新时间:2023-12-05 05:40:49 25 4
gpt4 key购买 nike

如何在 Listview 上正确加载多个 Admob Native 广告?我正在使用 google_mobile_ads 包。

出于某种原因,官方文档和示例仅适用于 ListView 中的 1 个原生广告。如果您尝试再次使用相同的横幅,甚至会显示错误。

我的目标是每 8 个 ListTiles 展示一个原生广告。有没有一种方法可以在不使用额外包的情况下正确执行此操作?

最佳答案

为了解决这个问题,我也是兜兜转转。这就是我最终的做法。问题是在将小部件放入 ListView 时管理异步广告加载过程。我的方法是在一个单独的有状态小部件中进行状态管理,该小部件被添加到分离构建器中的 ListView 中。

//the listview or ScrollablePositionedList in my case       
return ScrollablePositionedList.separated(
separatorBuilder: (context, index) {
if ((index + 1) % 4 == 0) {
return AddAd();
} else {
return Container(height: 1,);
}
},
itemScrollController: scrollController,
padding: EdgeInsets.zero,
itemCount: data.length,
itemBuilder: (context, index) {
return ListContent(data[index])
);
});
//the reusable statefulwidget for ads
import 'package:antelope/helpers/ad_helper.dart';

import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

class AddAd extends StatefulWidget {
@override
AddAdState createState() => AddAdState();
}

class AddAdState extends State<AddAd> {
//ad setup
BannerAd _bannerAd;
bool _isBannerAdReady = false;

@override
void initState() {

_bannerAd = BannerAd(
adUnitId: AdHelper().bannerAdUnitId,
request: AdRequest(),
size: AdSize.banner,
listener: BannerAdListener(
onAdLoaded: (_) {
//if this is the first banner load set adsready true
if (!_isBannerAdReady) {
setState(() {
_isBannerAdReady = true;
});
}
},
onAdFailedToLoad: (ad, err) {
print('Failed to load a banner ad: ${err.message}');
_isBannerAdReady = false;
ad.dispose();
},
),
);

_bannerAd.load();
super.initState();
}

@override
void dispose() {
_bannerAd.dispose();
super.dispose();
}

@override
//the card takes will either take editable form or view form
Widget build(BuildContext context) {
return
_isBannerAdReady ? Container(
height: 50,
width: MediaQuery.of(context).size.width,
child: Align(
alignment: Alignment.bottomCenter,
child: Container(
width: _bannerAd.size.width.toDouble(),
height: _bannerAd.size.height.toDouble(),
child: AdWidget(ad: _bannerAd),
),
),

): Container(height: 1,);

}
}

关于Flutter:如何在 Listview 上正确加载多个原生广告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72339295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com