如何解决无法在 flutter 中的 listView.builder 中显示原生广告?
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
final initFuture = MobileAds.instance.initialize();
final adState = Adv(initFuture);
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(channel);
initScreen = await Authenticate().readStorage('initScreen');
print(initScreen);
await Authenticate().writeStorage('initScreen',"true");
runApp(MyApp(
appRouter: AppRouter(),connectivity: Connectivity(),drawerBloc: DrawerBloc(DrawerState(NavItem.homepage)),));
}
这是我的main.dart代码
import 'dart:io';
import 'package:google_mobile_ads/google_mobile_ads.dart';
class Adv {
Future<InitializationStatus> initialization;
Adv(this.initialization);
static String get categoriesNativeAdUnitId {
if (Platform.isAndroid) {
return 'ca-app-pub-3940256099942544/6300978111';
} else if (Platform.isIOS) {
return 'ca-app-pub-3940256099942544/2934735716';
}
throw new UnsupportedError("Unsupported platform");
}
static String get homeNativeAdUnitId {
if (Platform.isAndroid) {
return 'ca-app-pub-3940256099942544/2247696110';
} else if (Platform.isIOS) {
return 'ca-app-pub-3940256099942544/3986624511';
}
throw new UnsupportedError("Unsupported platform");
}
static String get newsPageNativeAdUnitId {
if (Platform.isAndroid) {
return 'ca-app-pub-3940256099942544/2247696110';
} else if (Platform.isIOS) {
return 'ca-app-pub-3940256099942544/3986624511';
}
throw new UnsupportedError("Unsupported platform");
}
static String get blogsBannerAdUnitId {
if (Platform.isAndroid) {
return 'ca-app-pub-3940256099942544/2247696110';
} else if (Platform.isIOS) {
return 'ca-app-pub-3940256099942544/3986624511';
}
throw new UnsupportedError("Unsupported platform");
}
static String get publisherListPageNativeAdUnitId {
if (Platform.isAndroid) {
return 'ca-app-pub-3940256099942544/2247696110';
} else if (Platform.isIOS) {
return 'ca-app-pub-3940256099942544/3986624511';
}
throw new UnsupportedError("Unsupported platform");
}
}
这是我的adhelper.dart的代码
class ShowHomeNews extends StatefulWidget {
final List<NewsModel> newsModel;
final int index;
const ShowHomeNews({
Key key,@required this.newsModel,this.index,}) : super(key: key);
@override
_ShowHomeNewsState createState() => _ShowHomeNewsState();
}
class _ShowHomeNewsState extends State<ShowHomeNews> {
int adCountTrack = 0;
bool _isAdLoaded = false;
List<NativeAd> adList = [];
@override
void initState() {
super.initState();
adLoader();
}
adLoader() {
setState(() {
int len = ((widget.newsModel.length) / 4).floor();
for (int i = 0; i < len; i++) {
print(i.toString());
print("i ki vaues:" + i.toString());
adList.add(
NativeAd(
adUnitId: Adv.homeNativeAdUnitId,factoryId: 'listTile',listener: AdListener(
onAdLoaded: (_) {
setState(() {
_isAdLoaded = true;
});
},onAdFailedToLoad: (ad,error) {
// Releases an ad resource when it fails to load
print(
'Ad load failed (code=${error.code} message=${error.message})');
},),request: AdRequest())
..load(),);
}
});
print("AdList size: " + adList.length.toString());
}
@override
Widget build(BuildContext context) {
return RefreshIndicator(
onRefresh: () async => BlocProvider.of<TabbarblocBloc>(context).add(
PageTapped(index: widget.index),child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,children: [
Padding(
padding: const EdgeInsets.fromLTRB(10,5,10,0),child: Text(
"Trending",style: TextStyle(fontWeight: FontWeight.w600),Padding(
padding: const EdgeInsets.all(8.0),child: Container(
height: 200,child: ListView.builder(
physics: ClampingScrollPhysics(),primary: false,itemCount: widget.newsModel.length,shrinkWrap: true,scrollDirection: Axis.horizontal,itemBuilder: (context,index) {
return TrendingTile(
newsModel: widget.newsModel[index],);
},Container(
child: ListView.builder(
primary: false,index) {
print(widget.newsModel.length);
if (index % 4 == 0 && adCountTrack < adList.length) {
return Padding(
padding: const EdgeInsets.all(8.0),child: Container(
height: 120.0,width: 120.0,decoration: BoxDecoration(
color: whiteTextColor,borderRadius: BorderRadius.circular(12),boxShadow: [
BoxShadow(
spreadRadius: 1,blurRadius: 5.0,// soften the shadow
offset: Offset(
1.0,// Move to right 10 horizontally
2.0,// Move to bottom 10 Vertically
),color: Colors.grey[350])
],child: AdWidget(
ad: adList[adCountTrack++],);
} else if (widget.newsModel[index].views <=
compareTotalViewForGrid) {
return Padding(
padding: const EdgeInsets.all(8.0),child: NewsTileSmall(
newsModel: widget.newsModel[index],);
} else {
return Padding(
padding: const EdgeInsets.all(8.0),child: NewsTileBig(
newsModel: widget.newsModel[index],);
}
}),],);
}
}
这是我的文件的代码,我试图在其中显示列表中的原生广告,但没有显示原生广告。显示。
下面我添加了调试控制台日志
D/DynamitePackage(19276):实例化
com.google.android.gms.ads.ChimeraAdLoaderBuilderCreatorImpl I/Ads
(19276):使用
RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("FA6C491A794C3455DA1F640FE2E82C3A"))
在此设备上获取测试广告。 I/DynamiteModule(19276):考虑
本地模块 com.google.android.gms.ads.dynamite:0 和远程模块
com.google.android.gms.ads.dynamite:210890500 I/DynamiteModule(19276):
选择远程版本的 com.google.android.gms.ads.dynamite,
版本 >= 210890500 带包裹 (19276):**** 强制接口()
预期 'com.google.android.gms.ads.clearcut.IClearcut' 但阅读
'com.google.android.gms.gass.internal.clearcut.IClearcut'
I/DynamiteModule(19276):考虑本地模块
com.google.android.gms.ads.dynamite:0 和远程模块
com.google.android.gms.ads.dynamite:210890500 I/DynamiteModule(19276):
选择远程版本的 com.google.android.gms.ads.dynamite,
版本 >= 210890500 I/DynamiteModule(19276):考虑本地模块
com.google.android.gms.ads.dynamite:0 和远程模块
com.google.android.gms.ads.dynamite:210890500 I/DynamiteModule(19276):
选择远程版本的 com.google.android.gms.ads.dynamite,
版本 >= 210890500 带包裹 (19276):**** 强制接口()
预期 'com.google.android.gms.ads.clearcut.IClearcut' 但阅读
'com.google.android.gms.gass.internal.clearcut.IClearcut'
I/AudioManager(19276):在 isSpeakerphoneOn() 中,调用应用程序:
com.indiary.indiary D/DynamitePackage(19276):实例化
com.google.android.gms.ads.ChimeraAdLoaderBuilderCreatorImpl I/Ads
(19276):使用
RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("FA6C491A794C3455DA1F640FE2E82C3A"))
在此设备上获取测试广告。 I/AudioManager(19276):在
isSpeakerphoneOn(),调用应用程序:com.indiary.indiary I/flutter
(19276): 26 D/DynamitePackage(19276): 实例化
com.google.android.gms.ads.ChimeraAdLoaderBuilderCreatorImpl I/Ads
(19276):使用
RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("FA6C491A794C3455DA1F640FE2E82C3A"))
在此设备上获取测试广告。 I/AudioManager(19276):在
isSpeakerphoneOn(),调用应用程序:com.indiary.indiary
D/DynamitePackage(19276):实例化
com.google.android.gms.ads.ChimeraAdLoaderBuilderCreatorImpl /Ads
(19276):使用
RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("FA6C491A794C3455DA1F640FE2E82C3A"))
在此设备上获取测试广告。 I/AudioManager(19276):在
isSpeakerphoneOn(),调用应用程序:com.indiary.indiary 2
I/flutter (19276): 26 D/DynamitePackage(19276): 实例化
com.google.android.gms.ads.ChimeraAdLoaderBuilderCreatorImpl I/Ads
(19276):使用
RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("FA6C491A794C3455DA1F640FE2E82C3A"))
在此设备上获取测试广告。我/扑(19276):26
I/AudioManager(19276):在 isSpeakerphoneOn() 中,调用应用程序:
com.indiary.indiary D/DynamitePackage(19276):实例化
com.google.android.gms.ads.ChimeraAdLoaderBuilderCreatorImpl I/Ads
(19276):使用
RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("FA6C491A794C3455DA1F640FE2E82C3A"))
在此设备上获取测试广告。 I/AudioManager(19276):在
isSpeakerphoneOn(),调用应用程序:com.indiary.indiary
W/pool-30-thread-(19276): type=1400 audit(0.0:6476): avc: grant {
执行 } 为
path="/data/data/com.indiary.indiary/app_pccache/5/CCFA22EBAF6E1880534512380E8EF01170FD9593/pcam.jar"
dev="dm-14" ino=5090217
scontext=u:r:untrusted_app:s0:c250,c257,c512,c768
tcontext=u:object_r:app_data_file:s0:c250,c768 tclass=文件
app=com.indiary.indiary 7 I/flutter (19276): 26 E/flutter (19276):
[错误:flutter/shell/platform/android/platform_view_android_jni_impl.cc(49)]
java.lang.IllegalStateException: PlatformView#getView() 返回空值,
但是需要 Android 视图参考。 E/颤振 (19276):在
io.flutter.plugin.platform.PlatformViewsController.initializePlatformViewIfNeeded(PlatformViewsController.java:717)
E/颤振 (19276):在
io.flutter.plugin.platform.PlatformViewsController.onDisplayPlatformView(PlatformViewsController.java:746)
E/颤振 (19276):在
io.flutter.embedding.engine.FlutterJNI.onDisplayPlatformView(FlutterJNI.java:1195)
E/flutter (19276):在 android.os.MessageQueue.nativePollOnce(Native
方法)E/flutter (19276):在
android.os.MessageQueue.next(MessageQueue.java:335) E/flutter (19276):
在 android.os.Looper.loop(Looper.java:183) E/flutter (19276): 在
android.app.ActivityThread.main(ActivityThread.java:8010) E/flutter
(19276): 在 java.lang.reflect.Method.invoke(Native Method) E/flutter
(19276):在
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
E/颤振 (19276):在
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978) E/flutter
(19276): F/颤振 (19276):
[致命:flutter/shell/platform/android/platform_view_android_jni_impl.cc(1395)]
检查失败:CheckException(env)。 F/libc (19276):致命信号 6
(SIGABRT),tid 19276 (indiary.indiary) 中的代码 -6 (SI_TKILL),pid
19276 (indiary.indiary)
我尝试使用 google_mobile_ads sdk 显示 google 原生广告,我想在列表之间显示 n 个广告,就像每显示 4 项原生广告一样,但我无法显示它们,我的应用程序崩溃了?
解决方法
改变
List<Object> adList;
为此:
List<NativeAd> adList = [];
由于您收到空错误,这意味着您正在尝试将 NativeAd
对象添加到您的列表中,但它仍未被初始化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。