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

Flutter:如何将Telephony包返回的字符串值全局化并静态访问?

实现可静态访问的全局短信发送者地址

方案1:用全局静态类存储(推荐,结构更清晰)

创建一个专门的全局类,通过静态变量保存短信发送者地址,在短信回调里更新这个变量:

// 全局类,用于存储可静态访问的短信发送者地址
class SmsGlobalData {
  static String? senderAddress;
}

void tel() {
  telephony.listenIncomingSms(
    onNewMessage: (SmsMessage message) {
      // 把短信发送者地址赋值给全局静态变量
      SmsGlobalData.senderAddress = message.address.toString();
    },
    onBackgroundMessage: backgrounMessageHandler,
    listenInBackground: true,
  );
}

之后在项目任意位置,直接通过类名访问这个静态变量即可:

// 示例:在其他函数中获取并使用全局地址
void useSenderAddress() {
  if (SmsGlobalData.senderAddress != null) {
    print("当前收到的短信发送者:${SmsGlobalData.senderAddress}");
  }
}

方案2:直接声明全局静态变量(简洁但缺乏封装)

如果不需要类的封装,也可以直接在全局作用域声明静态变量:

// 全局静态变量,存储短信发送者地址
static String? globalSenderAddress;

void tel() {
  telephony.listenIncomingSms(
    onNewMessage: (SmsMessage message) {
      globalSenderAddress = message.address.toString();
    },
    onBackgroundMessage: backgrounMessageHandler,
    listenInBackground: true,
  );
}

注意事项

  • 短信回调是异步触发的,访问全局变量时务必先判空,避免空指针异常。
  • 开启listenInBackground: true后,要确保已配置好对应平台的后台权限(比如Android的后台运行权限、iOS的通知权限),否则后台收到短信时可能无法更新全局变量。

内容的提问来源于stack exchange,提问作者Law Studies

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:10:32