将静态项附加到从数据库数据生成的ListView.builder
我从firestore数据库中获取了一些数据,利用这些数据我创建了一个显示我的数据的列表视图 我想在这个列表的底部附加3个不同于生成的静态项 我创建列表的代码是:将静态项附加到从数据库数据生成的ListView.builder,listview,flutter,static,Listview,Flutter,Static,我从firestore数据库中获取了一些数据,利用这些数据我创建了一个显示我的数据的列表视图 我想在这个列表的底部附加3个不同于生成的静态项 我创建列表的代码是: child: StreamBuilder<QuerySnapshot>( stream: Firestore.instance .collection('users').document(userAdminId) .collection('events') .where('ope
child: StreamBuilder<QuerySnapshot>(
stream: Firestore.instance
.collection('users').document(userAdminId)
.collection('events')
.where('operatore', isEqualTo: _user)
.snapshots(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError)
return Text('Error: ${snapshot.error}');
switch (snapshot.data) {
case null:
return Container();
default:
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
final item = snapshot.data.documents[index];
final itemID =
snapshot.data.documents[index].documentID;
final list =
snapshot.data.documents;
return Card(
...
},
);
}
},
),
如果我只得到一个事件:
[event1]
[camera]
[media]
[friends]
我通过
SliverList
小部件解决了这个问题
此代码是一个示例:
Widget buildGridFilesToExport() {
return new StreamBuilder(
stream: Firestore.instance
.collection('users')
.document(dataUserGlobal.userAdminId)
.collection('events')
.document(dataUserGlobal.eventId)
.snapshots(),
builder: (context, snapshot) {
print(snapshot);
if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return dataUserGlobal.showLoading(dataUserGlobal.purple);
default:
List videosList = snapshot.data['thumbnailsUrl'];
return videosList != null ?
CustomScrollView(
slivers: [
SliverGrid(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200.0,
mainAxisSpacing: 10.0,
crossAxisSpacing: 10.0,
childAspectRatio: 1,
),
delegate: SliverChildBuilderDelegate((context, index) {
return Container(
padding: EdgeInsets.all(5.0),
child: Column(
children: <Widget>[
Expanded(
flex: 7,
child: Stack(
children: <Widget>[
Container(
margin:
EdgeInsets.only(bottom: 2.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(5.0)),
image: DecorationImage(
image: NetworkImage(snapshot
.data['thumbnailsUrl']
[index]),
fit: BoxFit.cover,
),
),
),
],
)),
],
));
}, childCount: snapshot.data['thumbnailsUrl'].length),
),
SliverList(
delegate: SliverChildListDelegate([
closeEvent(),
]),
)
],
)
:
Center(
child: Container(
width: 250,
child: Text(
'Ancora nessun video!\nCarica i video dalla sezione media, oppure vai nella sezione amici e seleziona i video da spostare qui!',
textAlign: TextAlign.center,
style: TextStyle(
fontFamily: 'acumin-pro',
fontSize: 22,
),
),
)
);
}
},
);
}
Widget buildGridFilesToExport(){
返回新的StreamBuilder(
流:Firestore.instance
.collection('用户')
.document(dataUserGlobal.userAdminId)
.collection(“事件”)
.document(dataUserGlobal.eventId)
.snapshots(),
生成器:(上下文,快照){
打印(快照);
if(snapshot.hasError)返回新文本('Error:${snapshot.Error}');
交换机(快照.连接状态){
案例连接状态。正在等待:
返回dataUserGlobal.showLoading(dataUserGlobal.purple);
违约:
List videosList=snapshot.data['thumbnailsUrl'];
返回视频列表!=空?
自定义滚动视图(
条子:[
银栅(
gridDelegate:SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent:200.0,
主轴间距:10.0,
交叉轴间距:10.0,
儿童方面:1,
),
委托:SliverChildBuilderDelegate((上下文,索引){
返回容器(
填充:所有边缘设置(5.0),
子:列(
儿童:[
扩大(
弹性:7,
子:堆栈(
儿童:[
容器(
保证金:
仅限边缘设置(底部:2.0),
装饰:盒子装饰(
borderRadius:borderRadius.all(
圆半径(5.0)),
图像:装饰图像(
图像:网络图像(快照)
.data['thumbnailsUrl']
[索引],
适合:BoxFit.cover,
),
),
),
],
)),
],
));
},childCount:snapshot.data['thumbnailsUrl'].length),
),
银表(
委托:SliverChildListDelegate([
closeEvent(),
]),
)
],
)
:
居中(
子:容器(
宽度:250,
子:文本(
“Ancora nessun视频!\n哥斯达黎加视频达拉斯媒体,奥普瓦伊内拉媒体,我的朋友和我的朋友视频!”,
textAlign:textAlign.center,
样式:TextStyle(
fontFamily:“acumin pro”,
尺寸:22,
),
),
)
);
}
},
);
}
一些小把戏,
[event1]
[camera]
[media]
[friends]
Widget buildGridFilesToExport() {
return new StreamBuilder(
stream: Firestore.instance
.collection('users')
.document(dataUserGlobal.userAdminId)
.collection('events')
.document(dataUserGlobal.eventId)
.snapshots(),
builder: (context, snapshot) {
print(snapshot);
if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return dataUserGlobal.showLoading(dataUserGlobal.purple);
default:
List videosList = snapshot.data['thumbnailsUrl'];
return videosList != null ?
CustomScrollView(
slivers: [
SliverGrid(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200.0,
mainAxisSpacing: 10.0,
crossAxisSpacing: 10.0,
childAspectRatio: 1,
),
delegate: SliverChildBuilderDelegate((context, index) {
return Container(
padding: EdgeInsets.all(5.0),
child: Column(
children: <Widget>[
Expanded(
flex: 7,
child: Stack(
children: <Widget>[
Container(
margin:
EdgeInsets.only(bottom: 2.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(5.0)),
image: DecorationImage(
image: NetworkImage(snapshot
.data['thumbnailsUrl']
[index]),
fit: BoxFit.cover,
),
),
),
],
)),
],
));
}, childCount: snapshot.data['thumbnailsUrl'].length),
),
SliverList(
delegate: SliverChildListDelegate([
closeEvent(),
]),
)
],
)
:
Center(
child: Container(
width: 250,
child: Text(
'Ancora nessun video!\nCarica i video dalla sezione media, oppure vai nella sezione amici e seleziona i video da spostare qui!',
textAlign: TextAlign.center,
style: TextStyle(
fontFamily: 'acumin-pro',
fontSize: 22,
),
),
)
);
}
},
);
}