可以把整个应用包装成一个statfulwidget。想重新启动应用程序时,用拥有不同Key的子组件重新构建statefulwidget。
class RestartWidget extends StatefulWidget {
const RestartWidget({super.key, required 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,
);
}
}
void main() async {
runApp(
const RestartWidget(
child: MyApp(),
),
);
}