一、Flutter plugin插件制作详细过程
1. 创建Flutter插件
首先,你需要创建一个Flutter插件项目。如果你还没有创建,可以使用以下命令:
flutter create --template=plugin my_flutter_plugin
2. 添加iOS原生代码
在ios/Classes
目录下,我们将添加一个Objective-C文件(假设你使用Objective-C,但如果你使用Swift,步骤类似)。
MyFlutterPlugin.m
#import <Flutter/Flutter.h>
@interface MyFlutterPlugin : NSObject<FlutterPlugin>
@end
@implementation MyFlutterPlugin
+ (void)registerWithRegistrar:(FlutterPluginRegistrar*)registrar {
FlutterMethodChannel* channel = [FlutterMethodChannel methodChannelWithName:@"my_flutter_plugin" binaryMessenger:registrar.messenger];
MyFlutterPlugin* instance = [[MyFlutterPlugin alloc] init];
[channel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
if ([@"getPlatformVersion" isEqualToString:call.method]) {
result([UIDevice currentDevice].systemVersion);
} else {
result(FlutterMethodNotImplemented);
}
}];
}
@end
在这个例子中,我们创建了一个名为MyFlutterPlugin
的类,它实现了FlutterPlugin
协议。在registerWithRegistrar
方法中,我们创建了一个FlutterMethodChannel
,它用于在Flutter和iOS之间传递方法调用和结果。我们为这个通道设置了一个方法调用处理器,它监听来自Flutter的调用,并根据调用的方法名(在这个例子中是"getPlatformVersion"
)执行相应的操作,并返回结果。
3. 更新Flutter端代码
在Flutter端,我们需要定义一个Dart类来与iOS原生代码交互。这个类将使用MethodChannel
来发送方法调用并接收结果。
my_flutter_plugin.dart
import 'dart:async';
import 'package:flutter/services.dart';
class MyFlutterPlugin {
static const MethodChannel _channel = MethodChannel('my_flutter_plugin');
static Future<String> getPlatformVersion() async {
final String version = await _channel.invokeMethod('getPlatformVersion');
return version;
}
}
在这个Dart文件中,我们定义了一个名为MyFlutterPlugin
的类,它包含一个静态的MethodChannel
实例。我们提供了一个名为getPlatformVersion
的静态方法,它使用_channel.invokeMethod
来调用iOS原生代码中的"getPlatformVersion"
方法,并等待结果
4. 使用插件
现在,你可以在你的Flutter应用中使用MyFlutterPlugin
类来获取平台版本了。
使用示例
import 'package:flutter/material.dart';
import 'package:my_flutter_plugin/my_flutter_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _platformVersion = 'Unknown';
void _getPlatformVersion() async {
String platformVersion = await MyFlutterPlugin.getPlatformVersion();
setState(() {
_platformVersion = platformVersion;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Plugin Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Running on: $_platformVersion'),
ElevatedButton(
onPressed: _getPlatformVersion,
child: Text('Get Platform Version'),
),
],
),
),
);
}
}
5、在Flutter工程中引入插件
更新pubspec.yaml
文件
- 在你的Flutter项目中,打开
pubspec.yaml
文件。 - 在
dependencies
部分添加你的插件依赖。如果插件已经发布到pub.dev,你可以直接添加其名称和版本号。如果插件是本地的,你可以使用path
依赖来指向插件的本地路径
dependencies:
flutter:
sdk: flutter
my_flutter_plugin:
path: ../path/to/my_flutter_plugin
二、发布到pub.dev
- 准备发布
- 确保你的插件遵循Flutter和Dart的最佳实践。
- 清理并格式化你的代码。
- 编写README.md文件,提供插件的安装说明、使用示例和API文档。
- 更新
pubspec.yaml
文件,确保所有依赖都是最新的,并添加插件的描述、作者信息、版本号等。name: your_plugin_name description: Your plugin description version: 1.0.0 author: Your Name homepage: https://your.homepage.url
- 预发布检查
- 使用
flutter pub publish --dry-run
命令进行预发布检查,这将模拟发布过程并报告任何潜在问题。
- 使用
- 发布插件
- 在终端中,运行
flutter pub publish
命令来发布你的插件。 - 系统会提示你输入插件的版本号,并验证你的Google账号(如果尚未验证)。
- 如果你的网络环境无法直接访问Google的服务器,你可能需要配置代理或使用VPN。
- 在终端中,运行
- 等待审核
- 提交后,你的插件将进入审核阶段。pub.dev的审核团队会检查你的插件是否符合发布标准。
- 如果审核通过,你的插件将被发布到pub.dev上,供其他开发者使用。