Flutter Package 管理:发布自定义 Flutter 插件到 Pub,解决项目依赖自定义功能问题
·
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
}
常见问题解决
-
版本冲突:
- 在
pubspec.yaml使用依赖覆盖:dependency_overrides: plugin_dependency: ^2.0.0
- 在
-
平台未实现错误:
- 检查所有平台(Android/iOS/Web)的通道方法实现
-
发布失败:
- 确保
CHANGELOG.md包含版本更新 - 验证所有文件路径无中文或特殊字符
- 确保
通过此流程,可将自定义功能封装为独立插件,实现跨项目复用,同时遵循 Dart 包管理规范。
更多推荐


所有评论(0)