flutter android 开发笔记(四.根据路由进入不同的flutter页面)

flutter android 开发笔记(四.根据路由进入不同的flutter页面),第1张

概述如果一个页面有多个flutterView或者不同activity加载不同flutterView,需要设置不同标识作为flutter的路由表,不同路由标识加载不同的flutterview关键代码://java代码mFlutter2Engine=newFlutterEngine(this);mFlutter2Engine.getNavigationChannel().setInitialRoute("route2

如果一个页面有多个FlutterVIEw或者不同activity加载不同FlutterVIEw,需要设置不同标识作为Flutter的路由表,不同路由标识加载不同的FluttervIEw

关键代码:

//java代码mFlutter2Engine = new FlutterEngine(this);mFlutter2Engine.getNavigationChannel().setinitialRoute("route2");//设置加载的FlutterVIEw的路由标识mFlutter1Engine = new FlutterEngine(this);mFlutter1Engine.getNavigationChannel().setinitialRoute("route1");//设置加载的FlutterVIEw的路由标识

  

  

//Flutter入口代码,通过路由标识,加载不同的布局
voID main() { var defaultRoutename = window.defaultRoutename; if("route1" == defaultRoutename){ runApp(new MaterialApp( Title: "route1", home: new Scaffold( appbar: new Appbar( Title: new Text("route1"), ), body: new HomeApp(), ), )); } else if("route2" == defaultRoutename){ runApp(MyApp()); }else{ runApp(new Container( child: new Text("default"), )); }}

  

Flutter1Activity.java代码

