#firebase #flutter #google-cloud-firestore #pagination #native-ads
#firebase #flutter #google-облако-firestore #разбиение на страницы #нативная реклама
Вопрос:
Я использую приведенный ниже код для извлечения списка в приложении flutter, используя разбивку на страницы с firestore в качестве базы данных, которая работает нормально. Я имею в виду flutter_native_admob
зависимость для нативной рекламы. но я не могу понять, как я могу реализовать это в listview.builder
и в то же время мне нужно реализовать разбивку на страницы. Как и в Instagram, когда после определенного количества постов появляется нативная реклама, мне нужно показать добавление аналогичным образом. Как это возможно?
_getProducts() async {
query = Firestore.instance.collection("users").document(uid).collection('my_favorites').orderBy("timestamp", descending: true).limit(5);
setState(() {
_loadingnotifications = true ;
});
QuerySnapshot _querySnapshot = await query.getDocuments();
_lastDocument = _querySnapshot.documents[_querySnapshot.documents.length - 1];
_notifications = _querySnapshot.documents;
setState(() {
_loadingnotifications = false;
});
}
_getMoreNotifications() async {
print("new docs loaded");
if(_moreProductsAvailable == false ){
return;
}
if(_loadingMore == true ){
return;
}
_loadingMore = true;
query = Firestore.instance.collection("users").document(uid).collection('my_favorites').orderBy("timestamp", descending: true).startAfter([_lastDocument.data['timestamp']]).limit(5);
QuerySnapshot _querySnapshot = await query.getDocuments();
if (_querySnapshot.documents.length <5){
_moreProductsAvailable = false;
}
_lastDocument = _querySnapshot.documents[_querySnapshot.documents.length - 1];
_notifications.addAll(_querySnapshot.documents);
setState(() {
_loadingnotifications = false;
});
_loadingMore = false;
}
ПРОСМОТР списка.Конструктор
Flexible(
child:_loadingnotifications == true ? Container(child: Center(child: Text("Loading..."),),) :Container(child: _notifications.length == 0? Center(
child: Text("No Marked Posts Yet!"),) :
new ListView.builder(
controller: _scrollController,
itemCount: _notifications.length,
itemBuilder: (BuildContext ctx, int index){
String itemTitle = _notifications[index].data['itemTitle'];
return ItemCard(itemTitle: itemTitle, );
}),)
),
Я знаю, как создать учетную запись admob и инициализировать flutter_native_admob
в приложении, но не имею ни малейшего представления, как поместить ее в список, как instagram, с разбиением на страницы.
Комментарии:
1. Есть решения? Я ищу то же самое.
Ответ №1:
Вы можете добавить переменную counter в цикле, и перед добавлением виджетов в окончательный список вы можете проверить, что всякий раз, когда переменная counter кратна 5, добавьте виджет ad, иначе добавьте обычный виджет, это добавит рекламу в ваш список после каждых 5 обычных виджетов.
Вы можете проверить это для справки: https://medium.com/@vitopiegari/embedding-ads-into-flutters-widget-tree-with-admob-flutter-ae59c3a66492
Ответ №2:
Вместо ListView.builder
используйте ListView.separated
.
Затем в свойстве separatorBuilder вы можете добавлять объявления.
Например:
ListView.separated(
physics: BouncingScrollPhysics(),
shrinkWrap: true,
itemBuilder: (context, i) {
return ListTile();
},
separatorBuilder: (context, index) {
if (index % 10 == 9 amp;amp; index != 0) return BannerAd();
return const SizedBox();
},
itemCount: _listLength,
),