使用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中添加权限:
针对Android 13+,需在代码中动态申请<uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" />READ_SMS权限,不能仅依赖清单声明。 - iOS:在
ios/Runner/Info.plist中添加权限描述:<key>NSMessagesUsageDescription</key> <string>需要访问短信以读取消息内容</string>
- Android:在
- 重新构建原生项目:
- Android端:进入项目
android目录,执行./gradlew clean,返回根目录后执行flutter run。 - iOS端:进入项目
ios目录,依次执行pod deintegrate、pod install,返回根目录后执行flutter run。
- Android端:进入项目
- 使用真机测试:sms_advanced涉及系统短信权限,模拟器无法提供完整支持,必须使用物理设备运行测试。
- 确认包链接状态:执行
flutter pub get后,检查控制台是否有链接失败提示,特殊情况下可尝试手动执行包链接操作(Flutter通常自动完成,但部分场景需手动干预)。
内容的提问来源于stack exchange,提问作者arMan .96Dev
相关产品推荐
相关产品推荐

