flutter - appStateManager.addListener(notifyListeners); 是什么?意思是?
问题描述
我正在关注 raywenderlich 的颤振学徒教程(第 7 章https://www.raywenderlich.com/books/flutter-apprentice/v1.0/chapters/7-routes-navigation),但我无法理解对 addListener 的调用(notifyListener) 在下面的代码中表示。具体来说,我认为 addListener 应该接受一个 Listener 对象,但在这里,它接受一个在超类中定义的函数!
class AppRouter extends RouterDelegate
with ChangeNotifier, PopNavigatorRouterDelegateMixin {
// 3
final AppStateManager appStateManager;
// 4
final GroceryManager groceryManager;
final ProfileManager profileManager;
AppRouter({
required this.appStateManager,
required this.groceryManager,
required this.profileManager,
}) : navigatorKey = GlobalKey<NavigatorState>() {
appStateManager.addListener(notifyListeners);
groceryManager.addListener(notifyListeners);
profileManager.addListener(notifyListeners);
}
...
}
知道发生了什么以及它是如何工作的吗?
解决方案
本质上,这些addListener
函数添加了一个监听器,它触发了所提供的函数。所以本质上,每次XXXStateManager
状态改变时,都会触发类中的notifyListeners
方法ChangeNotifier
推荐阅读
- angular - .type() 将不接受空字符串 cypress
- php - Ajax 确认只要求一个数据
- python - 提交 FileField 后文件始终为空
- python - 生成具有不同大小的元组的迭代器对象
- filter - Mapbox GL JS 标记显示/隐藏
- macos - 将 CPLEX 升级到学术许可证 Mac
- python - 在 python 上设置 hebi 机器人
- java - 错误:无法找到或加载主类 sun.applet.AppletViewer。引起:java.lang.ClassNotFoundException:sun.applet.AppletViewer
- c# - Oauth 2.0 | 水疗 | id_token 是如何伪装成 access_token 来访问受限网络资源的?
- git - 根据扩展名将 git repo 文件移动到子文件夹