我的函数如下:
void function() async {
…
}
我在Widget build(BuildContext context)
中使用了上述函数。
实际上,我希望它是Future<void> function() async
而不是void function() async
。
但是,我不能在Widget build(BuildContext context)
中使用await
,所以我不能使用Future<void> function() async
,因为Future
需要await
。
我不应该使用FutureBuilder
或then
,因为我不想获取函数中的数据,我只想运行函数。
如果有人能提供建议,请表示感谢。提前谢谢!
您可以将函数定义为future&在StatefulWidget
的initState
中调用它(不带await
(
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Future<void> myFutureFunction() async {
// some future work with
}
@override
void initState() {
super.initState();
// this will be called once, when this widget is apear to the screen
myFutureFunction();
}
@override
Widget build(BuildContext context) {
return SizedBox();
}
}
build
方法每秒可以运行60次(对于最新的手机可能会更多(,因此在构建方法中运行任何繁重的计算或API调用都不是一个好主意。它只是用于构建(小部件(。
如果你认为必须重新思考你的应用程序架构,你可能需要重新思考。
考虑block模式,或者只签出有状态小部件的其他生命周期方法。这篇文章列出了他们的名单。
至于这个问题,从技术上讲,异步函数不需要等待它们。您可以直接调用它们,而无需在它们前面添加await
。
如果你有一个警告,它可能来自lint规则。相关规则。