【问题标题】:Flutter: Do I need to cache widget in onGenerateRouteFlutter:我是否需要在 onGenerateRoute 中缓存小部件
【发布时间】:2018-01-25 10:59:48
【问题描述】:

MaterialApponGenerateRoute 方法中,每次创建Widget 看起来很浪费,路由改变了,Widget 也会失去上下文。这些小部件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,
    );
  }
}

【问题讨论】:

  • 谢谢。看起来直接改变状态比动态路由更好。
  • 视情况而定。您可以使用这两种方法。但是我还没有看到因为创建小部件而导致的任何性能问题。
  • 诀窍似乎是Key。通过提供相同的密钥,即使给出了new 小部件,flutter 也不会重建它。

标签: routing flutter


【解决方案1】:

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

【讨论】:

  • 我明白了。如果 build 方法由于相同的键而从未被调用,那么创建 new 小部件应该很便宜。因此,需要保持相同的密钥并始终创建小部件。实现起来更简单。
猜你喜欢
  • 2020-07-25
  • 1970-01-01
  • 2019-10-26
  • 2010-12-24
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2019-09-09
  • 2021-08-23
相关资源
最近更新 更多