有没有办法重建整个应用程序,包括 flutter 项目中的 const 小部件?

Is there a way to rebuild the whole app include const widgets in flutter project?

在我的 Flutter 项目中,为了提高性能,我创建了许多 const 个小部件,这些小部件不会在其父小部件重建时重建。

但是在用户更改应用程序的语言后,我需要重建整个应用程序以应用文本更改。

有没有办法强制应用完全重建?谢谢,如有任何建议,我们将不胜感激。

是的,有办法做到。你必须在代码中完全重启(现在称为热重启),方法是将你的应用程序放在静态小部件中(为什么是静态的?因为它会被创建一次只是为了避免 null 或类似的东西那)。当你想完全重启时,只需在该小部件中执行热重载,之后它就会重启你的应用程序。你可以在任何地方使用它

方法如下:

1- 首先在 main.dart 中,将您的应用程序放入重启小部件中:

import 'package:flutter/material.dart';
import 'home.dart';

void main() {
  runApp(new HotRestartController(
    child: new MyApp()
  ));
}

2- 在文件中写入你的 hotRestartController :

class HotRestartController extends StatefulWidget {
  final Widget child;

  HotRestartController({this.child});

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

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

class _HotRestartControllerState extends State<HotRestartController> {
  Key key = new UniqueKey();

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

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

3- 您可以随时随地导入 main.dart,然后调用 "performHotRestart" 使用:

HotRestartController.restartApp(context)

玩得开心!

'Inheritedwidget` 是一种在传递值更改时重绘任何小部件的解决方案。甚至是无状态和常量小部件。

例如,对于翻译,flutter 已经提供了一个 InheritedWidget,您可以使用 Localizations.of 方法绑定到它