Flutter 包管理:发布自定义插件到 Pub

1. 创建插件项目

使用命令行创建插件模板:

flutter create --template=plugin --platforms=android,ios,web my_custom_plugin
cd my_custom_plugin

2. 实现核心功能

lib/my_custom_plugin.dart 实现功能:

import 'dart:async';

class MyCustomPlugin {
  static const MethodChannel _channel = 
      MethodChannel('my_custom_plugin');

  // 示例方法:获取平台版本
  static Future<String> getPlatformVersion() async {
    final String version = await _channel.invokeMethod('getPlatformVersion');
    return version;
  }

  // 添加自定义功能
  static Future<int> calculateSum(int a, int b) async {
    return await _channel.invokeMethod('calculateSum', {'a': a, 'b': b});
  }
}

3. 配置平台代码
  • Android (android/src/main/kotlin/.../MyCustomPlugin.kt):
    override fun onMethodCall(call: MethodCall, result: Result) {
      when (call.method) {
        "getPlatformVersion" -> result.success("Android ${android.os.Build.VERSION.RELEASE}")
        "calculateSum" -> {
          val a = call.argument<Int>("a") ?: 0
          val b = call.argument<Int>("b") ?: 0
          result.success(a + b)
        }
        else -> result.notImplemented()
      }
    }
    

  • iOS (ios/Classes/MyCustomPlugin.swift) 类似实现
4. 配置发布文件

关键配置文件:

  • pubspec.yaml:

    name: my_custom_plugin
    description: 实现自定义功能的Flutter插件
    version: 1.0.0
    homepage: https://github.com/yourname/my_custom_plugin
    

  • README.md:

    ## 功能说明
    提供跨平台的自定义计算功能:
    ```dart
    final sum = await MyCustomPlugin.calculateSum(5, 3); // 返回8
    

    
    

5. 本地测试

在示例项目 (example/lib/main.dart) 中测试:

void initState() {
  super.initState();
  _testPlugin();
}

Future<void> _testPlugin() async {
  final version = await MyCustomPlugin.getPlatformVersion();
  final sum = await MyCustomPlugin.calculateSum(5, 3);
  print('平台: $version, 计算结果: $sum');
}

6. 发布到 Pub.dev

执行发布流程:

# 1. 检查依赖
flutter pub get

# 2. 运行静态分析
flutter analyze

# 3. 执行测试
flutter test

# 4. 发布插件
flutter pub publish

注意:首次发布需在终端登录 Pub 账号

7. 项目中使用

在应用项目的 pubspec.yaml 添加:

dependencies:
  my_custom_plugin: ^1.0.0

执行安装:

flutter pub get

调用功能:

import 'package:my_custom_plugin/my_custom_plugin.dart';

void fetchData() async {
  final result = await MyCustomPlugin.calculateSum(10, 20);
  print('计算结果: $result'); // 输出30
}

常见问题解决
  1. 版本冲突

    • pubspec.yaml 使用依赖覆盖:
      dependency_overrides:
        plugin_dependency: ^2.0.0
      

  2. 平台未实现错误

    • 检查所有平台(Android/iOS/Web)的通道方法实现
  3. 发布失败

    • 确保 CHANGELOG.md 包含版本更新
    • 验证所有文件路径无中文或特殊字符

通过此流程,可将自定义功能封装为独立插件,实现跨项目复用,同时遵循 Dart 包管理规范。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