无法解决 flutter native 通信错误 - 未处理的异常未在 Channel 上找到方法的实现
Can't resolve flutter native communication error - Unhandled Exception No implementation found for method on Channel
我刚刚从 flutter.dev 复制代码并修改它并得到以下错误
E/flutter ( 2639): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:MissingPluginException(未在我的频道频道上找到方法 myNativeFunction 的实现)
*
我想从 Native java 代码打印一条消息到 Flutter UI
*
This is my Main.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
static const platform = const MethodChannel('My Channel');
String message = "No Message from Native App";
Future<void> callNative() async {
String messageFromNative = "No message from Native";
try {
messageFromNative = await platform.invokeMethod('myNativeFunction');
print(messageFromNative);
} on PlatformException catch (e) {
print("error + '${e.message}' ");
message = "Failed to get Native App function: '${e.message}'.";
}
setState(() {
message = messageFromNative;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Native Demo'),
),
body: Center(
child: Column(
children: [
Text(message),
RaisedButton(child: Text('Native '), onPressed: callNative)
],
),
),
),
);
}
}
This is my MainActivity.java
package com.example.batterylevel;
import android.util.Log;
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;
public class MainActivity extends FlutterActivity {
public static final String CHANNEL="MyChannel";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
if(call.method.equals("myNativeFunction"))
{
String messageToFlutter=myNativeFunction();
result.success(messageToFlutter);
}else {
result.notImplemented();
Log.d("RD","else");
}
}
);
}
String myNativeFunction()
{
return "Message from Android";
}
}
在MainActivity
中,方法通道名称必须与dart中定义的方法通道名称匹配。
飞镖
static const platform = const MethodChannel('My Channel');
Java
public static final String CHANNEL = "My Channel"; // on dart side it's "My Channel", but you've written "MyChannel"
我刚刚从 flutter.dev 复制代码并修改它并得到以下错误
E/flutter ( 2639): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:MissingPluginException(未在我的频道频道上找到方法 myNativeFunction 的实现) * 我想从 Native java 代码打印一条消息到 Flutter UI *
This is my Main.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
static const platform = const MethodChannel('My Channel');
String message = "No Message from Native App";
Future<void> callNative() async {
String messageFromNative = "No message from Native";
try {
messageFromNative = await platform.invokeMethod('myNativeFunction');
print(messageFromNative);
} on PlatformException catch (e) {
print("error + '${e.message}' ");
message = "Failed to get Native App function: '${e.message}'.";
}
setState(() {
message = messageFromNative;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Native Demo'),
),
body: Center(
child: Column(
children: [
Text(message),
RaisedButton(child: Text('Native '), onPressed: callNative)
],
),
),
),
);
}
}
This is my MainActivity.java
package com.example.batterylevel;
import android.util.Log;
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;
public class MainActivity extends FlutterActivity {
public static final String CHANNEL="MyChannel";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
if(call.method.equals("myNativeFunction"))
{
String messageToFlutter=myNativeFunction();
result.success(messageToFlutter);
}else {
result.notImplemented();
Log.d("RD","else");
}
}
);
}
String myNativeFunction()
{
return "Message from Android";
}
}
在MainActivity
中,方法通道名称必须与dart中定义的方法通道名称匹配。
飞镖
static const platform = const MethodChannel('My Channel');
Java
public static final String CHANNEL = "My Channel"; // on dart side it's "My Channel", but you've written "MyChannel"