我已经构建了一个FutureBuilder来检查Future,然后基于该重定向,但是由于它是FutureBuilder,因此我必须将屏幕未路由返回给他们。 有人可以分享如何在没有FutureBuilder的情况下收听一堆期货的例子,所以我可以使用动画路由而不是虚拟收益。
FutureBuilder(
future: Future.wait([
firstFuture(),
secondFuture(),
]),
builder: (
context,
AsyncSnapshot<List<bool>> snapshot,
){
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
// If all future passed return home.
if (snapshot.data[0] && snapshot.data[1])
// Instead I want: MaterialPageRoute(builder: (_) => HomeScreen());
return HomeScreen();
// Instead I want: MaterialPageRoute(builder: (_) => permissionsScreen());
return permissionsScreen();
}
);
答案 0 :(得分:0)
根据pskink的建议,我实现了此代码,该代码将循环运行并等待一堆Future完成,然后路由或执行任何没有FutureBuilder的操作
//.. inside a StatfulWidget or whatever...
// Loop thru Dependencies List(Futures) and make sure all are loaded(finished).
Future<bool> loadDependencies(List<Future<bool>> dependenciesList) async {
bool isAllDone = true;
// Load dependencies.
for (Future<bool> dependency in dependenciesList) {
bool currentDep = await dependency;
isAllDone = isAllDone && currentDep;
if (!isAllDone) return false; // Break if any failed.
}
return isAllDone;
}
然后调用它,这是一个示例:
//.. inside a StatfulWidget
// Define App's Dependencies List.
final List<Future<bool>> dependenciesList = [
someBloc.fetchData(),
];
@override
void initState() {
super.initState();
// Load dependencies then route once done.
loadDependenciesAndRoute();
}
void loadDependenciesAndRoute() async {
bool loadingStatus = await loadDependencies(dependenciesList);
if (loadingStatus) {
// As Context is not ready inside initState, routing using navigatorKey.
await AppKeys.navigatorKey.currentState.push(
Routes.home(),
);
} else {
await AppKeys.navigatorKey.currentState.push(
Routes.onLoading(),
);
}
}