Flutter调用WhatsApp报MissingPluginException错误求助
解决Flutter调用WhatsApp时的MissingPluginException错误
一、修复插件配置问题
这个错误的核心是url_launcher插件的原生实现未被正确加载,按以下步骤排查配置:
- 确认
pubspec.yaml中已添加最新版url_launcher依赖:
执行dependencies: flutter: sdk: flutter url_launcher: ^6.2.5 # 可前往pub.dev获取最新版本号flutter pub get拉取依赖。 - Android端配置:在
android/app/src/main/AndroidManifest.xml的<manifest>标签内添加查询权限(Android 11及以上必需):<queries> <package android:name="com.whatsapp" /> <package android:name="com.whatsapp.w4b" /> <!-- 适配WhatsApp Business --> </queries> - iOS端配置:在
ios/Runner/Info.plist中添加允许查询的Scheme:<key>LSApplicationQueriesSchemes</key> <array> <string>whatsapp</string> </array>
二、修正代码中的语法与逻辑错误
你的代码存在两处问题:iOS的URL拼接多了一个冗余右括号,且文本未做URL编码(特殊字符会导致跳转失败)。修正后的完整代码:
void openWhatsapp({ required BuildContext context, required String text, required String number, }) async { final encodedText = Uri.encodeComponent(text); final whatsappUrlAndroid = "whatsapp://send?phone=$number&text=$encodedText"; final whatsappUrlIos = "https://wa.me/$number?text=$encodedText"; if (Platform.isIOS) { if (await canLaunchUrl(Uri.parse(whatsappUrlIos))) { await launchUrl(Uri.parse(whatsappUrlIos)); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("未安装WhatsApp")), ); } } else { if (await canLaunchUrl(Uri.parse(whatsappUrlAndroid))) { await launchUrl(Uri.parse(whatsappUrlAndroid)); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("未安装WhatsApp")), ); } } }
三、强制重新构建项目
热重载/热重启不会加载新的插件原生代码,必须执行以下操作:
- 停止当前运行的应用;
- 执行
flutter clean清理缓存; - 执行
flutter pub get重新拉取依赖; - 重新运行
flutter run。
内容的提问来源于stack exchange,提问作者Chaibou Maikibi Abdoul-Moumoun
相关产品推荐
相关产品推荐

