在onGenerateRoute
中的MaterialApp
方法中,每次创建窗口小部件,路由更改以及窗口小部件也将丢失上下文看起来都很浪费。这些小部件new Desktop(sugar)
是否应该被缓存并重用?
class AppComponentState extends State<AppComponent> implements SugarBuilder {
Sugar sugar;
_getRoute(RouteSettings settings) {
final List<String> path = settings.name.split('/');
if (path[0] != '') return null;
if (path[1] == 'sugar') {
if (sugar == null) {
return Navigator.pushNamed(context, '/login');
} else {
if (path[2] == 'module') {
return new ModulePage(sugar); // need to cache?
} else {
return new Desktop(sugar); // need to cache?
}
}
}
return null;
}
Widget build(BuildContext context) {
return new MaterialApp(
...
onGenerateRoute: _getRoute,
);
}
}
答案 0 :(得分:3)
创建新的Widget对象通常应该很便宜。当您的小部件生成不同的渲染对象时,Flutter的小部件框架将负责更新渲染树。如果您的应用程序有很多全局状态,则可以将其存储在模型对象中,然后根据需要将它们传递给窗口小部件。