Firebase 如何通过最近添加到Flatter中来显示Firestore中的项目?

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

我正试图解决一个问题,通过Flutter显示最近添加到Firestore的数据。在我的情况下能做些什么

在React中,我将使用useState钩子实现这一点,如何在颤振中实现这一点? 我读到关于;方法,这样做对吗

代码:

形镖

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)