如何启动FlutterActivity和更改路线

时间:2019-03-29 10:59:41

标签: java dart flutter

我正在尝试使用flutter制作闹钟,并使用警报路径(“ / alarm”路径)启动flutter活动。我已经完成了使用MethodChannels启动MainActivity的工作,但是我需要以某种方式路由到“ / alarm”,但是调用getFlutterView()。pushRoute(“ / alarm”)不会执行任何操作。该活动仅在主视图中开始,而不是警报路线。

谢谢!

我已经设法使用MethodChannels启动startActivity,但是在onCreate中调用getFlutterView()。pushRoute(“ / alarm”)时,它不会更改路由。

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

    // This does not change the route (setInitialRoute doesn't work either)
    getFlutterView().pushRoute("/alarm");

    new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
      new MethodCallHandler() {
        @Override
        public void onMethodCall(MethodCall call, Result result) {
          if (call.method.equals("setAlarm")) {
             // pushRoute works here, but not in onCreate
             getFlutterView().pushRoute("/alarm");
          } else {
            result.notImplemented();
          }
        }
      }
    );
  }

预期结果:将路线更改为“ /警报”

实际结果:什么也没发生,活动在初始路线上打开,例如主页

1 个答案:

答案 0 :(得分:0)

找到了解决方案,

pushRoute()setInitialRoute()View膨胀之前不起作用。

这是有效的代码:

FlutterView.FirstFrameListener mListener = new FlutterView.FirstFrameListener() {
      @Override
      public void onFirstFrame() {
        getFlutterView().pushRoute("/alarm");
      }
    };

    getFlutterView().addFirstFrameListener(mListener);