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
相关产品推荐
相关产品推荐

