flutter - 从 native 方法调用中打开 flutter 屏幕

标签 flutter flutter-navigation

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

我按照以下步骤操作: 1)从 flutter 中,我通过方法 Channel 调用 native 屏幕。 2)之后,我从native中通过方法 channel 调用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 以及事件堆栈一起工作。

在 Flutter 应用中,有一个主要 Activity 扩展了 FlutterActivity。您的所有 View 和屏幕都在此事件中绘制。因此,当您打开应用程序时, native Android 事件堆栈中只有一个事件 (FlutterActivity)。

现在,当您调用一个方法在 native 上启动一个新的 Activity 时,它会旋转一个新的 Activity 并且 Android native 事件堆栈有 2 个事件。

之后当你打电话时:

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

通过方法 channel ,Flutter 仍在其自己的 Activity (FlutterActivity) 中导航到新屏幕,该 Activity 位于当前可见的 native Activity 后面。

所以解决方案是:

在从 native 端调用 openSearch 方法之前调用 finish()

这将破坏当前的原生 Activity 并让 FlutterActivity 来到前台,您可以在 flutter 中看到搜索屏幕。

关于flutter - 从 native 方法调用中打开 flutter 屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64658828/

相关文章:

flutter - 从TabBarView的子级导航到另一个页面会引发错误

firebase - 如何在 flutter 中从 firebase 数据构建 Map<DateTime, List>

flutter - 防止 BoxShadow 被父级裁剪

flutter - flutter -弹出直到没有路线的屏幕

flutter - 如何使用 pushNamed 传递的参数?

android - 用于嵌套导航的 Flutter WillPopScope

regex - Flutter - TextFormField 中的正则表达式

flutter - 我们可以在一定条件下强制使用参数吗?

dart - 如何使用 flutter 在按钮网格中滑动/拖动 2 个或更多按钮

flutter - 从 TabBarView Child 导航到另一个 Route(全屏)