Flutter 了解如何在streambuilder中每n次向listview添加一个项

Flutter 了解如何在streambuilder中每n次向listview添加一个项,flutter,admob,Flutter,Admob,我正在尝试在我的Flitter应用程序中放置广告,该应用程序显示来自firebase的项目流。要做到这一点,我使用插入方法,但每次都会出错错误:无法将参数类型“Text”分配给参数类型“DocumentSnapshot”。 我就是这样做的 StreamBuilder( stream: stream, //stream: getposts(), builder: (BuildContext context,

我正在尝试在我的Flitter应用程序中放置广告,该应用程序显示来自firebase的项目流。要做到这一点,我使用插入方法,但每次都会出错<代码>错误:无法将参数类型“Text”分配给参数类型“DocumentSnapshot”。

我就是这样做的

StreamBuilder(
            stream: stream,
            //stream: getposts(),
            builder: (BuildContext context,
                AsyncSnapshot<List<DocumentSnapshot>>snapshots) {
              var adcode=Text(" Ad goes here");
              snapshots.data.insert(2, adcode);

              return Flexible(
                  child: Container(
                    child: ListView.builder(
                   //listview items)


)
StreamBuilder(
小溪:小溪,
//流:getposts(),
生成器:(BuildContext上下文,
异步快照(快照){
var adcode=文本(“广告在此显示”);
快照.数据.插入(2,adcode);
回程灵活(
子:容器(
子项:ListView.builder(
//列表视图项目)
)

有什么办法可以修复上面的错误,或者用另一种方法从streambuilder中每隔n个项目放置一个广告吗?我正在使用Google Admob软件包制作广告,一种方法是创建一个新的
列表,然后像这样修改它的内容

var adcode = Text(" Ad goes here");
List<dynamic> finalList = snapshots.data;
finalList.insert(2, adcode);
// Use this finalList to build your Widget.
var-adcode=Text(“广告在此显示”);
List finalList=snapshots.data;
最后插入(2,adcode);
//使用此finalList构建您的小部件。

然后,如果您使用的是
ListView.builder
,每当您到达
nth
索引时,您都可以读取数据并以不同的方式使用它,因为该索引处的数据将是
文本
小部件,而不是
文档快照

,我不知道这是否是最佳方法,但这是我将选择的方法

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String title;
  MyHomePage({this.title});
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

List<String> display = [
  "One",
  "Two",
  "Three",
  "Four",
  "Five",
  "Six",
  "Seven",
  "Eight",
  "Nine",
  "Ten"
];

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView.builder(
        itemCount: display.length,
        itemBuilder: (ctx, index) {
          if (index % 2 == 0 && index != 0) {
            return Column(
              children: [
                Container(
                  height: 80,
                  color: Colors.green,
                ),
                Container(
                  height: 80,
                  color: Colors.red,
                ),
              ],
            );
          }
          return Container(
            height: 80,
            width: 200,
            color: Colors.red,
          );
        },
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
最后的字符串标题;
我的主页({this.title});
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
列表显示=[
“一个”,
“两个”,
“三”,
“四”,
“五个”,
“六”,
“七”,
“八”,
“九”,
“十”
];
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:ListView.builder(
itemCount:display.length,
itemBuilder:(ctx,索引){
如果(索引%2==0&&index!=0){
返回列(
儿童:[
容器(
身高:80,
颜色:颜色。绿色,
),
容器(
身高:80,
颜色:颜色,红色,
),
],
);
}
返回容器(
身高:80,
宽度:200,
颜色:颜色,红色,
);
},
),
);
}
}

希望这会对您有所帮助。

看起来您正在尝试将一个
Text
实例放在一个
DocumentSnapshot
的预期位置。可能在这里:
snapshots.data.insert(2,adcode)
Hey Aashar,这很有帮助,除了一个小问题。我的listview当前包含5项。遵循您的方法后。其中2项在插入的代码中被widet替换。在这种情况下,是绿色容器,这就是为什么有一列包含一个新的小部件和其他小部件。我如何制作所有原始的小部件小部件可见?抱歉,我不明白你的问题。你能提供更多关于如何在Listview中使用finalList的示例吗