如果一个页面有多个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页面)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)