我在 flutter InheritedWidget / InheritedModel 中的代码实现是推荐的。不过我有一个小问题。
假设我有一个继承的Widget MyInheritedWidget,它包含一些反应数据。访问该数据的最佳方式是什么?
Widget build(BuildContext context) {
MyData data= MyInheritedWidget.of(context).someData;
return ExampleWidget(
//Using the data here
data : data.someData.data,
moreData : data.moreData
sameData:data.someData.data,
);
Run Code Online (Sandbox Code Playgroud)
或者
Widget build(BuildContext context) {
return ExampleWidget(
//Using the data here
data : MyInheritedWidget.of(context).someData.data,
moreData : MyInheritedWidget.of(context).someData.moreData
sameData: MyInheritedWidget.of(context).someData.data,
);
Run Code Online (Sandbox Code Playgroud)
我知道我们调用context.dependOnInheritedWidgetOfExactType<MyInheritedWidget>();并将上下文订阅到数据,因此当它更改时会重建。我们不是通过调用 MyInheritedWidget.of(context) 进行多次订阅吗?还是性能是一样的?我认为 flutter 团队足够聪明,只订阅一次,如果我们订阅就返回数据。但是哪种方法对性能更好?
这不是关于可读性,而是关于性能。因为我可以轻松地使用 BuildContext 中的扩展来转换MyInheritedWidget.of(context).someData为context.someData.
Inherited.of(context) 相对等价于:
Map<Type, Inherited> ancestors;
return ancestors[context.widget.runtimeType];
Run Code Online (Sandbox Code Playgroud)
因此,在同一个小部件中多次读取 InheritedWidget 并不是真正的问题。
但是在变量中提取它的值很可能会稍微快一点,因为读取 Map 比仅读取变量慢。
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |