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

AVE*_*imi 1 user-interface lifecycle flutter

在我的 Flutter 应用程序中,我有很多弹出对话框,但是当应用程序进入后台(用户切换到另一个应用程序)时,我需要关闭任何打开的对话框。

我知道 Lifecycle,但要为所有对话框实现它并不容易。

Cra*_*Cat 5

你试过Navigator.popUntil生命周期吗?

Navigator.popUntil(context, (route) => !(route is PopupRoute));
Run Code Online (Sandbox Code Playgroud)

例子:

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));
  }
}
Run Code Online (Sandbox Code Playgroud)