- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设我有这样的事情:
return FutureBuilder(
future: _loadingDeals,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return RefreshIndicator(
onRefresh: _handleRefresh,
...
)
}
)
在 _handleRefresh
方法中,我想以编程方式触发 FutureBuilder 的重新运行。
有这种事吗?
用例:
当用户拉下 refreshIndicator
时,_handleRefresh
只会让 FutureBuilder
重新运行。
编辑:
完整的代码片段端到端,没有刷新部分。我已经切换到使用 StreamBuilder
,refreshIndicator
部分如何适应所有这些?
class DealList extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _DealList();
}
class _DealList extends State<DealList> with AutomaticKeepAliveClientMixin {
// prevents refreshing of tab when switch to
// Why? https://stackoverflow.com/q/51224420/1757321
bool get wantKeepAlive => true;
final RestDatasource api = new RestDatasource();
String token;
StreamController _dealsController;
@override
void initState() {
super.initState();
_dealsController = new StreamController();
_loadingDeals();
}
_loadingDeals() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
this.token = prefs.getString('token');
final res =
this.api.checkInterests(this.token).then((interestResponse) async {
_dealsController.add(interestResponse);
return interestResponse;
});
return res;
}
_handleRefresh(data) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final token = prefs.getString('token');
await this.api.checkInterests(token).then((interestResponse) {
_dealsController.add(interestResponse);
});
return null;
}
@override
Widget build(BuildContext context) {
super.build(context); // <-- this is with the wantKeepAlive thing
return StreamBuilder(
stream: _dealsController.stream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError) {
...
}
if (snapshot.connectionState != ConnectionState.done) {
return Center(
child: CircularProgressIndicator(),
);
}
if (!snapshot.hasData &&
snapshot.connectionState == ConnectionState.done) {
return Text('No deals');
}
if (snapshot.hasData) {
return ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
itemCount: snapshot.data['deals'].length,
itemBuilder: (context, index) {
final Map deal = snapshot.data['deals'][index];
return ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DealsDetailPage(
dealDetail: deal,
),
),
);
},
title: Text(deal['name']),
subtitle: Text(deal['expires']),
);
},
),
}
},
);
}
}
最佳答案
为什么不使用 StreamBuilder 和 Stream 而不是 FutureBuilder?
类似的...
class _YourWidgetState extends State<YourWidget> {
StreamController<String> _refreshController;
...
initState() {
super...
_refreshController = new StreamController<String>();
_loadingDeals();
}
_loadingDeals() {
_refreshController.add("");
}
_handleRefresh(data) {
if (x) _refreshController.add("");
}
...
build(context) {
...
return StreamBuilder(
stream: _refreshController.stream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return RefreshIndicator(
onRefresh: _handleRefresh(snapshot.data),
...
)
}
);
}
}
我使用 StreamBuilder 创建了一个带有 Flutter 主要示例的 Gist,check it out
关于dart - Flutter 以编程方式触发 FutureBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51663378/
假设我从不同的 Url 获取不同的列表所以 Future 函数看起来像这样 Future> getCityDetails(Region selectedRegion) async {} Future>
我正在为用户列表使用 FuturBuilder。我通过 futur: fetchpost() 通过 API 获取用户。在专栏的开头,我实现了一个搜索栏。那么我该如何实现我的搜索栏正在搜索呢? Cont
我必须为屏幕的不同类型的类别构建多个 future builder ,例如:每周交易、全部、新到货等。我现在的代码非常准系统,但在这里。 +主屏幕 import 'package:flutter/ma
当我向下滚动时接近屏幕末尾时,我正在尝试更新我的 Thread 对象列表(以在我继续向下滚动时显示无限的项目列表) 我目前的设置如下: import 'package:flutter/material
用例: FutureBuilder 加载数据并构建小部件* 我按下一个按钮 → 我改变页面/屏幕 我按一个按钮回到 futureBuilder 的屏幕 问题:futureBuilder 是否重新加载数
文章Fetch data from the internet显示了 FutureBuilder 的以下代码片段处理快照。 FutureBuilder( future: post, builde
我的futurebuilder 在屏幕上显示错误几秒钟,然后显示结果这是错误日志: The following NoSuchMethodError was thrown building Future
我正在使用Future构建器从快照中获取数据并将其过滤到另一个创建标记的Future函数中。我通过过滤所有餐厅的位置获得了结果,但是该功能会不断更新,并且数据只会闪烁。 编辑2:JSON数据
当应用程序使用 Future 初始化时我从远程 JSON 获取数据文件。 而不是 return -在 widget当FutureBuilder有数据,我想导航到新屏幕。 我现在使用的方式: @over
我无法让FutureBuilder显示我的计算中的任何数据。我知道计算绝对正确,因为我可以得到正确的答案以打印到控制台中,但似乎无法使其显示在应用程序本身中。 这是代码的代码: Future get
我想显示一个在按下按钮时调用 api 检索到的对象。 我想在按下 floatingActionButton 时更新 FutureBuilder 小部件: class PostScreen ex
在我作为新屏幕的简单代码中,不幸的是 FutureBuilder 工作并从方法中获取数据两次!! 我不确定是什么问题,我该如何避免 class LessonDetail extends Statefu
我想显示一个在按下按钮时调用 api 检索到的对象。 我想在按下 floatingActionButton 时更新 FutureBuilder 小部件: class PostScreen ex
在我作为新屏幕的简单代码中,不幸的是 FutureBuilder 工作并从方法中获取数据两次!! 我不确定是什么问题,我该如何避免 class LessonDetail extends Statefu
我正在尝试查找离我当前位置最近的人。所以我正在从 firestore 中获取所有文档。 我的firestore结构是这样的, 所以我正在获取所有用户并通过计算距离来检查最近的用户,我想将过滤后的数据传
我试图在加载 Future Builder 中的数据时显示循环进度指示器,我尝试了两种方法来添加它,但是它们都不起作用。我怎样才能达到预期的结果? 我的代码 class _MyHomePageStat
当我更改特定 futurebuilder 小部件所依赖的状态时,在异步任务完成之前不会重新绘制小部件。我希望在状态改变后立即重绘小部件。下面是 futurebuilder 的代码: child: ne
我正在从这里获取 json:https://api.myjson.com/bins/1g3xpe ,在我的 flutter 应用程序中。 这是代码(我已经删除了不相关的部分)。问题是,FutureBu
我想知道什么时候应该使用 future builder。例如,如果我想发出一个 http 请求并在 ListView 中显示结果,一旦你打开 View ,我应该使用 future builder 还是
我想测试一个具有 Future 构建器的函数。函数是: Widget loadWidget() { return new FutureBuilder(
我是一名优秀的程序员,十分优秀!