对于数据的跨层传递
方案:属性传递、InheritedWidget、Notification 和 EventBus
还有个Provider
总结
首先, InheritedWidget。对于视图层级比较深的 UI 样式,直接通过属性传值的方式会导致很多中间层增加冗余属性,而使用 InheritedWidget 可以实现子 Widget 跨层共享父 Widget 的属性。需要注意的是,InheritedWidget 中的属性在子 Widget 中只能读,如果有修改的场景,我们需要把它和 StatefulWidget 中的 State 配套使用。
然后, Notification,这种由下到上传递数据的跨层共享机制。我们可以使用 NotificationListener,在父 Widget 监听来自子 Widget 的事件。
最后, EventBus,这种无需发布者与订阅者之间存在父子关系的数据同步机制。
https://pub.dev/packages/event_bus#-readme-tab-
属性传值、InheritedWidget、Notification 与 EventBus 数据传递方式对比
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JkDQV1xJ-1582964880202)(file:///var/folders/m8/5bhg6xs121j8xyl7c4ws3r540000gn/T/WizNote/78dc5d18-2adb-4ca8-aac1-252e30cea7a9/index_files/5a8621a5-8e62-46f5-aa74-4c7dff4f36bf.png)]](https://i-blog.csdnimg.cn/blog_migrate/02506f500d9316ab4e185e85ce2911f6.png)
本文探讨了在Flutter中实现跨层数据传递的多种方法,包括属性传递、InheritedWidget、Notification与EventBus,以及Provider的使用。InheritedWidget适用于UI样式跨层共享,Notification适合从下到上的事件传递,EventBus则用于无父子关系的数据同步。
2138

被折叠的 条评论
为什么被折叠?



