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

使用Flutter sms_advanced包时遭遇MissingPluginException错误求助

解决sms_advanced包的MissingPluginException(getInbox方法未实现)问题

问题描述

使用sms_advanced包读取短信时,抛出异常:

Unhandled Exception: MissingPluginException(No implementation found for method getInbox on channel plugins.elyudde.com/querySMS)

使用的示例代码如下:

import 'package:flutter/material.dart';
import 'package:sms_advanced/sms_advanced.dart';

class SmsAdvancedPackage extends StatefulWidget {
  const SmsAdvancedPackage({super.key});

  @override
  State<SmsAdvancedPackage> createState() => _SmsAdvancedPackageState();
}

class _SmsAdvancedPackageState extends State<SmsAdvancedPackage> {
  final SmsQuery query = SmsQuery();
  List<SmsThread> threads = [];
  List<SmsMessage> messages = [];

  Future<void> updateMessages() async {
    messages = await query.querySms();
  }

  @override
  void initState() {
    super.initState();
    query.querySms().then((value) {
      messages = value;
      print(value);
      setState(() {});
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Container(
            height: 250,
            child: ListView.builder(
                itemCount: messages.length,
                itemBuilder: (BuildContext context, int index) {
                  return Column(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      ListTile(
                        minVerticalPadding: 8,
                        minLeadingWidth: 4,
                        title: Container(
                            decoration:
                                BoxDecoration(border: Border.all(width: 3)),
                            child: Text(messages[index].body ?? 'empty')),
                        subtitle:
                            Text(messages[index].date.toString() ?? 'empty'),
                      ),
                      const Divider(),
                    ],
                  );
                }),
          ),
          ElevatedButton(
              onPressed: () => updateMessages(),
              child: Text(
                'Update Messages',
                style: TextStyle(color: Colors.black, fontSize: 24),
              ))
        ],
      ),
    );
  }
}

已尝试flutter clean、重启应用、清理缓存等操作,问题仍未解决。

解决方案

  • 检查版本兼容性:确认sms_advanced版本与当前Flutter SDK版本匹配,部分旧版包可能不兼容新Flutter版本,尝试升级或降级至稳定兼容版本。
  • 完善平台权限配置:
    • Android:在android/app/src/main/AndroidManifest.xml中添加权限:
      <uses-permission android:name="android.permission.READ_SMS" />
      <uses-permission android:name="android.permission.RECEIVE_SMS" />
      
      针对Android 13+,需在代码中动态申请READ_SMS权限,不能仅依赖清单声明。
    • iOS:在ios/Runner/Info.plist中添加权限描述:
      <key>NSMessagesUsageDescription</key>
      <string>需要访问短信以读取消息内容</string>
      
  • 重新构建原生项目:
    • Android端:进入项目android目录,执行./gradlew clean,返回根目录后执行flutter run。
    • iOS端:进入项目ios目录,依次执行pod deintegrate、pod install,返回根目录后执行flutter run。
  • 使用真机测试:sms_advanced涉及系统短信权限,模拟器无法提供完整支持,必须使用物理设备运行测试。
  • 确认包链接状态:执行flutter pub get后,检查控制台是否有链接失败提示,特殊情况下可尝试手动执行包链接操作(Flutter通常自动完成,但部分场景需手动干预)。

内容的提问来源于stack exchange,提问作者arMan .96Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:06:31