创立 Plugin
经过命令创立
- 运用
--org
选项,以反向域名表明法来指定你的组织
flutter create--orgcom.example--template=plugin'plugin_name'
flutter create --org com.example --template=plugin --platforms=android,ios -i objc -a java plugin 'plugin_name'
常用Flutter命令和快捷键能够参阅:Flutter-最全常用快捷键
在 package 里边把上传常见的问题
都列举了出来,这篇没有细心列出问题,能够参阅:Flutter-Package插件的开发、发布、运用
经过 Android Studio 创立
创立完结之后能够看到是包括原生代码的,这点和 Package 是不相同的
开发 Plugin
- 我这儿只是增加点代码,示例里边是获取设备版别信息,我这儿增加获取电池电量。在 iOS 文件夹下的
PluginDemoPlugin
增加代码
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
if ([@"getPlatformVersion" isEqualToString:call.method]) {
result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
} else if ([@"getBatteryLevel" isEqualToString:call.method]) {
int batteryLevel = [self getBatteryLevel];
result (@(batteryLevel));
} else {
result(FlutterMethodNotImplemented);
}
}
- (int)getBatteryLevel{
UIDevice *device = [UIDevice currentDevice];
if (device.batteryState == UIDeviceBatteryStateUnknown) {
return -1;
}
return (int)device.batteryLevel*100;
}
- 在工程的
lib->plugin_demo.dart
里边增加获取电量的 Method 。这儿的MethodChannel
是体系默许现已创立好的
static Future<String?> get batteryLevel async {
final String? version = await _channel.invokeMethod('getBatteryLevel');
return version;
}
- 在
example->lib->main.dart
里边增加显示电量
这儿经过调用 PluginDemo.batteryLevel
获取电量
Future<void> initBatteryLevel() async {
String batteryLevel;
try {
batteryLevel =
await PluginDemo.batteryLevel ?? 'Unknown platform batteryLevel';
} on PlatformException {
batteryLevel = 'Failed to get platform batteryLevel.';
}
if (!mounted) return;
setState(() {
_batteryLevel = batteryLevel;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Running on: $_platformVersion\n'),
SizedBox(
height: 20,
),
Text('Running on: $_batteryLevel\n')
],
),
),
),
);
}
运转代码的作用,由于我运转的是模拟器没有获取到电量
发布 Plugin
这个发布流程和发布 package 其实是相同的,具体能够参阅这篇文章:Package插件的开发、发布、运用
- 先查看代码有没有问题,这儿的许可证相同需求装备
flutter packages pub publish --dry-run
遇到的问题
当我没有在 pubspec.yaml
装备 homepage
时报这个错误
装备完一个可访问的地址后就没有问题了
- 没有问题就开端发布,这和发布 package 是相同的
flutter packages pub publish --server=https://pub.dartlang.org
由于我项目称号叫plugin_demo
, 有重名的需求换一个称号
我从头建了一个flutter_plugin_candy
工程,然后上传,成功了
在 package 里边把上传常见的问题
都列举了出来,能够参阅:Flutter-Package插件的开发、发布、运用
欢迎重视、点赞及转发。