Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Flutter Future builder不断更新_Flutter_Dart_Filter_Future - Fatal编程技术网

Flutter Future builder不断更新

Flutter Future builder不断更新,flutter,dart,filter,future,Flutter,Dart,Filter,Future,我正在使用future builder从快照中获取数据,并将该数据过滤到另一个将来创建标记的函数中。我通过过滤所有餐厅的位置得到结果,但是,功能不断更新,数据只是闪烁 编辑2:JSON数据 {餐厅:[{ id:4, 餐厅名称:良好的化学反应, 电话:1234, 地址:宾夕法尼亚广场2号, 餐厅标志:https://restaurants.s3.amazonaws.com/restaurant_logo/GOODCHEM-3-web_99314.jpg, 餐厅图片:https://restaur

我正在使用future builder从快照中获取数据,并将该数据过滤到另一个将来创建标记的函数中。我通过过滤所有餐厅的位置得到结果,但是,功能不断更新,数据只是闪烁

编辑2:JSON数据

{餐厅:[{ id:4, 餐厅名称:良好的化学反应, 电话:1234, 地址:宾夕法尼亚广场2号, 餐厅标志:https://restaurants.s3.amazonaws.com/restaurant_logo/GOODCHEM-3-web_99314.jpg, 餐厅图片:https://restaurants.s3.amazonaws.com/restaurant_photo/GOODCHEM-3-web_99314.jpg, 城市:纽约, 州:纽约, 邮政编码:10010, 纬度:40.8931283, 液化天然气:-73.8205375, latlng:40.7770112244898,-74.2110798163265, 开放时间:[ { 一周中的第二天:星期二, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期三, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期四, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期五, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期六, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期日, 开放时间:08:00:00, 截止时间:22:00:00 }, { 每周第7天:, 开放时间:08:00:00, 截止时间:22:00:00 } ], 评级:4.1 }, { id:3, 餐厅名称:Farmacy, 电话:1234, 地址:宾夕法尼亚广场11号, 餐厅标志:https://restaurants.s3.amazonaws.com/restaurant_logo/farma.jpg, 餐厅图片:https://restaurants.s3.amazonaws.com/restaurant_photo/farma.jpg, 城市:纽约, 州:纽约, 邮政编码:10010, 纬度:40.8931283, 液化天然气:-73.8205375, latlng:40.7770112244898,-74.2110798163265, 开放时间:[ { 一周中的第二天:星期二, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期三, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期四, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期五, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期六, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期日, 开放时间:08:00:00, 截止时间:22:00:00 }, { 每周第7天:, 开放时间:08:00:00, 截止时间:22:00:00 } ], 评级:4.7 }, { id:2, 餐厅名称:Hoboken Smokin, 电话:123-123-1234, 地址:宾夕法尼亚广场11号, 餐厅标志:https://restaurants.s3.amazonaws.com/restaurant_logo/urban-restaurant-web-1024x640.jpg, 餐厅图片:https://restaurants.s3.amazonaws.com/restaurant_photo/urban-restaurant-web-1024x640.jpg, 城市:纽约, 州:纽约, 邮政编码:10010, 纬度:40.8931283, 液化天然气:-73.8205375, latlng:40.7770112244898,-74.2110798163265, 开放时间:[ { 一周中的第二天:星期二, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期三, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期四, 开放时间:08:00:00, 截止时间:2 2:00:00 }, { 一周中的第二天:星期五, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期六, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期日, 开放时间:08:00:00, 截止时间:22:00:00 }, { 每周第7天:, 开放时间:08:00:00, 截止时间:22:00:00 } ], 评级:3.5 }, { id:1, 餐厅名称:面包店, 电话:1234, 街道地址:第五大道433号, 餐厅标志:https://restaurants.s3.amazonaws.com/restaurant_logo/restaurantimage.jpeg, 餐厅图片:https://restaurants.s3.amazonaws.com/restaurant_photo/restaurantimage.jpeg, 城市:纽约, 州:纽约, 邮政编码:10016, 纬度:40.7512061, 液化天然气:-73.9822721, latlng:40.7770112244898,-74.2110798163265, 开放时间:[ { 一周中的第二天:星期二, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期三, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期四, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期五, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期六, 开放时间:08:00:00, 截止时间:22:00:00 }, { 一周中的第二天:星期日, 开放时间:08:00:00, 截止时间:22:00:00 }, { 每周第7天:, 开放时间:08:00:00, 截止时间:22:00:00 } ], 评级:4.6 } ]
} 如果没有完整的代码片段,就很难判断发生了什么-如果您创建了一个小的工作示例来显示发生了什么,这将更有帮助

然而,我相信有一些事情可能会有所帮助

尽可能停止使用函数构建小部件。如果它足够复杂,需要一个函数来构建它,那么您最有可能在它自己的小部件中构建它。这允许flifter优化不同小部件的构建,并清理代码

现在还不清楚什么是餐厅,但你在未来建筑中引用了它。这样做的好处是_setRestaurants将成为未来,并且只有在新服务器请求完成时才对其进行更改。将_setRestaurants对象视为小部件状态的一部分,并假设当它更改时,小部件将重新生成。这看起来像是:

请注意,我实际上并不建议这样做,这只是为了证明OP可能做错了什么

您可能不应该在客户端过滤数据。想想规模——如果你有50家餐馆,我想这是可持续的,但如果你有1000家,你不能每次都要求全部。相反,您应该向get请求添加参数,并在服务器上进行筛选

将从服务器检索信息的部分和从屏幕上显示餐馆的部分中筛选出来是有意义的。这样,您就可以分离关注点,可以独立地测试服务器部分和UI部分,而且它会更加健壮。有很多不同的方法可以实现这一点,所以我不打算在这里深入讨论,因为这完全超出了这个问题的范围,但请查看MVVM或浏览网站上的一些链接。您还可以使用StreamBuilder和stream而不是futurebuilder,因为这样可以在每次更改数据时(即更改过滤器时)显示更新的结果


嘿,你能添加_setrestaurantsfuture的源代码吗?添加了这个函数也许问题出在你的getRestaurants函数上,我试图获取这个url,heroku说没有这样的应用程序,它是受CSRF保护的。我将使用json输出进行更新
Future<Restaurants> _setRestaurants;

void initState() {
  super.initState();

  _setRestaurants = _getRestaurants();
}

void updateRestaurants() {
  setState(() {
    _setRestaurants = _getRestaurants();
  });
}