我正在尝试使用FutureBuilder,但我正在解决一个问题,我的未来被称为但未执行。而且我不明白为什么。有人知道为什么吗?
这是我的代码:
class TesPage extends StatefulWidget {
@override
_TesPageState createState() => _TesPageState();
}
class _TesPageState extends State<TesPage> {
Future<String> future;
Future<String> futureFunction() async {
try {
await text();
return "Test"; // this is never called
} catch (e) {
return e.toString();
}
}
@override
@mustCallSuper
void initState() {
future = futureFunction();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: new FutureBuilder<String>(
future: future,
builder: (BuildContext context, snapshot) {
// returning a widget based on the future
},
),
);
}
}
谢谢!
更新修复我的代码示例
您没有正确等待Future
解决。我建议您通过以下方式:
class TesPage extends StatefulWidget {
@override
_TesPageState createState() => _TesPageState();
}
class _TesPageState extends State<TesPage> {
//Future<String> future;
Future<String> futureFunction() async {
try {
await text();
return "Test"; // this is never called
} catch (e) {
return e.toString();
}
}
//@override
//@mustCallSuper
//void initState() {
// future = futureFunction();
// super.initState();
//}
@override
Widget build(BuildContext context) {
return Scaffold(
body: new FutureBuilder<String>(
future: futureFunction(),
builder: (BuildContext context, snapshot) {
// returning a widget based on the future
},
),
);
}
}
我已经评论了未使用的语句和变量这样FutureBuilder
将调用futureFunction
并等待其结果。
请注意snapshot
可能处于的状态,请检查this以获取完整的信息。
通常,您仅可以检查是否为snapshot.hasData
,但是该类为您提供了有关async
计算状态的更多信息(在这种情况下,也称为futureFunction
。