在 生产模式下 ,有一种方法可以强制应用程序完全重新启动(我 不是 在开发时谈论热重装!)。
实际用例:
在初始化过程中,应用程序检测到没有网络连接。缺乏网络连接性可能阻止了正确的启动(例如,加载外部资源,如JSON文件…)。
在最初的握手期间,需要下载一些重要资源的新版本(更新的种类)。
在这两种用例中,我都希望应用程序完全重启,而不必在ApplicationState级别构建复杂的逻辑。
非常感谢您的提示。
您可以将整个应用程序包装成一个statefulwidget。而且,当您想重新启动应用程序时,请与拥有不同的孩子重建该statefulwidget Key。
Key
这会使您失去整个应用程序状态。
import 'package:flutter/material.dart'; void main() { runApp( RestartWidget( child: MaterialApp(), ), ); } class RestartWidget extends StatefulWidget { RestartWidget({this.child}); final Widget child; static void restartApp(BuildContext context) { context.findAncestorStateOfType<_RestartWidgetState>().restartApp(); } @override _RestartWidgetState createState() => _RestartWidgetState(); } class _RestartWidgetState extends State<RestartWidget> { Key key = UniqueKey(); void restartApp() { setState(() { key = UniqueKey(); }); } @override Widget build(BuildContext context) { return KeyedSubtree( key: key, child: widget.child, ); } }
在此示例中,您可以使用重置您的应用RestartWidget.restartApp(context)。
RestartWidget.restartApp(context)