flutter - Flutter异步方法返回小部件不起作用
问题描述
在我的代码中,我想根据条件显示浮动操作按钮。该条件是基于 HTTP 调用评估的,根据 Flutter,该调用本质上是异步的。我下面的代码没有返回任何东西。
Widget _getFAB() {
var Data = GetDetailsFromHTTP();
userJSON.then((Data ) {
if (1 == 2) {
return Container();
} else {
return FloatingActionButton(
backgroundColor: Colors.deepOrange[800],
child: Icon(Icons.add_shopping_cart),
onPressed: null);
}
});
}
Await 也不起作用,因为它不允许将返回类型作为小部件。如何创建一个等待异步调用并返回小部件的方法?
解决方案
您在非异步方法中使用异步方法
Widget _getFAB() async {
var Data = GetDetailsFromHTTP();
return await userJSON.then((Data ) {
if (1 == 2) {
return Container();
} else {
return FloatingActionButton(
backgroundColor: Colors.deepOrange[800],
child: Icon(Icons.add_shopping_cart),
onPressed: null);
}
});
}
最佳方式:更喜欢使用 FutureBuilder,这就是这样做的目的。 https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
举个例子:
FutureBuilder<String>(
future: _calculation, // a previously-obtained Future<String> or null
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return Text('Awaiting result...');
case ConnectionState.done:
if (snapshot.hasError)
return Text('Error: ${snapshot.error}');
return Text('Result: ${snapshot.data}');
}
return null; // unreachable
})
推荐阅读
- tpm - TPM 非易失性内存大小?
- batch-file - 如何删除文本文件中的某些字符和文本?
- sql-server - 具有良好 SQL 的 Reportbuilder 数据集错误?
- python - 为什么我不能正确获取访问课程的列表?
- database - AWS DynamoDB 是否适合数据收集和分析应用程序?
- java - 重载 RequestMappings - Java
- c++ - 带 Mergesort 的 DLL 不断崩溃
- php - 在 Woocommerce 中动态更改特定产品的购物车商品价格和名称
- php - phpmailer 和电子邮件垃圾邮件过滤器的问题
- c# - 从对象数组中删除项目