package xyz.djytest.Flutter_test_native_project;import androID.os.Bundle;import androID.util.Log;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.button;import androID.Widget.FrameLayout;import androIDx.annotation.Nullable;import androIDx.appcompat.app.AppCompatActivity;import io.Flutter.embedding.androID.FlutterVIEw;import io.Flutter.embedding.engine.FlutterEngine;import io.Flutter.embedding.engine.FlutterEngineCache;import io.Flutter.embedding.engine.dart.DartExecutor;import io.Flutter.embedding.engine.renderer.FlutterUidisplayListener;import io.Flutter.plugin.common.MethodCall;import io.Flutter.plugin.common.MethodChannel;public class Flutter1Activity extends AppCompatActivity {    FlutterEngine mFlutter1Engine;    FlutterVIEw   mFlutter1VIEw;    MethodChannel mFlutter1MethodChannel1;    String        Flutter1name = "default is null";    button        mbutton1,mbutton2;    @OverrIDe    protected voID onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 通过FlutterVIEw引入Flutter编写的页面        setContentVIEw(R.layout.activity_Flutter1);        initFlutterEngine();        mFlutter1VIEw = createFlutterVIEw();        mbutton1 = findVIEwByID(R.ID.button1);        mbutton1.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                if (mFlutter1MethodChannel1!=null){                    Log.d("TAG","mbutton1 java 调用 Flutter");                    mFlutter1MethodChannel1.invokeMethod("getFluttername", Flutter1name, new MethodChannel.Result() {                        @OverrIDe                        public voID success(Object result) {                            Flutter1name = (String) result;                            mbutton1.setText(Flutter1name);                        }                        @OverrIDe                        public voID error(String errorCode, String errorMessage, Object errorDetails) {                            Log.d("TAG","errorCode = "+ errorCode + ",errorMessage = "+errorMessage);                        }                        @OverrIDe                        public voID notImplemented() {                            Log.d("TAG","Flutter 端没有实现  getFluttername");                        }                    });                }            }        });        mbutton2 = findVIEwByID(R.ID.checkFlutterMap);        mbutton2.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                if (mFlutter1MethodChannel1!=null){                    Log.d("TAG","mbutton2 java 调用 Flutter");                    mFlutter1MethodChannel1.invokeMethod("checkFlutterMap", null, new MethodChannel.Result() {                        @OverrIDe                        public voID success(Object result) {                           String FlutterMapStr  = (String) result;                            Log.d("TAG","FlutterMapStr = "+ FlutterMapStr);                        }                        @OverrIDe                        public voID error(String errorCode, String errorMessage, Object errorDetails) {                            Log.d("TAG","errorCode = "+ errorCode + ",errorMessage = "+errorMessage);                        }                        @OverrIDe                        public voID notImplemented() {                            Log.d("TAG","Flutter 端没有实现  checkFlutterMap");                        }                    });                }            }        });        // 关键代码,将Flutter页面显示到FlutterVIEw中        mFlutter1VIEw.attachToFlutterEngine(mFlutter1Engine);    }    private FlutterVIEw createFlutterVIEw() {            FlutterVIEw FlutterVIEw = new FlutterVIEw(this);            FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(                    VIEwGroup.LayoutParams.MATCH_PARENT,                    VIEwGroup.LayoutParams.MATCH_PARENT);            FrameLayout flContainer = findVIEwByID(R.ID.fl_Flutter);            flContainer.addVIEw(FlutterVIEw, lp);            flContainer.setVisibility(VIEw.INVISIBLE);            FlutterUidisplayListener Listener = new FlutterUidisplayListener() {                @OverrIDe                public voID onFlutterUidisplayed() {                    flContainer.setVisibility(VIEw.VISIBLE);                }                @OverrIDe                public voID onFlutterUiNolongerdisplayed() {                }            };            FlutterVIEw.addOnFirstFrameRenderedListener(Listener);            return FlutterVIEw;    }    private voID initFlutterEngine() {        mFlutter1Engine = FlutterEngineCache.getInstance().get("Flutter1");        if (mFlutter1Engine == null){            mFlutter1Engine = new FlutterEngine(this);            mFlutter1Engine.getNavigationChannel().setinitialRoute("route1");            initChannel(mFlutter1Engine);            mFlutter1Engine.getDartExecutor().executeDartEntrypoint(                    DartExecutor.DartEntrypoint.createDefault()            );            FlutterEngineCache.getInstance().put("Flutter1", mFlutter1Engine);        }    }    private voID initChannel(FlutterEngine FlutterEngine) {        mFlutter1MethodChannel1 = new MethodChannel(FlutterEngine.getDartExecutor(), "Flutter1/Flutter2Java");        mFlutter1MethodChannel1.setMethodCallHandler(new MethodChannel.MethodCallHandler() {            @OverrIDe            public voID onMethodCall(MethodCall call, MethodChannel.Result result) {                if (call == null || result == null){                    if (result!=null){                        result.error("-1","MethodCall is null",new Exception("MethodCall is null"));                    }                    return;                }                if ("getInt".equals(call.method)){                    result.success(Integer.MAX_VALUE);                }if ("getLong".equals(call.method)){                    result.success(Long.MAX_VALUE);                }else {                    result.notImplemented();                }            }        });    }    @OverrIDe    protected voID onResume() {        super.onResume();        mFlutter1Engine.getlifecycleChannel().appIsResumed();    }    @OverrIDe    protected voID onStart() {        super.onStart();    }    @OverrIDe    protected voID onRestart() {        super.onRestart();    }    @OverrIDe    protected voID onPause() {        super.onPause();        mFlutter1Engine.getlifecycleChannel().appIsInactive();    }    @OverrIDe    protected voID onStop() {        super.onStop();        mFlutter1Engine.getlifecycleChannel().appIsPaused();    }    @OverrIDe    protected voID onDestroy() {        super.onDestroy();        FlutterEngineCache.getInstance().remove("Flutter1");        mFlutter1Engine.destroy();        mFlutter1Engine = null;        mFlutter1VIEw = null;        mFlutter1MethodChannel1 = null;    }    @OverrIDe    public voID onBackpressed() {        super.onBackpressed();        finish();    }}

  

Flutter2Activity.java代码

