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

生产模式中,有没有办法强制完全重启应用程序(我不是在谈论开发时的热重载!)。

实际用例:

  • 在初始化过程中,应用程序检测到没有网络连接。缺乏网络连接可能会阻止正确启动(例如,加载 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/

相关文章:

flutter - BuildContext 在 Flutter 中做了什么?

flutter - Flutter 中的 BottomNavigationBar 样式

flutter - Flutter中的primaryColor和primarySwatch有什么区别

flutter - 如何将一列小部件紧紧包裹在卡片内?

android - 在 flutter 应用程序中添加日期选择器的正确方法是什么?

dart - Flutter:设置AppBar的高度

flutter - 在 dispose() 之后调用 setState()

android - Flutter 找不到 android sdk

flutter - 如何在 Flutter 中添加图片

dart - flutter : Bad state: Stream has already bee