我正在制作我的第一个Flutter应用程序之一,当他触摸底部时,我尝试更新自己的gridview。 不幸的是我不知道如何开始。 我使用StreamBuilder制作东西,但是我想一次获取6个imageUrl,当我的gridview触底时再获取4个,然后用这个新的4更新gridview。 怎么做?
@override
void initState() {
_controller = ScrollController();
_controller.addListener(_scrollListener);
super.initState();
}
_scrollListener() {
if (_controller.offset >= _controller.position.maxScrollExtent &&
!_controller.position.outOfRange) {
setState(() {
message = "reach the bottom";
});
}
if (_controller.offset <= _controller.position.minScrollExtent &&
!_controller.position.outOfRange) {
setState(() {
message = "reach the top";
});
}
}
@override
Widget build(BuildContext context) {
return new Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: null,
child: Icon(Icons.add),
backgroundColor: Colors.black,
),
appBar: AppBar(
title: Text(message),
),
body: new Center(
child: StreamBuilder(
stream: Firestore.instance.collection('Posts').limit(6).snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Text("Loading data...");
}
return new GridView.builder(
controller: _controller,
padding: EdgeInsets.all(8.0),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,
crossAxisSpacing: 12.0,
mainAxisSpacing: 12.0,
childAspectRatio: cardWidth/cardHeight),
itemBuilder: (BuildContext context, int index) {
lastVisabe = snapshot.data.documents[index];
return ClipRRect(
borderRadius: BorderRadius.circular(15.0),
child: new GestureDetector(
onTap:() {
print(snapshot.data.documents[index]['imageUrl']);
},
child: Image.network(snapshot.data.documents[index]['imageUrl'],
fit: BoxFit.fitHeight),
),
);
},
itemCount: snapshot.data.documents.length,
);
},
)
),
);
不幸的是,当我在Firestore中添加内容时,他一直使用StreamBuilder来获取新项目,并在更新的项目上更改我的项目。