flutter 如何在应用程序开始之前显示对话框?

kd3sttzy  于 2023-03-24  发布在  Flutter
关注(0)|答案(3)|浏览(162)

我想在打开应用程序之前显示一个确认警报对话框,有人能告诉我如何在Flutter中实现这一点吗?
showDialog()方法需要一个上下文,因此我应该把它放在buildContext的某个地方,我假设在app的build方法中,但是我如何在屏幕上构建实际布局之前触发对话框?

3z6pesqy

3z6pesqy1#

在你的initState中,你可以添加你的回调函数,它将显示你与WidgetsBinding.instance.addPostFrameCallback的对话框,对话框将在布局后立即显示。你可以根据对话框的结果更新布局状态。

class HomePageState extends State<HomePage> {

      @override
      void initState() {
        super.initState();
        WidgetsBinding.instance
            .addPostFrameCallback((_) => showDialog(...));
      }

      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('HomePage'),
          ),
          body: Container(),
        );
      }
u0njafvf

u0njafvf2#

下面的代码工作,我猜这是答案

@override
  Widget build(BuildContext context) {
    Future.delayed(Duration.zero, () => showAlert(context));
    return new WhateverLayoutYouWantToBeDisplayed();
  }

  void showAlert(BuildContext context) {
    showDialog(
      child: new WhateverCustomDialogYouHave(),
        context: context);   
  }
eyh26e7m

eyh26e7m3#

最好的方法是

1. WidgetsBinding

WidgetsBinding.instance.addPostFrameCallback((_) {
 showDialog();
});

2. SchedulerBinding

SchedulerBinding.instance.addPostFrameCallback((_) {
   showDialog();
 });

WidgetsBinding & SchedulerBinding只会被调用一次,就像我们在initState(),中调用它一样,但是记住,它会在构建方法完成渲染时被调用。

void initState() {
  // TODO: implement initState
  super.initState();
  print("initState");
  WidgetsBinding.instance.addPostFrameCallback((_) {
    print("WidgetsBinding");
  });
  SchedulerBinding.instance.addPostFrameCallback((_) {
    print("SchedulerBinding");
  });
}

相关问题