我有一個 AlertDialog 彈出了幾秒鐘,然后自動彈出而不執行任何操作按鈕。彈出后,會顯示另一個AlertDialog。
我怎么能做到這一點?
這是我的示例代碼:
初始化計時器以顯示第一個對話框:
_timerToShowFirstDialog() async {
var duration = const Duration(seconds: 1);
return Timer(duration, () {
_showFirstDialog();
});
}
第一個對話框:
_showFirstDialog(){
return showDialog<String>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Show Dialog 1'),
content: Text('Wait a sec'),
);
});
}
第二個對話框:
_showSecondDialog(){
return showDialog<String>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Show Dialog 2'),
content: Text('After the first dialog popped up for several seconds, shows this dialog without any action buttons'),
);
});
}
我想在第一個對話框中使用 setState 來呼叫/回傳第二個。但是,我不知道將代碼放在哪里。
我很感激任何答案
uj5u.com熱心網友回復:
試試下面的代碼希望對你有幫助。只需先輕按按鈕然后警報打開第一個警報關閉到 5 秒然后打開第二個警報
參考Future.delayed() 這里
TextButton(
onPressed: () => showDialog(
context: context,
builder: (BuildContext context) {
Future.delayed(Duration(seconds: 5), () {
Navigator.of(context).pop(true);
});
return AlertDialog(
title: const Text('AlertDialog Title'),
content: const Text('AlertDialog description'),
);
}).then((value) {
showDialog(
// Second dialog open
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
Center(child: Text('Welcome')),
Text('Second Dialog')
],
),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context, 'Cancel'),
child: const Text('Cancel'),
),
TextButton(
onPressed: () => Navigator.pop(context, 'OK'),
child: const Text('OK'),
),
],
);
},
);
}),
child: const Text('Show Dialog'),
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366995.html
上一篇:LinearProgressIndicator影片Flutter
下一篇:我總是在FutureBuilder中收到“AsyncSnapshot<String>(ConnectionState.none,null,null,null)”
