MissingPluginException(No implementation found for method test on channel com.flutter_demo/methodPlugin)
Dart:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class PluginTest extends StatefulWidget {
@override
_PluginState createState() => _PluginState();
}
class _PluginState extends State<PluginTest> {
static const MethodChannel _methodChannel = MethodChannel('com.flutter_demo/methodPlugin');
String _init = "";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('调用方法'),
),
body: Column(
children: <Widget>[
OutlineButton(
onPressed: () {
_callMethod();
},
child: Text('调用方法'),
),
Text(_init)
],
),
);
}
void _callMethod() async {
Future<String> future = await _methodChannel.invokeMethod('test');
future.then((value){
setState(() {
_init = value;
});
});
}
}
Android:
package com.flutter_demo;
import android.os.Bundle;
import android.util.Log;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
MethodPlugin.registerWith(this);
}
}
class MethodPlugin implements MethodCallHandler {
private static final String channel = "com.flutter_demo/methodPlugin";
static void registerWith(PluginRegistry registry) {
if (alreadyRegisteredWith(registry)) {
return;
}
MethodPlugin.registerWith(registry.registrarFor(channel));
}
private static void registerWith(Registrar registrar) {
MethodChannel channel =
new MethodChannel(registrar.messenger(), "com.flutter_demo/methodPlugin");
MethodPlugin instance = new MethodPlugin();
channel.setMethodCallHandler(instance);
}
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
Log.e("onMethodCall", methodCall.method);
switch (methodCall.method) {
case "Test":
result.success(test());
break;
default:
result.notImplemented();
break;
}
}
private static boolean alreadyRegisteredWith(PluginRegistry registry) {
final String key = GeneratedPluginRegistrant.class.getCanonicalName();
if (registry.hasPlugin(key)) {
return true;
}
registry.registrarFor(key);
return false;
}
private String test() {
return "我是Native端的数据";
}
}
求助,老师帮忙看下是什么原因造成的 ? 这里老是提示没实现方法,我是照着源码实现的还是不行。
解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。
了解课程