问题描述
我有一个计数器变量,每次用户打开页面时它都会递增。第 5 次打开页面时,我想显示一个对话框。所以我在这种情况下使用了 showDialog 。我在函数中使用了 showDialog。并在 if else 简写中使用它。应用程序第 5 次显示以下错误 -
'package:Flutter/src/widgets/navigator.dart':断言失败:第 5253 行 pos 12:'!_debugLocked':不正确。
这是代码-
Future<Widget> _showDialog(BuildContext c) async {
return await showDialog(
context: c,barrierdismissible: false,builder: (c) {
return AlertDialog(
elevation: 24.0,backgroundColor: Colors.blue,title: Text(
'Liking our app?',textAlign: TextAlign.center,style: TextStyle(
fontWeight: FontWeight.bold,color: Colors.white,),actions: <Widget>[
TextButton(
child: Text(
"Continue as Guest",style: TextStyle(
fontWeight: FontWeight.bold,onpressed: () {},TextButton(
child: Text(
"Sign Up",],);
});
}
Text("$_counter",textAlign: TextAlign.center),(_counter == 5) ? _showDialog(context) : SizedBox(),
解决方法
我必须在返回之前添加以下代码行 await showDialog(....);
await Future.delayed(Duration(seconds: 1));
并且使用 Futurebuilder 而不是直接调用函数。
(_counter == 8)
? FutureBuilder<Widget>(
future: _showDialog(context),builder: (context,AsyncSnapshot<Widget> snap) {
if (snap.hasData) {
return snap.data;
} else {
//return CircularProgressIndicator();
return Container(height: 0.0,width: 0.0);
}
})
: Container(
height: 0.0,width: 0.0,),