Flutter

Flutter与原生通信提示找不到***某方法

2021-06-16  本文已影响0人  a233f2076716

在flutter 1.22版本之后注意使用FlutterEngine

public class MainActivity2 extends AppCompatActivity {
    private static final String CHANMEL = "io.flutter.plugins";

    private FlutterEngine flutterEngine;
    private FlutterView flutterView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        flutterEngine = createFlutterEngine();

        MethodChannel nativeChannel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANMEL);
        nativeChannel.setMethodCallHandler(
                new MethodChannel.MethodCallHandler() {
                    @Override
                    public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
                        if(call.method.equals("goActivity")){
                            goActivity();
                        }
                    }
                }
        );

        //方式一  FutterActivity显示的路由名称为"/",不可设置
        //startActivity(FlutterActivity.createDefaultIntent(this));

        //方式二、FutterActivity显示的路由名称可设置,每次都创建一个新的FlutterEngine对象
//        startActivity(
//                FlutterActivity.withNewEngine().initialRoute("route1?{\"id\":123456}").build(this)
//        );

        // 方式三、FutterActivity显示的路由名称可设置,使用缓存好的FlutterEngine对象
        startActivity(
        FlutterActivity
                .withCachedEngine("my_engine_id")
                .build(this)
        );

    }

    public void goActivity(){
        Log.i("MainActivity2","测试跳转");
        Intent intent = new Intent(this,MainActivity.class);
        startActivity(intent);
    }


    /**
     * 创建可缓存的FlutterEngine
     *
     * @return
     */
    private FlutterEngine createFlutterEngine() {
        // 实例化FlutterEngine对象
        FlutterEngine flutterEngine = new FlutterEngine(this);
        // 设置初始路由
        flutterEngine.getNavigationChannel().setInitialRoute("route1?{\"name\":\"" + "测试参数" + "\"}");
        // 开始执行dart代码来pre-warm FlutterEngine
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );
        // 缓存FlutterEngine
        FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine);
        return flutterEngine;
    }
}
上一篇下一篇

猜你喜欢

热点阅读