{"id":10780,"date":"2024-08-27T17:16:26","date_gmt":"2024-08-27T15:16:26","guid":{"rendered":"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/"},"modified":"2024-08-27T17:42:49","modified_gmt":"2024-08-27T15:42:49","slug":"infinite-scroll","status":"publish","type":"docs","link":"https:\/\/refinery89.com\/es\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/","title":{"rendered":"Infinite Scroll"},"content":{"rendered":"<p data-renderer-start-pos=\"1\">Ads positioned within scrollable content, dynamically displaying <a class=\"cc-1rn59kg\" title=\"https:\/\/refinery89.atlassian.net\/wiki\/x\/BABUNw\" href=\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-plugin\/user-guide\/ad-formats\/banner\/\" target=\"_blank\" rel=\"noopener\" data-testid=\"link-with-safety\" data-renderer-mark=\"true\">Banner<\/a> or <a class=\"cc-1rn59kg\" title=\"https:\/\/refinery89.atlassian.net\/wiki\/x\/YYBPNw\" href=\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-plugin\/user-guide\/ad-formats\/outstream\/\" target=\"_blank\" rel=\"noopener\" data-testid=\"link-with-safety\" data-renderer-mark=\"true\">OutStream<\/a> formats based on the item&#8217;s position within the scroll view.<\/p>\n<h1 id=\"Show-the-Ad.\" data-renderer-start-pos=\"148\">Show the Ad.<\/h1>\n<p data-renderer-start-pos=\"162\">To display an ad in the <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">ListView<\/code>widget, or in any other flutter\u2019s scrollable widget with index use <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">R89InfiniteScrollAd<\/code> widget, by adding it to the scroll item<\/p>\n<div class=\"code-block\">\n<pre>Widget _buildItem(context, index) =&gt; Card(\r\n        child: Column(\r\n          children: [\r\n            Padding(\r\n              padding: const EdgeInsets.all(8.0),\r\n              child: Text(\"Item index $index\"),\r\n            ),\r\n            Center(\r\n              child: R89InfiniteScrollAd(\r\n                  itemIndex: index, infiniteScrollId: infiniteScrollId),\r\n            )\r\n          ],\r\n        ),\r\n      );\r\n<\/pre>\n<\/div>\n<p data-renderer-start-pos=\"727\"><code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">R89InfiniteScrollAd<\/code> has two required parameters<\/p>\n<ul class=\"ak-ul\" data-indent-level=\"1\">\n<li>\n<p data-renderer-start-pos=\"779\"><code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">itemIndex<\/code> the item position in the <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">ListView<\/code><\/p>\n<\/li>\n<li>\n<p data-renderer-start-pos=\"826\"><code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">infiniteScrollId<\/code> the <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">R89SDK<\/code> generated scroll Id, which is shared between the child items of the same <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">ListView<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p data-renderer-start-pos=\"941\">Here is how to generate <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">infiniteScrollId<\/code><\/p>\n<div class=\"code-block\">\n<pre>final int infiniteScrollId = R89SDK.adFactory.createInfiniteScroll(\r\n    configurationId: ConfigConstants.infiniteScrollTestR89ConfigId);\r\n<\/pre>\n<\/div>\n<p data-renderer-start-pos=\"1125\">That all, find the <a class=\"cc-1rn59kg\" title=\"https:\/\/refinery89.atlassian.net\/wiki\/spaces\/R8P\/pages\/928022674\/Flutter+-+Infinite+Scroll#Full-Example.\" href=\"#Full-Example.\" data-testid=\"link-with-safety\" data-renderer-mark=\"true\">full example<\/a> at the bottom of this page.<\/p>\n<h1 id=\"Lifecycle-Events\" data-renderer-start-pos=\"1186\">Lifecycle Events<\/h1>\n<p data-renderer-start-pos=\"1204\">To receive the lifecycle events for a <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">R89InfiniteScrollAd<\/code>, provide <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">BannerEventListener<\/code> to <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">R89InfiniteScrollAd<\/code> via <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">lifecycleCallbacks<\/code> parameter. Details about <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">BannerEventListener<\/code> can be found in the <a class=\"cc-1rn59kg\" title=\"\/wiki\/spaces\/R8P\/pages\/528842754\" href=\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-plugin\/code-reference\/\" target=\"_blank\" rel=\"noopener\" data-testid=\"link-with-safety\" data-renderer-mark=\"true\">Reference<\/a>.<\/p>\n<div class=\"code-block\">\n<pre>R89InfiniteScrollAd(\r\n    itemIndex: index,\r\n    infiniteScrollId: infiniteScrollId,\r\n    lifecycleCallbacks: BannerEventListener.callbacks(\r\n      onLoadedCallback: () {},\r\n      onImpressionCallback: () {},\r\n      onLayoutChangeCallback: (width, height) {},\r\n      onClickCallback: () {},\r\n      onOpenCallback: () {},\r\n      onCloseCallback: () {},\r\n      onFailedToLoadCallback: (error) {},\r\n    ))\r\n<\/pre>\n<\/div>\n<p data-renderer-start-pos=\"1821\">To receive the lifecycle events for overall scroll, provide <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">InfiniteScrollEventListener<\/code> to <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">R89SDK.adFactory.createInfiniteScroll<\/code> via <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">lifecycleCallbacks<\/code> parameter. Details about <code class=\"code cc-1o5d2cw\" data-renderer-mark=\"true\">InfiniteScrollEventListener<\/code> can be found in the <a class=\"cc-1rn59kg\" title=\"\/wiki\/spaces\/R8P\/pages\/528842754\" href=\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-plugin\/code-reference\/\" target=\"_blank\" rel=\"noopener\" data-testid=\"link-with-safety\" data-renderer-mark=\"true\">Reference<\/a>.<\/p>\n<div class=\"code-block\">\n<pre>final int infiniteScrollId = R89SDK.adFactory.createInfiniteScroll(\r\n    configurationId: ConfigConstants.infiniteScrollTestR89ConfigId,\r\n    lifecycleCallbacks: InfiniteScrollEventListener.callbacks(\r\n      onRollCallback: (itemIdInData) {},\r\n      onRollFailedCallback: (itemIdInData) {},\r\n      onAdItemCreatedCallback: (adapterId, probability) {},\r\n      onAdItemFailedToCreateCallback: (message) {},\r\n      onAdItemLoadedCallback: (itemIdInData) {},\r\n      onAdItemFailedToLoadCallback: (itemIdInData, message) {},\r\n      onAdItemImpressionCallback: (itemIdInData) {},\r\n      onAdItemClickCallback: (itemIdInData) {},\r\n      onAdItemOpenCallback: (itemIdInData) {},\r\n      onAdItemCloseCallback: (itemIdInData) {},\r\n    ));\r\n<\/pre>\n<\/div>\n<h1 id=\"Full-Example.\" data-renderer-start-pos=\"2787\">Full Example.<\/h1>\n<div class=\"code-block\">\n<pre>import 'package:flutter\/material.dart';\r\nimport 'package:playground\/config_constants.dart';\r\nimport 'package:refinery89_monetize_app\/r89_sdk.dart';\r\n\r\nclass ScrollPage extends StatefulWidget {\r\n  const ScrollPage({super.key});\r\n\r\n  @override\r\n  State createState() =&gt; _ScrollPageState();\r\n}\r\n\r\nclass _ScrollPageState extends State {\r\n  final int infiniteScrollId = R89SDK.adFactory.createInfiniteScroll(\r\n      configurationId: ConfigConstants.infiniteScrollTestR89ConfigId);\r\n\r\n  @override\r\n  Widget build(BuildContext context) =&gt; ListView.builder(\r\n        itemCount: 500,\r\n        itemBuilder: (context, index) =&gt; _buildItem(context, index),\r\n      );\r\n\r\n  Widget _buildItem(context, index) =&gt; Card(\r\n        child: Column(\r\n          children: [\r\n            Padding(\r\n              padding: const EdgeInsets.all(8.0),\r\n              child: Text(\"Item index $index\"),\r\n            ),\r\n            Center(\r\n              child: R89InfiniteScrollAd(\r\n                  itemIndex: index, infiniteScrollId: infiniteScrollId),\r\n            )\r\n          ],\r\n        ),\r\n      );\r\n}\r\n<\/pre>\n<\/div>\n","protected":false},"featured_media":0,"parent":10777,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","doc_tag":[],"class_list":["post-10780","docs","type-docs","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Infinite Scroll | Refinery89<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/refinery89.com\/es\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/formatos-publicitarios\/infinite-scroll\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Infinite Scroll | Refinery89\" \/>\n<meta property=\"og:description\" content=\"Ads positioned within scrollable content, dynamically displaying Banner or OutStream formats based on the item&#8217;s position within the scroll view. Show the Ad. To display an ad in the ListViewwidget, or in any other flutter\u2019s scrollable widget with index use R89InfiniteScrollAd widget, by adding it to the scroll item Widget _buildItem(context, index) =&gt; Card( child: [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/refinery89.com\/es\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/formatos-publicitarios\/infinite-scroll\/\" \/>\n<meta property=\"og:site_name\" content=\"Refinery89\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Refinery89\/\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-27T15:42:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/refinery89.com\/wp-content\/uploads\/2025\/08\/r89-thumbnail.png\" \/>\n\t<meta property=\"og:image:width\" content=\"200\" \/>\n\t<meta property=\"og:image:height\" content=\"200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@refinery89\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/\",\"url\":\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/\",\"name\":\"Infinite Scroll | Refinery89\",\"isPartOf\":{\"@id\":\"https:\/\/refinery89.com\/#website\"},\"datePublished\":\"2024-08-27T15:16:26+00:00\",\"dateModified\":\"2024-08-27T15:42:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/refinery89.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flutter &#8211; Monetize App SDK Documentation\",\"item\":\"https:\/\/refinery89.com\/sv\/docs\/flutter-monetize-app-sdk-documentation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Privat: User Guide\",\"item\":\"https:\/\/refinery89.com\/sv\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Ad Formats\",\"item\":\"https:\/\/refinery89.com\/sv\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/annonsformat\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Infinite Scroll\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/refinery89.com\/#website\",\"url\":\"https:\/\/refinery89.com\/\",\"name\":\"Refinery89\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/refinery89.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/refinery89.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/refinery89.com\/#organization\",\"name\":\"Refinery89\",\"alternateName\":\"R89\",\"url\":\"https:\/\/refinery89.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/refinery89.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/refinery89.com\/wp-content\/uploads\/2025\/08\/r89-thumbnail.png\",\"contentUrl\":\"https:\/\/refinery89.com\/wp-content\/uploads\/2025\/08\/r89-thumbnail.png\",\"width\":200,\"height\":200,\"caption\":\"Refinery89\"},\"image\":{\"@id\":\"https:\/\/refinery89.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Refinery89\/\",\"https:\/\/x.com\/refinery89\",\"https:\/\/www.linkedin.com\/company\/refinery89\/\",\"https:\/\/www.youtube.com\/@refinery89\",\"https:\/\/www.instagram.com\/refinery_89\/\",\"https:\/\/www.reddit.com\/user\/Refinery89\/\",\"https:\/\/share.google\/K8hFf3ktmUrTi1XCa\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Infinite Scroll | Refinery89","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/refinery89.com\/es\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/formatos-publicitarios\/infinite-scroll\/","og_locale":"es_ES","og_type":"article","og_title":"Infinite Scroll | Refinery89","og_description":"Ads positioned within scrollable content, dynamically displaying Banner or OutStream formats based on the item&#8217;s position within the scroll view. Show the Ad. To display an ad in the ListViewwidget, or in any other flutter\u2019s scrollable widget with index use R89InfiniteScrollAd widget, by adding it to the scroll item Widget _buildItem(context, index) =&gt; Card( child: [&hellip;]","og_url":"https:\/\/refinery89.com\/es\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/formatos-publicitarios\/infinite-scroll\/","og_site_name":"Refinery89","article_publisher":"https:\/\/www.facebook.com\/Refinery89\/","article_modified_time":"2024-08-27T15:42:49+00:00","og_image":[{"width":200,"height":200,"url":"https:\/\/refinery89.com\/wp-content\/uploads\/2025\/08\/r89-thumbnail.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@refinery89","twitter_misc":{"Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/","url":"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/","name":"Infinite Scroll | Refinery89","isPartOf":{"@id":"https:\/\/refinery89.com\/#website"},"datePublished":"2024-08-27T15:16:26+00:00","dateModified":"2024-08-27T15:42:49+00:00","breadcrumb":{"@id":"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/refinery89.com\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/ad-formats\/infinite-scroll\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/refinery89.com\/"},{"@type":"ListItem","position":2,"name":"Flutter &#8211; Monetize App SDK Documentation","item":"https:\/\/refinery89.com\/sv\/docs\/flutter-monetize-app-sdk-documentation\/"},{"@type":"ListItem","position":3,"name":"Privat: User Guide","item":"https:\/\/refinery89.com\/sv\/"},{"@type":"ListItem","position":4,"name":"Ad Formats","item":"https:\/\/refinery89.com\/sv\/docs\/flutter-monetize-app-sdk-documentation\/user-guide\/annonsformat\/"},{"@type":"ListItem","position":5,"name":"Infinite Scroll"}]},{"@type":"WebSite","@id":"https:\/\/refinery89.com\/#website","url":"https:\/\/refinery89.com\/","name":"Refinery89","description":"","publisher":{"@id":"https:\/\/refinery89.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/refinery89.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/refinery89.com\/#organization","name":"Refinery89","alternateName":"R89","url":"https:\/\/refinery89.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/refinery89.com\/#\/schema\/logo\/image\/","url":"https:\/\/refinery89.com\/wp-content\/uploads\/2025\/08\/r89-thumbnail.png","contentUrl":"https:\/\/refinery89.com\/wp-content\/uploads\/2025\/08\/r89-thumbnail.png","width":200,"height":200,"caption":"Refinery89"},"image":{"@id":"https:\/\/refinery89.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Refinery89\/","https:\/\/x.com\/refinery89","https:\/\/www.linkedin.com\/company\/refinery89\/","https:\/\/www.youtube.com\/@refinery89","https:\/\/www.instagram.com\/refinery_89\/","https:\/\/www.reddit.com\/user\/Refinery89\/","https:\/\/share.google\/K8hFf3ktmUrTi1XCa"]}]}},"comment_count":0,"_links":{"self":[{"href":"https:\/\/refinery89.com\/es\/wp-json\/wp\/v2\/docs\/10780","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/refinery89.com\/es\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/refinery89.com\/es\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/refinery89.com\/es\/wp-json\/wp\/v2\/comments?post=10780"}],"version-history":[{"count":0,"href":"https:\/\/refinery89.com\/es\/wp-json\/wp\/v2\/docs\/10780\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/refinery89.com\/es\/wp-json\/wp\/v2\/docs\/10777"}],"wp:attachment":[{"href":"https:\/\/refinery89.com\/es\/wp-json\/wp\/v2\/media?parent=10780"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/refinery89.com\/es\/wp-json\/wp\/v2\/doc_tag?post=10780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}