【发布时间】:2018-11-24 10:02:55
【问题描述】:
我是新来的颤振。我正在用 firebase 构建一个应用程序。在我的应用程序中,我想在 gridview 中显示产品详细信息。细节取自firebase。我成功地获得了价值。但是我从 firebase 获得的值没有更新到 GridView 列表。我的代码如下所示。
AppMain.Dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:augr/location/LocationScreen.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
MyApp({this.firestore});
final Firestore firestore;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(title: 'My Shop', firestore: firestore)
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title, this.firestore}) : super(key: key);
final Firestore firestore;
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState(firestore: firestore);
}
class _MyHomePageState extends State<MyHomePage> {
_MyHomePageState({this.firestore});
final Firestore firestore;
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
iconTheme: IconThemeData(
color: Colors.black, //change font color here
),
backgroundColor: new Color(0xFFFAFAFA),
)
title:"title",
body: TheGridview().build(),
);
}
}
class TheGridview{
Card makeGridCell(String name, IconData icon){
return Card(
elevation: 1.0,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
verticalDirection: VerticalDirection.down,
children: <Widget>[
Center(child: Icon(icon)),
Text(name)
],
),
);
}
GridView build(){
return GridView.count(
primary: true,
padding: EdgeInsets.all(1.0),
crossAxisCount: 2,
childAspectRatio: 1.0,
mainAxisSpacing: 1.0,
crossAxisSpacing: 1.0,
children: createChildrenTexts(),
/* children: <Widget>[
makeGridCell("Home", Icons.access_alarm)
],*/
);
}
List<Widget> createChildrenTexts(){
List<Widget> childrenTexts = List<Widget>();
getProduceID().then((data){
for(int i=0;i<data.length;i++){
childrenTexts.add(makeGridCell(data[i].data['message'], Icons.access_alarm));
print("data from firebase:"+data[i].data['message']);
}
});
return childrenTexts;
}
Future<List<DocumentSnapshot>> getProduceID() async{
QuerySnapshot querySnapshot = await Firestore.instance.collection("messages").getDocuments();
var list = querySnapshot.documents;
return list;
}
}
createChildrenTexts 是我想在 GridView 中添加项目的方法。 from firebase 正在控制台中打印。但没有添加到列表中。我知道我想写有状态的小部件。但是我怎么写请帮帮我。
【问题讨论】:
-
为什么你的 for 循环从值 0 运行到 1 而不是 data.length ?
-
它用于 data.length。我对此感到抱歉。我更改了代码。
标签: android ios dart flutter flutter-layout