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