Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振-StreamProvider-向Firebase发送重复出现的XHR请求_Firebase_Flutter_Google Cloud Firestore_Flutter Web - Fatal编程技术网

颤振-StreamProvider-向Firebase发送重复出现的XHR请求

颤振-StreamProvider-向Firebase发送重复出现的XHR请求,firebase,flutter,google-cloud-firestore,flutter-web,Firebase,Flutter,Google Cloud Firestore,Flutter Web,我注意到我的读取请求显著增加,因为我使用添加了一个新的流,我设法通过删除该流来确认这一点,并且没有重复请求。但我似乎无法找到它重复的原因 注意:代码的功能很好,只是这些读取请求已经过了极限 流 //get list of all open enquiries Stream<List<EnquiryData>> get centreDashboardOpenEnquiries { return centresCollection.document(centre

我注意到我的读取请求显著增加,因为我使用添加了一个新的流,我设法通过删除该流来确认这一点,并且没有重复请求。但我似乎无法找到它重复的原因

注意:代码的功能很好,只是这些读取请求已经过了极限

//get list of all open enquiries
  Stream<List<EnquiryData>> get centreDashboardOpenEnquiries {
    return centresCollection.document(centreID).collection('enquiries').where('enquiryStatus', whereIn: ['New', 'Contacted', 'Tour Scheduled', 'Tour Completed']).snapshots().map(_enquiryList);
  }

  //Map QuerySnapshot to List of EnquiryData
  List<EnquiryData> _enquiryList(QuerySnapshot enquiry){
    return enquiry.documents.map((doc) {
      return EnquiryData(
        enquiryID: doc.data['enquiryID'].toString(),
        parentFirstName: doc.data['firstName'],
        parentLastName: doc.data['lastName'],
        parentPhoneNumber: doc.data['phoneNumber'],
        parentEmail: doc.data['email'],
        parentAddress: doc.data['address'],
        methodOfEnquiry: doc.data['methodOfEnquiry'],
        hearAboutUs: doc.data['hearAboutUs'],
        specificHearAboutUs: doc.data['specificHearAboutUs'],
        impressionOfCentre: doc.data['firstImpression'],
        enquiryStatus: doc.data['enquiryStatus'],
        created: doc.data['created'],
        lastUpdated: doc.data['lastUpdated'],
      );
    }).toList();
  }
//获取所有未结查询的列表
溪流集中冲浪板开放草原{
返回centresCollection.document(centreID).collection('inquiries')。其中('inquirystatus',其中:['New','Contacted','Tour Scheduled','Tour Completed'])。snapshots().map(_inquiryList);
}
//将QuerySnapshot映射到查询数据列表
列表查询列表(查询快照查询){
返回查询。文件。地图((doc){
返回查询数据(
inquiryId:doc.data['inquiryId'].toString(),
parentFirstName:doc.data['firstName'],
parentLastName:doc.data['lastName'],
parentPhoneNumber:doc.data['phoneNumber'],
parentEmail:doc.data['email'],
parentAddress:doc.data['address'],
查询方法:文档数据['MethodOfQuery'],
hearAboutUs:doc.data['hearAboutUs'],
specificHearAboutUs:doc.data['specificHearAboutUs'],
印象中心:文档数据['firstImpression'],
查询状态:文档数据['inquiryStatus'],
已创建:文档数据[“已创建”],
lastUpdated:doc.data['lastUpdated'],
);
}).toList();
}
使用CurrentOpenDataTable子级调用流

child: StreamProvider<List<EnquiryData>>.value(
    value: EnquiryDatabaseService(centreID: widget.centreData.centreID).centreDashboardOpenEnquiries,
    child: CurrentOpenDataTable(),
),
child:StreamProvider.value(
值:InquiryDatabaseService(centreID:widget.centreData.centreID).centreDatabaseService,
子级:CurrentOpenDataTable(),
),
CurrentOpenDataTable()

类CurrentOpenDataTable扩展StatefulWidget{
@凌驾
_CurrentOpenDataTableState createState()=>\u CurrentOpenDataTableState();
}
类_CurrentOpenDataTableState扩展状态{
@凌驾
小部件构建(构建上下文){
最终查询数据=提供者(上下文)??[];
返回数据表(
showCheckboxColumn:false,
sortColumnIndex:1,
排序:是的,
栏目:[
数据列(
标签:文本(“日期”),
),
数据列(
标签:文本(“名称”),
//数字:对,
),
数据列(
标签:文本(“状态”),
),
],
行:_inquiryRow(上下文,inquiryData),
);
}
}
_日期格式(日期时间日期时间){
字符串formattedDate=DateFormat('dd/MM/yyyy')。格式(dateTime);
返回格式化日期;
}
_inquiryRow(BuildContext上下文,列表inquiryData){
List listOfDataRows=List.generate(
inquirydata.length,
(索引)=>DataRow(
单元格:[
数据单元(文本(_dateFormat(DateTime.fromsmillissecondssinceepoch(
查询数据[index].created)),
数据单元(文本(查询数据[索引]).parentFirstName+
' ' +
查询数据[索引].parentLastName],
数据单元(文本(查询数据[index].inquiryStatus)),
],
onSelectChanged:(布尔选择){
如果(选定){
ShowInquiryDialog(上下文、InquiryData[索引]);
}
}));
返回数据行列表;
}
包含
流提供程序的小部件(我们称之为
MyWidget
)正在不断重建

您不应该在
StreamProvider.value
中创建
inquiryDatabaseService
,而是在
initState
中获取流

范例

class\u MyWidgetState扩展状态{
溪流;;
@凌驾
initState(){
_stream=inquiryDatabaseService(centreID:widget.centreData.centreID);
}
//…内置
StreamProvider.value(
值:_流,
子:容器(/*…*/),
),
}
或者不要使用
.value
构造函数

StreamProvider(
创建:()=>InquiryDatabaseService(centreID:widget.centreData.centreID).centredAshBoardOpenInquiries,
子:容器(/*…*/),
),
阅读更多关于 更多参考资料请参阅-

class CurrentOpenDataTable extends StatefulWidget {
  @override
  _CurrentOpenDataTableState createState() => _CurrentOpenDataTableState();
}

class _CurrentOpenDataTableState extends State<CurrentOpenDataTable> {
  @override
  Widget build(BuildContext context) {
    final enquiryData = Provider.of<List<EnquiryData>>(context) ?? [];
    return DataTable(
      showCheckboxColumn: false,
      sortColumnIndex: 1,
      sortAscending: true,
      columns: [
        DataColumn(
          label: Text('Date'),
        ),
        DataColumn(
          label: Text('Name'),
          //numeric: true,
        ),
        DataColumn(
          label: Text('Status'),
        ),
      ],
      rows: _enquiryRow(context, enquiryData),
    );
  }
}

_dateFormat(DateTime dateTime) {
  String formattedDate = DateFormat('dd/MM/yyyy').format(dateTime);
  return formattedDate;
}

_enquiryRow(BuildContext context, List<EnquiryData> enquiryData) {
  List<DataRow> listOfDataRows = List.generate(
      enquiryData.length,
      (index) => DataRow(
              cells: [
                DataCell(Text(_dateFormat(DateTime.fromMillisecondsSinceEpoch(
                    enquiryData[index].created)))),
                DataCell(Text(enquiryData[index].parentFirstName +
                    ' ' +
                    enquiryData[index].parentLastName)),
                DataCell(Text(enquiryData[index].enquiryStatus)),
              ],
              onSelectChanged: (bool selected) {
                if (selected) {
                  showEnquiryDialog(context, enquiryData[index]);
                }
              }));
  return listOfDataRows;
}