如何解决FutureBuilder 不会等到未来完成
在我的应用程序中,我想在创建小部件之前初始化一些东西。我需要在 App
类中完全做到这一点,并为此目的尝试使用 FutureBuilder。但是,例如,_AppBlocProvider
的 build
方法是在 initInjectionContainer()
之前调用的。我的存储库尚未在 injectionContainer 中初始化,但提供程序中的 Blocs 正在尝试访问它的实例。这段代码有什么问题?
https://docs.microsoft.com/en-us/office/vba/api/word.captionlabels
我也试过这个:
void main() {
runApp(App());
}
class App extends StatefulWidget {
@override
_AppState createState() => _AppState();
}
class _AppState extends State<App> {
Future<bool>? _myFuture;
Future<bool> _init() async {
...
await initInjectionContainer();
await sl<AudioManager>().preloadFiles();
return false;
}
...
@override
void initState() {
super.initState();
_myFuture = _init();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _myFuture,builder: (context,_) {
return _BlocProvider(
child: Builder(
builder: (context) => MaterialApp(
title: 'Flutter Demo',theme: ThemeData(
primarySwatch: Colors.blue,),home: MainMenu(),);
},);
}
}
不起作用。
解决方法
from itertools import product
i = 1
file_number = 0
numbers = ["0","1","2","3","4","5","6","7","8","9"]
characters = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
f = open("D:\wordlist" + str(file_number) + ".txt","w+")
for a in product(characters,repeat=3):
for b in product(numbers,repeat=2):
for c in product(characters,repeat=3):
word = "".join(a + b + c)
f.write(word+"\n")
i += 1
print(str(i)+"."+word)
if i > 13824:
f.close()
file_number += 1
f = open("D:\wordlist" + str(file_number) + ".txt","w+")
i = 1
continue
f.close()
不只是自动阻止或显示加载屏幕或其他任何内容。它在初始化时构建一次,然后在未来完成后再次构建。您匿名的构建器中的第二个参数对于正确处理未来的状态并相应地构建至关重要。
FutureBuilder
话虽如此,如果您的整个应用程序需要初始化某些内容,您可以在调用 FutureBuilder(
future: _someFuture(),builder: (context,snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
// Future not done,return a temporary loading widget
return CircularProgressIndicator();
}
// Future is done,handle it properly
return ...
},),
之前从 main
调用它,以便它们成为运行时加载的一部分处理而不是强制小部件处理它:
runApp
现在说,如果这些过程可能需要一段时间,最好使用小部件处理它们,以便您可以向用户显示加载状态,以便他们知道应用程序没有' t 只是在启动时冻结。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。