在生产模式中,有没有办法强制完全重启应用程序(我不是在谈论开发时的热重载!)。
实际用例:
在初始化过程中,应用程序检测到没有网络连接。缺乏网络连接可能会阻止正确启动(例如,加载 JSON 文件等外部资源......)。
在初始握手期间,需要下载一些重要资源的新版本(更新类型)。
在这两个用例中,我希望应用程序继续完全重启,而不是在 ApplicationState 级别构建复杂的逻辑。
最佳答案
您可以将整个应用程序包装到一个有状态的小部件中。当你想重新启动你的应用程序时,用一个拥有不同 Key
的 child 重建那个 statefulwidget。
这会让你失去应用的整个状态。
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)
从任何地方重置您的应用。
https://stackoverflow.com/questions/50115311/