Routing 我需要在onGenerateRoute中缓存小部件吗
在Routing 我需要在onGenerateRoute中缓存小部件吗,routing,flutter,Routing,Flutter,在MaterialApp中的ongeneraterout方法中,每次创建小部件看起来都很浪费,路线改变了,小部件也会失去上下文。这些小部件newdesktop(sugar)应该被缓存和重用吗 class AppComponentState extends State<AppComponent> implements SugarBuilder { Sugar sugar; _getRoute(RouteSettings settings) { final List&l
MaterialApp
中的ongeneraterout
方法中,每次创建小部件看起来都很浪费,路线改变了,小部件也会失去上下文。这些小部件newdesktop(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,
);
}
}
类AppComponentState扩展状态实现SugarBuilder{
糖;
_getRoute(路由设置){
最终列表路径=settings.name.split('/');
如果(路径[0]!='')返回null;
如果(路径[1]=“糖”){
如果(sugar==null){
返回Navigator.pushNamed(上下文“/login”);
}否则{
如果(路径[2]=“模块”){
返回新的ModulePage(sugar);//需要缓存吗?
}否则{
返回新桌面(sugar);//需要缓存吗?
}
}
}
返回null;
}
小部件构建(构建上下文){
返回新材料PP(
...
onGenerateRoute:_getRoute,
);
}
}
创建新的小部件对象通常应该很便宜。当您的小部件生成不同的渲染对象时,Flatter的小部件框架将负责更新渲染树。如果你的应用程序有很多全局状态,你可以将其存储在模型对象中,然后根据需要将它们传递给小部件。创建新的小部件对象通常应该很便宜。当您的小部件生成不同的渲染对象时,Flatter的小部件框架将负责更新渲染树。如果你的应用程序有很多全局状态,你可以将其存储在模型对象中,然后根据需要将它们传递给小部件。Duplicate Thx。看起来直接改变状态比动态路由更好。这取决于。您可以使用这两种方法。但是我还没有看到由于创建小部件而产生的任何性能问题。通过给出相同的键,颤振不会重建它,即使给出了new
widget。重复Thx。看起来直接改变状态比动态路由更好。这取决于。您可以使用这两种方法。但是我还没有看到由于创建小部件而产生的任何性能问题。通过给出相同的键,颤振不会重建它,即使给出了new
小部件。我明白了。如果由于同一个键而从未调用build
方法,那么创建new
小部件应该很便宜。因此,需要保持相同的密钥并始终创建小部件。我明白了,它更容易实现。如果由于同一个键而从未调用build
方法,那么创建new
小部件应该很便宜。因此,需要保持相同的密钥并始终创建小部件。它更容易实现。