【发布时间】:2018-01-25 10:59:48
【问题描述】:
在MaterialApp 的onGenerateRoute 方法中,每次创建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 也不会重建它。