在一个颤振的android插件(联邦)中运行最简单的示例,我一直得到:
MissingPluginException(No implementation found for method getPlatformVersion on channel plugins.mydomain.com/my_package)就好像它只看到了界面,而没有看到Android插件的实现?
这在Android实现中从未被调用过(参见: Android插件实现)
static void registerWith() {
MyPackagePlatform.instance = MyPackageAndroid();
}Git克隆
您可以只需git克隆联邦插件,并执行melos bootstrap,然后您应该能够看到运行android示例的错误。
git clone https://github.com/JCzz/my_package如果您使用Android,只需编辑配置的路径,并运行my_package/example,那么您应该就可以了。
Teaser
包pubspec.yaml:
name: my_package_android
description: A new flutter plugin project.
version: 0.0.1
homepage:
environment:
sdk: ">=2.16.2 <3.0.0"
flutter: ">=2.5.0"
dependencies:
flutter:
sdk: flutter
my_package_platform_interface:
path: ../my_package_platform_interface
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^1.0.0
flutter:
plugin:
implements: my_package
platforms:
android:
package: com.example.my_package_android
pluginClass: MyPackageAndroidPlugin
dartPluginClass: MyPackageAndroid接口包:
abstract class MyPackagePlatform extends PlatformInterface {
MyPackagePlatform() : super(token: _token);
static MyPackagePlatform _instance = MethodChannelMyPackage();
static final Object _token = Object();
static MyPackagePlatform get instance => _instance;
Future<String?> get platformVersion async {
throw UnimplementedError('getPlatformVersion property has not been implemented.');
}
}Android插件实现:
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:my_package_platform_interface/my_package_platform_interface.dart';
const MethodChannel _channel = MethodChannel('plugins.mydomain.com/my_package_android');
class MyPackageAndroid extends MyPackagePlatform {
/// Registers this class as the default instance of [UrlLauncherPlatform].
static void registerWith() {
MyPackagePlatform.instance = MyPackageAndroid();
}
@override
Future<String?> get platformVersion async {
final String? version = await _channel.invokeMethod('getPlatformVersion');
return version;
}
@override
Future<bool> canLaunch(String url) async {
final bool canLaunchSpecificUrl = await _canLaunchUrl(url);
if (!canLaunchSpecificUrl) {
final String scheme = _getUrlScheme(url);
if (scheme == 'http' || scheme == 'https') {
return await _canLaunchUrl('$scheme://flutter.dev');
}
}
return canLaunchSpecificUrl;
}
Future<bool> _canLaunchUrl(String url) {
return _channel.invokeMethod<bool>(
'canLaunch',
<String, Object>{'url': url},
).then((bool? value) => value ?? false);
}
String _getUrlScheme(String url) {
final int schemeEnd = url.indexOf(':');
if (schemeEnd == -1) {
return '';
}
return url.substring(0, schemeEnd);
}
}Android本机插件:
package com.example.my_package_android;
import android.app.Activity;
import android.util.Log;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
/** MyPackageAndroidPlugin */
public class MyPackageAndroidPlugin implements FlutterPlugin, MethodCallHandler {
private static final String TAG = "MethodCallHandlerImpl";
private MethodChannel channel;
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "plugins.mydomain.com/my_package_android");
channel.setMethodCallHandler(this);
}
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("getPlatformVersion")) {
result.success("Android " + android.os.Build.VERSION.RELEASE);
} else {
result.notImplemented();
}
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
channel.setMethodCallHandler(null);
}
}发布于 2022-05-13 22:14:02
重新安装/创建了一个新的设备模拟器,并且在面向应用程序包和示例应用程序中都进行了清理--现在它开始工作了。
https://stackoverflow.com/questions/72217942
复制相似问题