Dart内存模型疑问:多Widget共享REST客户端的引用有效性
你的预期是正确的
Dart中对象是按引用传递的,你传给各个Widget的widget.client并不是复制出的新实例,所有Widget拿到的都是同一个client对象的引用。
当SettingsPage把这个client的token置空后,所有持有该client引用的Widget,访问到的都会是同一个已被清空的token值——你的处理逻辑完全能生效,不用担心client被复制的问题。
举个直白的代码例子:
class ApiClient { String? token; } void main() { final client = ApiClient()..token = 'abc123'; final awesomeWidget = MyAwesomeWidget(client: client); final settingsPage = SettingsPage(client: client); // 模拟SettingsPage清空token settingsPage.client.token = null; print(awesomeWidget.client.token); // 输出 null,和settingsPage操作的是同一个对象 }
额外提醒
只有当你的ApiClient是不可变类(比如所有属性用final修饰,没有提供修改属性的方法)时,才会出现无法修改共享状态的情况,但你的场景里显然是允许修改token的,所以完全不用考虑这种情况。
内容的提问来源于stack exchange,提问作者JPFrancoia
相关产品推荐
相关产品推荐

