我有两个异步函数,一个返回弹出窗口,另一个发出权限请求。我在init方法中调用它们。但它们是同时调用的,即第一个窗口出现,第二个窗口立即出现。我该如何解决这个问题?
class _MyAppState extends State<MyApp> {
final keyIsFirstLoaded = 'is_first_loaded';
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
final context = MyApp.navKey.currentState.overlay.context;
await showDialogIfFirstLoaded(context);
await initPlatformState();
});
}
showDialogIfFirstLoaded(BuildContext context, prefs) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool isFirstLoaded = prefs.getBool(keyIsFirstLoaded);
if (isFirstLoaded == null) {
showDialog(
context: context,
builder: (BuildContext context) {
// return object of type Dialog
return new AlertDialog(
// title: new Text("title"),
content: new Text("//"),
actions: <Widget>[
new FlatButton(
child: new Text(".."),
onPressed: () {
Navigator.of(context).pop();
prefs.setBool(keyIsFirstLoaded, false);
},
),
],
);
},
);
}
}
initPlatformState() async {
print('Initializing...');
await BackgroundLocator.initialize();
print('Initialization done');
final _isRunning = await BackgroundLocator.isRegisterLocationUpdate();
setState(() {
isRunning = _isRunning;
});
onStart();
print('Running ${isRunning.toString()}');
}
将return
添加到showDialog
语句,您不会返回Future
,因此await
不会执行任何
个人建议:始终指定返回类型,因为如果不指定,则会得到dynamic
返回类型。如果您确实指定了它,IDE/dart分析服务器将帮助您解决此类问题。