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

Flutter使用just_audio时触发connectivity插件MissingPluginException问题排查

问题分析:Flutter点击播放按钮触发MissingPluginException异常

问题场景

集成just_audio的Flutter组件中,点击播放按钮时抛出异常,错误核心为connectivity插件的check方法无对应实现。

实现代码

// ignore_for_file: library_private_types_in_public_api, avoid_print

import 'package:connectivity/connectivity.dart';
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
import 'package:fluttertoast/fluttertoast.dart';

class HymnTune extends StatefulWidget {
  final String hymnMusicPath;
  const HymnTune({super.key, required this.hymnMusicPath});

  @override
  _HymnTuneState createState() => _HymnTuneState();
}

class _HymnTuneState extends State<HymnTune> with SingleTickerProviderStateMixin {
  late AnimationController iconController;
  bool isPlaying = false;
  double iconSize = 30.0;
  final AudioPlayer hymnTunePlayer = AudioPlayer();

  @override
  void initState() {
    super.initState();
    iconController = AnimationController(
      vsync: this,
      duration: const Duration(milliseconds: 100),
    );
    loadMusic();
  }

  Future<void> loadMusic() async {
    if (widget.hymnMusicPath.isNotEmpty) {
      try {
        await hymnTunePlayer.setAudioSource(AudioSource.uri(Uri.parse(widget.hymnMusicPath)));
      } catch (e) {
        Fluttertoast.showToast(
          msg: "Error loading audio source: $e",
          textColor: Colors.white,
          backgroundColor: Colors.black45,
          toastLength: Toast.LENGTH_LONG,
          gravity: ToastGravity.BOTTOM,
        );
      }
    }
  }

  Future<bool> checkInternetConnection() async {
    var connectivityResult = await Connectivity().checkConnectivity();
    return connectivityResult != ConnectivityResult.none;
  }

  void showNoInternetToast() {
    Fluttertoast.showToast(
      msg: 'No Internet Connection',
      textColor: Colors.white,
      backgroundColor: Colors.black45,
      toastLength: Toast.LENGTH_SHORT,
      gravity: ToastGravity.BOTTOM,
    );
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () => animateIcon(),
      child: AnimatedIcon(
        icon: AnimatedIcons.play_pause,
        progress: iconController,
        size: iconSize,
      ),
    );
  }

  void animateIcon() async {
    if (widget.hymnMusicPath.isNotEmpty) {
      bool isConnected = await checkInternetConnection();

      if (!isConnected) {
        showNoInternetToast();
        return;
      }

      setState(() {
        isPlaying = !isPlaying;
      });

      if (isPlaying) {
        await iconController.forward();
        await hymnTunePlayer.play();
      } else {
        await iconController.reverse();
        await hymnTunePlayer.pause();
      }
    }
  }

  @override
  void dispose() {
    hymnTunePlayer.dispose();
    iconController.dispose();
    super.dispose();
  }
}

错误日志

E/flutter ( 7782): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method check on channel plugins.flutter.io/connectivity)
E/flutter ( 7782): #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:332:7)
E/flutter ( 7782): 
E/flutter ( 7782): #1      MethodChannelConnectivity.checkConnectivity (package:connectivity_platform_interface/src/method_channel_connectivity.dart:41:9)
E/flutter ( 7782): 
E/flutter ( 7782): #2      _HymnTuneState.checkInternetConnection (package:disciples_hymn/screens/hymn_tune.dart:49:30)
E/flutter ( 7782): 
E/flutter ( 7782): #3      _HymnTuneState.animateIcon (package:disciples_hymn/screens/hymn_tune.dart:77:26)
E/flutter ( 7782): 
E/flutter ( 7782):

问题原因

这个异常和just_audio无关,是connectivity插件的原生平台实现未正确注册导致的。Flutter插件需要Android/iOS原生端的代码支持,当插件安装不完整、项目未重新构建,或者插件版本与Flutter版本不兼容时,就会出现MissingPluginException,提示找不到对应方法的实现。

解决方法

  • 重新构建项目:停止当前运行的应用,执行flutter clean清理缓存,flutter pub get重新获取依赖,再用flutter run重启项目。
  • 检查插件安装完整性:确认pubspec.yaml中connectivity依赖已正确添加且版本适配;Android端进入android目录执行./gradlew clean后重构;iOS端进入ios目录执行pod install确保Pod依赖安装完成。
  • 替换为稳定替代插件:如果connectivity仍有问题,可改用官方推荐的connectivity_plus。替换pubspec.yaml中的依赖为connectivity_plus: ^最新版本,代码中替换导入和方法调用后重新构建。

内容的提问来源于stack exchange,提问作者Igwe Ugochukwu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:36:31