i was using native android method in my flutter app using documentation which said use
MethodChannel(flutterView, CHANNEL).setMethodCallHandler...
but after upgrading flutter the MethodChannel
function does not require flutterView
and
there is no flutterView
anymore.
can not resolve method getFlutterView()
i think there should be a new tutorial for creating channel
instead it needs some BinaryMessenger
which i don't know what to give instead.
this is the old code which is not working anymore:
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.MethodChannel.Result;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "samples.flutter.dev/battery";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
new MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, Result result) {
// Note: this method is invoked on the main thread.
// TODO
}
});
}
Simply add this method to your class:
And then optionally replace all ( Refactor > Rename ) "getFlutterView" to "getBinaryMessenger" to have a more readable code:
Remove this
import io.flutter.embedding.android.FlutterActivity;
Add this import
io.flutter.app.FlutterActivity;
Worked for Me
I spent days trying to figure out how to add a Flutter UI to my existing Android App. The biggest challenge was getting the MethodChannel to work with FlutterActivity being called from MainActivity. I know this is a little different than the question asked here, but this post was returned when I did searches for 'Android FlutterActivity MethodChannel'. After going though many resources on how to do this, I finally found my solution here: https://github.com/flutter/samples/tree/master/add_to_app/android_using_plugin/app/src/main/java/dev/flutter/example/androidusingplugin
Initially, in Android Studio, with the existing app opened, I tapped File, New, New Module, Flutter Module. I received an error and had to perform manual steps.
My objective is to launch FlutterActivity (opens main.dart in the flutter_module) in MainActivity - onCreate, then develop Flutter 'screens' leveraging as much native Flutter code as possible, with limited Platform calls using the MethodChannel. As I develop replacement Flutter code, I will continue to comment out the existing Android Code.
Here is what finally worked for me:
../App_Project/Android/Existing_Android_App/settings.gradle
../App_Project/Android/Existing_Android_App/app/build.gradle
../App_Project/Android/Existing_Android_App/app/src/main/AndroidManifest.xml
../App_Project/Android/Existing_Android_App/app/src/main/java/com/existing_android_app/MainActivity.java
../App_Project/flutter_module/lib/home_page.dart
Replace
getFlutterView()
withgetFlutterEngine().getDartExecutor().getBinaryMessenger()
.You don't actually need the
.getBinaryMessenger()
asDartExecutor
implementsBinaryMessenger
itself (by just forwarding), but I think it's more correct to specify the messenger.