简体   繁体   English

当应用程序进入后台时,如何关闭 Flutter 应用程序中任何打开的对话框

[英]How to dismiss any open dialog in Flutter app, when app goes to background

In my Flutter app I have lots of pop up dialogs, but I need to dismiss any open dialog when app goes to background (user switches to another app).在我的 Flutter 应用程序中,我有很多弹出对话框,但是当应用程序进入后台(用户切换到另一个应用程序)时,我需要关闭任何打开的对话框。

I know about Lifecycle, but it's not easy to implement it for all dialogs.我知道 Lifecycle,但要为所有对话框实现它并不容易。

Did you try Navigator.popUntil on the life cycle?.你在生命周期中尝试过Navigator.popUntil吗?

Navigator.popUntil(context, (route) => !(route is PopupRoute));

Example:例子:

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(home: HomePage()));

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> with WidgetsBindingObserver {
  @override
  void initState() {
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }

  void _showDialogs() {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(title: Text("Dialog 1")),
    );
    showDialog(
      context: context,
      builder: (context) => AlertDialog(title: Text("Dialog 2")),
    );
    showDialog(
      context: context,
      builder: (context) => AlertDialog(title: Text("Dialog 3")),
    );
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(
          child: Text("show multiple dialogs"),
          onPressed: _showDialogs,
        ),
      ),
    );
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.paused)
      Navigator.popUntil(context, (route) => !(route is PopupRoute));
  }
}
Navigator.of(context,rootNavigator:true).pop();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当我的应用程序进入后台然后又返回时,如何在我的Android应用程序中关闭Google帐户选择器屏幕 - How to dismiss Google account chooser screen in my android app when my app goes to background and then comes back 如何在我的 Flutter 应用程序中添加渐变背景? - How do I add a gradient background in my flutter app? 如何使对话框(或视图或其他)位于任何应用程序页面的前面? - how to make a dialog(or a view or something else) lie in front of the page of any app? Flutter 中带有描边圆形背景的对话框 - Dialog with stroked round background in Flutter 如何在AppleScript中抑制/自动关闭错误对话框 - How to suppress / automatically dismiss error dialog in AppleScript 当应用程序返回前台时删除任何弹出窗口 - Removing any popover when app returns to foreground 从任何活动打开侧边栏应用启动器 - Open Side bar app launcher from any activity 如何在颤振中创建渐变条应用栏? - How to create a gradient sliver app bar in flutter? 如何使 Flutter 应用 UI 响应不同的屏幕尺寸 [Flutter]? - How to make flutter app UI responsive for different screen sizes [Flutter]? 如何永久更改应用程序的背景颜色 - How to change background color of app permanently
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM