Firebase 如何通过最近添加到Flatter中来显示Firestore中的项目?
我正试图解决一个问题,通过Flutter显示最近添加到Firestore的数据。在我的情况下能做些什么 在React中,我将使用useState钩子实现这一点,如何在颤振中实现这一点? 我读到关于;方法,这样做对吗 代码: 形镖Firebase 如何通过最近添加到Flatter中来显示Firestore中的项目?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我正试图解决一个问题,通过Flutter显示最近添加到Firestore的数据。在我的情况下能做些什么 在React中,我将使用useState钩子实现这一点,如何在颤振中实现这一点? 我读到关于;方法,这样做对吗 代码: 形镖 class FormText extends StatelessWidget { final String _labelText = 'Enter your weight..'; final String _buttonText = 'Save'; fin
class FormText extends StatelessWidget {
final String _labelText = 'Enter your weight..';
final String _buttonText = 'Save';
final _controller = TextEditingController();
final dateFormat = new DateFormat.yMMMMd().add_jm();
final _collection =
FirebaseFirestore.instance.collection('weightMeasurement');
void saveItemToList() {
final weight = _controller.text;
if (weight.isNotEmpty) {
_collection.add({
'weight': weight,
'time': dateFormat.format(DateTime.now()),
});
} else {
return null;
}
_controller.clear();
}
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Expanded(
child: TextField(
keyboardType: TextInputType.number,
controller: _controller,
decoration: InputDecoration(
labelText: _labelText,
),
),
),
FlatButton(
color: Colors.blue,
onPressed: saveItemToList,
child: Text(
_buttonText,
style: TextStyle(
color: Colors.white,
),
),
),
],
);
}
}
class FormText扩展了无状态小部件{
最后一个字符串_labelText='输入您的体重..';
最后一个字符串_buttonText='Save';
最终_controller=TextEditingController();
final dateFormat=new dateFormat.yMMMMd().add_jm();
最终收集=
FirebaseFirestore.instance.collection('weightMeasurement');
void saveItemToList(){
最终重量=_controller.text;
如果(重量。isNotEmpty){
_collection.add({
“重量”:重量,
“时间”:dateFormat.format(DateTime.now()),
});
}否则{
返回null;
}
_controller.clear();
}
@凌驾
小部件构建(构建上下文){
返回行(
儿童:[
扩大(
孩子:TextField(
键盘类型:TextInputType.number,
控制器:_控制器,
装饰:输入装饰(
labelText:_labelText,
),
),
),
扁平按钮(
颜色:颜色,蓝色,
onPressed:saveItemToList,
子:文本(
_buttonText,
样式:TextStyle(
颜色:颜色,白色,
),
),
),
],
);
}
}
省道
class RecentMeasurement {
Widget buildList(QuerySnapshot snapshot) {
return ListView.builder(
reverse: false,
itemCount: snapshot.docs.length,
itemBuilder: (context, index) {
final doc = snapshot.docs[index];
return Dismissible(
background: Container(color: Colors.red),
key: Key(doc.id),
onDismissed: (direction) {
FirebaseFirestore.instance
.collection('weightMeasurement')
.doc(doc.id)
.delete();
},
child: ListTile(
title: Expanded(
child: Card(
margin: EdgeInsets.all(30.0),
child: Column(
children: <Widget>[
Text('Current Weight: ' + doc['weight'] + 'kg'),
Text('Time added: ' + doc['time'].toString()),
],
),
),
),
),
);
},
);
}
}
最近等级测量{
小部件构建列表(QuerySnapshot快照){
返回ListView.builder(
反面:错,
itemCount:snapshot.docs.length,
itemBuilder:(上下文,索引){
最终单据=快照.单据[索引];
可驳回的回报(
背景:容器(颜色:Colors.red),
密钥:密钥(文档id),
onDismissed:(方向){
FirebaseFirestore.instance
.collection(“权重度量”)
.doc(doc.id)
.delete();
},
孩子:ListTile(
标题:扩展(
孩子:卡片(
保证金:所有边缘套(30.0),
子:列(
儿童:[
文本('当前重量:'+doc['Weight']+'kg'),
Text('Time added:'+doc['Time'].toString()),
],
),
),
),
),
);
},
);
}
}
布局.省道
class Layout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(30.0),
child: Column(
children: <Widget>[
FormText(),
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('weightMeasurement')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return LinearProgressIndicator();
return Expanded(
child: RecentMeasurement().buildList(snapshot.data),
);
}),
],
),
);
}
}
类布局扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回填充(
填充:常数边集全部(30.0),
子:列(
儿童:[
FormText(),
StreamBuilder(
流:FirebaseFirestore.instance
.collection(“权重度量”)
.snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData)返回LinearProgressIndicator();
扩大回报(
子项:RecentMeasurement().buildList(snapshot.data),
);
}),
],
),
);
}
}
您可以尝试通过订购。这是一个
您必须在集合中使用“orderBy”,但之前您必须存储称为timestamp的内容。请确保在将项目上载到Firebase时同时上载DateTime.now()和项目,以便按时间订购。不要忘记使用升序方向,因为它会显示您正确订购的物品。您共享的特定代码行中有哪一行没有达到您期望的效果?
firestoreDb.collection("weightMeasurement")
.orderBy("date", Query.Direction.ASCENDING)