Flutter:我是否需要在onGenerateRoute中缓存小部件

时间:2017-08-17 06:38:40

标签: routing flutter

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,
    );
  }
}

1 个答案:

答案 0 :(得分:3)

创建新的Widget对象通常应该很便宜。当您的小部件生成不同的渲染对象时,Flutter的小部件框架将负责更新渲染树。如果您的应用程序有很多全局状态,则可以将其存储在模型对象中,然后根据需要将它们传递给窗口小部件。