オリジナルnativeジャンプflutterページ(レコード)

12863 ワード

参照先:https://www.jianshu.com/p/7b6522e3e8f1#comment-57516089参考:https://www.jianshu.com/p/0a839260d6fa参照先:https://www.jianshu.com/p/7afd90f3e422参照先:https://www.jianshu.com/p/7b6522e3e8f1方法1:
public class MyTestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_test);


        FlutterEngine flutterEngine = new FlutterEngine(this);
        flutterEngine.getNavigationChannel().setInitialRoute("/Result");
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );


//   FlutterView  Flutter     
        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_container);
        flContainer.addView(flutterView, lp);
//     , Flutter     FlutterView 
        flutterView.attachToFlutterEngine(flutterEngine);
    }

}

よびだし
Intent intent = new Intent(getContext(), MyTestActivity.class);
startActivity(intent);

方式2:
public abstract class BaseFlutterActivity extends FlutterActivity implements LifecycleOwner {

    protected Lifecycle mLifecycle;

    private static final String ROUTE_ACTION = "android.intent.action.RUN";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        FlutterEngine flutterEngine = new FlutterEngine(this);
        getIntent().putExtra("route", getTargetPage());
        mLifecycle = new LifecycleRegistry(this);
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }

    public static <P extends BaseFlutterActivity> void toPage(Context context, Class<P> target) {
        Intent intent = new Intent(context, target);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.setAction(ROUTE_ACTION);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        context.startActivity(intent);
    }

    protected abstract String getTargetPage();

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycle;
    }
}
public class ResultActivity extends BaseFlutterActivity {

    @Override
    protected String getTargetPage() {
        return "/Result";
    }
}

呼び出し:
BaseFlutterActivity.toPage(getContext(), ResultActivity.class);

flutterページはnativeに戻る
    if (Platform.isAndroid) {
      SystemNavigator.pop();
    } else {
      exit(0);
    }