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

Posted

技术标签:

【中文标题】颤振:如何在应用程序开始之前显示对话框?【英文标题】:FLUTTER: How to show dialog before beginning of the app? 【发布时间】:2019-07-03 17:55:35 【问题描述】:

我想在打开应用程序之前显示一个确认警报对话框,有人可以告诉我如何在颤振中实现这一点吗?

showDialog() 方法需要一个上下文,因此我应该将它放在 buildContext 的某个地方,我假设在应用程序的 build 方法中,但是如何在实际布局构建在屏幕上之前触发对话框?

【问题讨论】:

【参考方案1】:

在您的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(),
        );
      

【讨论】:

WidgetsBinding.instance .addPostFrameCallback((_) 不再起作用。***.com/a/54553143/10269042 是的,我也尝试过,但不工作,尝试了另一种方法,如果其他人需要,我会在答案中发布.. UPSS。它适用于我的版本=) 你在哪个版本上? 在最新的稳定颤振版本上。【参考方案2】:

下面的代码有效,我想这就是答案

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

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

【讨论】:

build 方法调用showDialog 不是一个好主意,因为build 可以在整个屏幕生命周期内多次调用。【参考方案3】:

最好的方法,

1.小部件绑定

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

2。调度器绑定

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");
  );

详细说明: https://medium.com/flutterworld/flutter-schedulerbinding-vs-widgetsbinding-149c71cb607f

【讨论】:

以上是关于颤振:如何在应用程序开始之前显示对话框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在前台接收推送通知时显示颤振本地通知?

关闭运行颤振应用程序的浏览器选项卡时,有没有办法显示警告对话框?

如何在 Android 中开始活动之前显示进度对话框?

使用后退按钮颤振测试 WillPopScope

如何在应用程序关闭之前显示未保存的更改对话框? [关闭]

颤振开始标志[重复]