警报对话中的值未更新,警报对话未关闭Flutter

  • 本文关键字:对话 Flutter 更新 flutter alert
  • 更新时间 :
  • 英文 :


我是Flutter的新手,我正在构建一个应用程序,该应用程序需要一个包含值的警报对话框,该值会在每秒更新一次。但在我的案例中,价值并没有更新,即使是警惕的对话也不会自行结束。

Timer.periodic(Duration(milliseconds: 10), (timer) {
BuildContext dialoguecontext;
if ((stopwatch.elapsedMilliseconds / 6000) >= 1) {
stopwatch.stop();
assetsAudioPlayer.stop();
showDialog(
context: context,
builder: (BuildContext context) {
dialoguecontext = context;
return Dialog(
child:
new Text('Break Time Left : ${breakTime} s'),
);
},
);
while(breakTime > 0)
{
Future.delayed(Duration(seconds: 1));
setState(() {
breakTime--;
});
}
breakTime = 40;
Navigator.pop(dialoguecontext);
++imgnumber;
assetsAudioPlayer.next();
stopwatch.start();
}
});

如何使此代码正常工作?

在showDialog中,您不能更改任何值。

以下内容来自官方文件。

生成器返回的小部件与showDialog最初调用的位置使用StatefulBuilder或自定义StatefulWidget(如果对话框需要(动态更新

因此,您必须使用Stateful小部件。

遵循最低限度的代码可以帮助您了解更多信息。

class _DeleteWidgetState extends State<DeleteWidget> {
int t = 10;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
child: Text("Press"),
onPressed: () {
showDialog(
context: context,
builder: (_) {
return NewWidget(t);
});
},
),
),
);
}
}
class NewWidget extends StatefulWidget {
final int t;
NewWidget(this.t);
@override
_NewWidgetState createState() => _NewWidgetState();
}
class _NewWidgetState extends State<NewWidget> {
int newt;
@override
void initState() {
super.initState();
newt = widget.t;
}
@override
Widget build(BuildContext context) {
return Center(
child: RaisedButton(
child: Text(newt.toString()),
onPressed: () {
setState(() {
newt = newt + 1;
});
},
),
);
}
}

最新更新