一尘不染

Flutter:如何强制应用程序重新启动(在生产模式下)?

flutter

生产模式下 ,有一种方法可以强制应用程序完全重新启动(我 不是 在开发时谈论热重装!)。

实际用例:

  • 在初始化过程中,应用程序检测到没有网络连接。缺乏网络连接性可能阻止了正确的启动(例如,加载外部资源,如JSON文件…)。

  • 在最初的握手期间,需要下载一些重要资源的新版本(更新的种类)。

在这两种用例中,我都希望应用程序完全重启,而不必在ApplicationState级别构建复杂的逻辑。

非常感谢您的提示。


阅读 1237

收藏
2020-08-13

共1个答案

一尘不染

您可以将整个应用程序包装成一个statefulwidget。而且,当您想重新启动应用程序时,请与拥有不同的孩子重建该statefulwidget
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)

2020-08-13