从本机方法调用打开 flutter screen

Open flutter screen from Native Method call

在 flutter 应用程序中,我使用平台通道刺穿了一个本机屏幕。之后我想回到 flutter 并打开新的 flutter 屏幕,但我无法打开屏幕。

我按照以下步骤操作: 1) 从 flutter 中,我通过方法 Channel 调用 Native screen。 2)之后从native我通过方法通道调用flutter,但是在这个过程中我从native获取数据但是另一个屏幕没有打开。

我有这样的工具:

  Future<dynamic> searchCallHandler(MethodCall call) async {
    switch (call.method) {
      case 'openSearch':
        print('call callMe : arguments = ${call.arguments}');
     
        navigatorKey.currentState.push(
          MaterialPageRoute(builder: (context) => SearchLocation()),
        );
        return Future.value('called from platform!');
      default:
        print('Unknowm method ${call.method}');
        throw MissingPluginException();
        break;
    }
  }

在上面的代码中获取参数值但不进入 flutter 的 SearchLocation 屏幕。

您需要在此处了解 flutter 如何与 native 和 activity 堆栈一起工作。

在 flutter 应用中,有一个主要的 activity 扩展了 FlutterActivity。您所有的视图和屏幕都在此 activity 中绘制。因此,当您打开您的应用程序时,本机 android activity 堆栈中只有一个 activity (FlutterActivity)。

现在,当您调用一个方法在本机上启动一个新的 Activity 时,它会旋转一个新的 Activity 并且 android 本机 activity 堆栈有 2 个活动.

之后当你打电话时:

navigatorKey.currentState.push(
  MaterialPageRoute(builder: (context) => SearchLocation()),
);

通过方法通道,flutter 仍在其自己的 activity (FlutterActivity) 中导航到新屏幕,该屏幕位于当前可见的本机 activity.[=19 之后=]

所以解法是:

在原生端调用openSearch方法前先调用finish()

这会破坏当前的原生activity并让FlutterActivity出现在前台,你可以看到flutter中的搜索屏幕。