Flutter: how to force an application restart (in production mode)?

后端 未结 4 1068
無奈伤痛
無奈伤痛 2020-11-28 03:33

In production mode, is there a way to force a full restart of the application (I am not talking about a hot reload at development time!).

P

4条回答
  •  心在旅途
    2020-11-28 04:21

    You could wrap your whole app into a statefulwidget. And when you want to restart you app, rebuild that statefulwidget with a child that possess a different Key.

    This would make you loose the whole state of your app.

    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 {
      Key key = UniqueKey();
    
      void restartApp() {
        setState(() {
          key = UniqueKey();
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return KeyedSubtree(
          key: key,
          child: widget.child,
        );
      }
    }
    

    In this example you can reset your app from everywhere using RestartWidget.restartApp(context).

提交回复
热议问题