firestore ordertBy()查询使应用程序无法在首次请求中获取数据

这是我的主要问题

  

firestore ordertBy()查询使应用程序无法在首次请求中获取数据

在这种情况下,简单说明一下:

  1. 在正常工作的智能手机上安装APP之后,我可以添加数据并读取该数据列表。

  2. 但是在我卸载并重新安装我的应用程序之后,无法访问该数据

  3. 从查询中删除orderBy()后,我的应用程序正常运行。

  

请问有人可以帮助我解决该问题吗?我需要订购数据列表

这是StreamBuilder的代码

StreamBuilder(
                  stream: Firestore.instance
                      .collection('murid ' + widget.email)
                      .where('kelas',isEqualTo: widget.kelas)
                      .where('emailGuru',isEqualTo: widget.email).orderBy('no')
                      .snapshots(),builder: (BuildContext context,Asyncsnapshot<Querysnapshot> snapshot) {
                    if (!snapshot.hasData) {
                      return new Container(
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
                            Row(
                              mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
                                Container(
                                  height: 15.0,width: 15.0,child: CircularProgressIndicator(
                                    strokeWidth: 1,),Padding(
                                  padding: const EdgeInsets.all(8.0),child: Text(
                                    'Loading ...',style: TextStyle(fontSize: 18.0),],Text(
                              'Data belum tersedia!',textAlign: TextAlign.center,);
                    } else {
                      return Stack(
                        children: <Widget>[
                          Container(
                            height: 55.0,color: Colors.blue[900],Padding(
                            padding: const EdgeInsets.only(top: 25.0),child: Container(
                              decoration: BoxDecoration(
                                color: Color.fromRGBO(227,242,253,1.0),borderRadius: BorderRadius.only(
                                    topLeft: Radius.circular(30.0),topRight: Radius.circular(30.0)),child: Stack(
                                children: <Widget>[
                                  Center(
                                    child: Text(
                                      "Pilih Akun",style: TextStyle(
                                          fontSize: 40.0,fontWeight: FontWeight.bold,color: Colors.white54),DataMurid(
                                    document: snapshot.data.documents,);
                    }
                  },

这是listView.builder

ListView.builder(
    itemCount: widget.document.length,itemBuilder: (BuildContext context,int i) {
      String no = widget.document[i].data['no'].toString();
      return Container(
        key: new Key(widget.document[i].documentID),child: Padding(
          padding: const EdgeInsets.only(left: 20.0,right: 20.0),child: Column(
            children: <Widget>[
              Row(
                children: <Widget>[
                  Expanded(
                    child: Container(
                      height: 40.0,decoration: BoxDecoration(
                        color: Colors.blue[900],borderRadius: BorderRadius.only(
                            topLeft: Radius.circular(300.0),bottomLeft: Radius.circular(300.0),topRight: Radius.circular(30.0),bottomRight: Radius.circular(30.0)),child: Center(
                        child: Text(
                          no,style: TextStyle(
                              fontSize: 14.0,color: Colors.white),

我需要订购该数字,因为列表视图使该数字值转换为字符串,如果数字大于9,则转换为结果,例如:

我的值'no'是[1,2,3,4,5,6,7,8,9,10,11,12],在我将该值调用给ListView之后,输出将如下所示:

  

1、10、11、12、2、3、4、5、6、7、8、9 //不带orderBy();

chieiey2009 回答:firestore ordertBy()查询使应用程序无法在首次请求中获取数据

从结果中您可以得到,好像您将数字作为字符串值存储在数据库中一样。

对于字符串值,Firestore将使用字典顺序,这意味着它将按照对文本进行排序的方式进行排序。假设您有以下文字:"ba""b""c",“ ca"。您希望它们按以下方式排序:

"b"
"ba"
"c"
"ca"

当处理存储在字符串中的数字时,数据库遵循完全相同的逻辑。所以:

"1"
"10"
"11"
"2"
"21"
"3"

这可能不是您想要的,但是在数据库运行的级别上完全可以预期。


有两种常见的解决方案:

  1. 将这些值作为实际数字值存储在数据库中。到目前为止,这是最简单的,在这种情况下,数据将按数字顺序而不是按字典顺序排列。

  2. 确保所有字符串值的长度相同。如果您用零或空格“填充”字符串以使它们的长度相同,那么字典顺序将再次起作用:

    "01"
    "02"
    "03"
    "10"
    "11"
    "21"
    
本文链接:https://www.f2er.com/3123605.html

大家都在问