You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:19:56