1

そのため、リスト内に admob 広告を挿入します。また、リスト ビュー内に無限スクロールの機能を追加しました。したがって、ユーザーがリストの最後までスクロールすると、新しい項目がリストに追加されます。このアイテムでは、その中に admob 広告も追加します。

したがって、ユーザーが最後までスクロールすると、新しいアイテムと広告がリストに追加されます。その際、以下の例外がキャッチされます。では、この例外を解決する方法。

======== Exception caught by widgets library =======================================================
The following assertion was thrown building AdWidget-[#53ef3](dirty, state: _AdWidgetState#850ac):
This AdWidget is already in the Widget tree


If you placed this AdWidget in a list, make sure you create a new instance in the builder function with a unique ad object.
Make sure you are not using the same ad object in more than one AdWidget.

The relevant error-causing widget was: 
  AdWidget-[#53ef3] file:///D:/flutter%20project/memer/lib/pages/TimeLinePage.dart:198:42
When the exception was thrown, this was the stack: 
#0      _AdWidgetState.build (package:google_mobile_ads/src/ad_containers.dart:371:7)
#1      StatefulElement.build (package:flutter/src/widgets/framework.dart:4612:27)
#2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4495:15)
#3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4667:11)
#4      Element.rebuild (package:flutter/src/widgets/framework.dart:4189:5)

コード:-

return ListView.builder(itemBuilder: (context, index){
        //print(posts);
        if(posts[index] is Post){
          return posts[index];
        }
        else{
          final Container adContainer = Container(
                                  alignment: Alignment.center,
                                  child: AdWidget(key: UniqueKey(), ad: posts[index] as BannerAd),//AdmobService.createBannerAd()..load()
                                  height: 50,
                              );
                      return adContainer;
        }
      },itemCount: posts.length,
          controller: scrollController,physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()));
    }
4

5 に答える 5

1

私はこれらすべてを試しましたが、これは私にとってうまくいきました。各ページの iniState に myBanner.dispose() を追加しました。

void initState(){ myBanner.dispose(); myBanner.load(); super.initState();}

于 2021-11-11T02:47:33.053 に答える