加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 14:55:44 所属栏目:百科 来源:网络整理
导读:在生产模式中,有没有办法强制完全重启应用程序(我不是在讨论开发时的热重载!). 实际使用案例: 在初始化过程中,应用程序检测到没有网络连接.缺乏网络连接可能阻止了正确的启动(例如加载外部资源,如JSON文件……). 在初始握手期间,需要下载一些重要资源的新
在生产模式中,有没有办法强制完全重启应用程序(我不是在讨论开发时的热重载!).

实际使用案例:

>在初始化过程中,应用程序检测到没有网络连接.缺乏网络连接可能阻止了正确的启动(例如加载外部资源,如JSON文件……).
>在初始握手期间,需要下载一些重要资源的新版本(更新类型).

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

非常感谢您的提示.

解决方法

您可以将整个应用程序包装到statefulwidget中.当您想重新启动应用程序时,请使用具有不同密钥的子项重建该statefulwidget.

这会让你失去你的应用程序的整个状态.

import 'package:flutter/material.dart';

void main() {
  runApp(new RestartWidget(
    child: // new MaterialApp,));
}

class RestartWidget extends StatefulWidget {
  final Widget child;

  RestartWidget({this.child});

  static restartApp(BuildContext context) {
    final _RestartWidgetState state =
        context.ancestorStateOfType(const TypeMatcher<_RestartWidgetState>());
    state.restartApp();
  }

  @override
  _RestartWidgetState createState() => new _RestartWidgetState();
}

class _RestartWidgetState extends State<RestartWidget> {
  Key key = new UniqueKey();

  void restartApp() {
    this.setState(() {
      key = new UniqueKey();
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Container(
      key: key,child: widget.child,);
  }
}

在此示例中,您可以使用RestartWidget.restartApp(context)从任何位置重置您的应用程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读