有没有办法重建整个应用程序,包括 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
方法绑定到它
在我的 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
方法绑定到它