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

无需配置pubspec.yaml或独立包,在Flutter项目中直接使用自定义插件

在Flutter项目中本地集成自定义插件(无需pubspec.yaml或独立包)

一、放置插件代码到Android模块

将你的DemoPlugin代码放到Flutter项目的Android模块对应目录下:

  1. 打开项目的android/app/src/main/kotlin/[你的应用包名]/路径(比如com/example/yourapp/)
  2. 创建DemoPlugin.kt文件,粘贴修正后的插件代码(补充通道常量、修复语法错误):
class DemoPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
    private lateinit var channel: MethodChannel
    private lateinit var context: Context
    private lateinit var activity: Activity
    // 定义唯一通道名,避免和其他依赖插件冲突
    private const val channelName = "com.yourpackage.demo_plugin"

    override fun onMethodCall(call: MethodCall, result: Result) {
        when (call.method) {
            "demo" -> {
                result.success("Demo")
            }
            else -> result.notImplemented()
        }
    }

    override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPluginBinding) {
        context = flutterPluginBinding.applicationContext
        channel = MethodChannel(flutterPluginBinding.binaryMessenger, channelName)
        channel.setMethodCallHandler(this)
    }

    override fun onDetachedFromEngine(binding: FlutterPluginBinding) {
        channel.setMethodCallHandler(null)
    }

    override fun onAttachedToActivity(binding: ActivityPluginBinding) {
        activity = binding.activity
    }

    override fun onDetachedFromActivityForConfigChanges() {}

    override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {}

    override fun onDetachedFromActivity() {}
}

二、手动注册插件到FlutterEngine

因为未通过pubspec.yaml配置,需要在Android的MainActivity中手动注册插件:
打开android/app/src/main/kotlin/[你的应用包名]/MainActivity.kt,修改configureFlutterEngine方法:

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine

class MainActivity : FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        // 手动注册DemoPlugin
        flutterEngine.plugins.add(DemoPlugin())
    }
}

三、Flutter端调用插件

在Flutter代码中,通过对应MethodChannel调用插件方法:

import 'package:flutter/services.dart';

// 和插件中定义的channelName保持一致
const MethodChannel _channel = MethodChannel('com.yourpackage.demo_plugin');

Future<String?> callDemoMethod() async {
  try {
    final String? result = await _channel.invokeMethod('demo');
    return result;
  } on PlatformException catch (e) {
    print("调用失败: ${e.message}");
    return null;
  }
}

注意事项

  • 通道名称唯一性:务必确保channelName和其他依赖插件的通道名不重复,否则会导致方法调用冲突
  • 生命周期兼容:插件实现了ActivityAware,手动注册后可正常获取Activity实例,无需额外配置
  • 代码维护:插件代码直接放在项目Android模块中,后续修改直接编辑该文件即可

内容的提问来源于stack exchange,提问作者TamTH-Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:15:47