我正处于我的 flutter 职业生涯的初期。现在,我面临着一个问题。我想是因为我不太了解flutter代码的调用顺序。
问题是当我启动应用程序时(通过保存所有文件),我看到第一个屏幕截图,但是当应用程序工作并且不更改任何代码时,我在 dart 文件上输入 CTRL+S ,我最终看到第二个屏幕。为什么我无法直接访问第二个屏幕?
*该结构基本上是获取集合中的所有文档并在网格视图中列出它们。
final CollectionReference sebzeCollection =
Firestore.instance.collection('sebzeler');
class RightBody extends StatefulWidget {
@override
_RightBodyState createState() => _RightBodyState();
}
class _RightBodyState extends State<RightBody>
with AutomaticKeepAliveClientMixin {
@override
void initState() {
getAllSebze();
super.initState();
}
List<SebzeMeyve> sebzeler;
getAllSebze() async {
sebzeler = new List<SebzeMeyve>();
sebzeCollection.getDocuments().then((QuerySnapshot snapshot) {
snapshot.documents.forEach((DocumentSnapshot doc) {
SebzeMeyve sebze = new SebzeMeyve(
isInSale: doc.data['isInSale'],
organic: doc.data['organik'],
dogal: doc.data['dogal'],
fiyat: doc.data['fiyat'],
mensei: doc.data['mensei'],
name: doc.data['name'],
picture: doc.data['picture'],
stok: doc.data['stok']);
sebzeler.add(sebze);
});
});
}
List<Widget> _setBuildCards() {
List _listings = new List<Widget>();
for (int i = 0; i < sebzeler.length; i++) {
_listings.add(_buildCard(
'T-shirt',
sebzeler[i].name.toUpperCase(),
'\₺' + sebzeler[i].fiyat,
sebzeler[i].picture,
false,
false,
context));
}
return _listings;
}
@override
Widget build(BuildContext context) {
// List<SebzeMeyve> _sebzeler = widget.test;
//super.build(context);
return Padding(
padding: const EdgeInsets.only(top: 10.0),
child: Container(
padding: EdgeInsets.only(left: 15, right: 15.0),
width: MediaQuery.of(context).size.width - 30,
height: MediaQuery.of(context).size.height - 50,
child: GridView.count(
crossAxisCount: 3,
children: _setBuildCards(),
),
));
}
谢谢!
我认为这是一个状态问题,并且您在更改变量后没有更新应用程序的状态。当您更改变量以将行换行到 setState 时,这是常见的做法。
更新后的 getAllSebze 函数应如下所示:
getAllSebze() async {
setState(() {
sebzeler = new List<SebzeMeyve>();
}
sebzeCollection.getDocuments().then((QuerySnapshot snapshot) {
snapshot.documents.forEach((DocumentSnapshot doc) {
SebzeMeyve sebze = new SebzeMeyve(
isInSale: doc.data['isInSale'],
organic: doc.data['organik'],
dogal: doc.data['dogal'],
fiyat: doc.data['fiyat'],
mensei: doc.data['mensei'],
name: doc.data['name'],
picture: doc.data['picture'],
stok: doc.data['stok']);
setState(() {
sebzeler.add(sebze);
})
});
});
}