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
小部件应该很便宜。因此,需要保持相同的密钥并始终创建小部件。它更容易实现。