AVE*_*imi 1 user-interface lifecycle flutter
在我的 Flutter 应用程序中,我有很多弹出对话框,但是当应用程序进入后台(用户切换到另一个应用程序)时,我需要关闭任何打开的对话框。
我知道 Lifecycle,但要为所有对话框实现它并不容易。
你试过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)