package xyz.djytest.Flutter_test_native_project;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.button;import androID.Widget.FrameLayout;import androIDx.appcompat.app.AppCompatActivity;import io.Flutter.embedding.androID.FlutterVIEw;import io.Flutter.embedding.engine.FlutterEngine;import io.Flutter.embedding.engine.FlutterEngineCache;import io.Flutter.embedding.engine.dart.DartExecutor;import io.Flutter.embedding.engine.renderer.FlutterUidisplayListener;import io.Flutter.plugin.common.MethodCall;import io.Flutter.plugin.common.MethodChannel;import io.Flutter.vIEw.FlutterMain;public class Flutter2Activity extends AppCompatActivity {    FlutterEngine mFlutter2Engine;    FlutterVIEw   mFlutter2VIEw;    MethodChannel mFlutter2MethodChannel;    button        mbutton;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        FlutterMain.startinitialization(this);        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_Flutter2);        mbutton = findVIEwByID(R.ID.button1);        mbutton.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                if (mFlutter2MethodChannel != null) {                    mFlutter2MethodChannel.invokeMethod("getFlutterMethod", null, new MethodChannel.Result() {                        @OverrIDe                        public voID success(Object result) {                            if (result != null) {                                String str = result.toString();                                mbutton.setText(str);                            }                        }                        @OverrIDe                        public voID error(String errorCode, String errorMessage, Object errorDetails) {                        }                        @OverrIDe                        public voID notImplemented() {                        }                    });                }            }        });        initFlutterEngine();        mFlutter2VIEw = createFlutterVIEw();        mFlutter2VIEw.attachToFlutterEngine(mFlutter2Engine);    }    private FlutterVIEw createFlutterVIEw() {        FlutterVIEw FlutterVIEw = new FlutterVIEw(this);        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(                VIEwGroup.LayoutParams.MATCH_PARENT,                VIEwGroup.LayoutParams.MATCH_PARENT);        FrameLayout flContainer = findVIEwByID(R.ID.fl_Flutter);        flContainer.addVIEw(FlutterVIEw, lp);        flContainer.setVisibility(VIEw.INVISIBLE);        FlutterUidisplayListener Listener = new FlutterUidisplayListener() {            @OverrIDe            public voID onFlutterUidisplayed() {                flContainer.setVisibility(VIEw.VISIBLE);            }            @OverrIDe            public voID onFlutterUiNolongerdisplayed() {            }        };        FlutterVIEw.addOnFirstFrameRenderedListener(Listener);        return FlutterVIEw;    }    private voID initFlutterEngine() {        mFlutter2Engine = FlutterEngineCache.getInstance().get("Flutter2");        if (mFlutter2Engine == null) {            mFlutter2Engine = new FlutterEngine(this);            mFlutter2Engine.getNavigationChannel().setinitialRoute("route2");            initChannel(mFlutter2Engine);            mFlutter2Engine.getDartExecutor().executeDartEntrypoint(                    DartExecutor.DartEntrypoint.createDefault()            );            FlutterEngineCache.getInstance().put("Flutter2", mFlutter2Engine);        }    }    private voID initChannel(FlutterEngine Flutter2Engine) {        mFlutter2MethodChannel = new MethodChannel(Flutter2Engine.getDartExecutor(), "Flutter2/Flutter2Java");        mFlutter2MethodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {            @OverrIDe            public voID onMethodCall(MethodCall call, MethodChannel.Result result) {                if (call == null || result == null) {                    if (result != null) {                        result.error("-1", "MethodCall is null", new Exception("MethodCall is null"));                    }                    return;                }                if ("getJavaMethod".equals(call.method)) {                    result.success("success ");                } else {                    result.success(" unKNow method");                }            }        });    }    @OverrIDe    protected voID onResume() {        super.onResume();        mFlutter2Engine.getlifecycleChannel().appIsResumed();    }    @OverrIDe    protected voID onStart() {        super.onStart();    }    @OverrIDe    protected voID onRestart() {        super.onRestart();    }    @OverrIDe    protected voID onPause() {        super.onPause();        mFlutter2Engine.getlifecycleChannel().appIsInactive();    }    @OverrIDe    protected voID onStop() {        super.onStop();        mFlutter2Engine.getlifecycleChannel().appIsPaused();    }    @OverrIDe    protected voID onDestroy() {        super.onDestroy();        FlutterEngineCache.getInstance().remove("Flutter2");        mFlutter2Engine.destroy();        mFlutter2Engine = null;        mFlutter2VIEw = null;        mFlutter2MethodChannel = null;    }    @OverrIDe    public voID onBackpressed() {        super.onBackpressed();        finish();    }}

  

总结

以上是内存溢出为你收集整理的flutter android 开发笔记(四.根据路由进入不同的flutter页面)全部内容,希望文章能够帮你解决flutter android 开发笔记(四.根据路由进入不同的flutter页面)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存