【问题标题】:Open flutter screen from Native Method call从 Native Method 调用打开颤振屏幕
【发布时间】:2021-02-15 21:27:11
【问题描述】:

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

我遵循以下步骤: 1)从颤振中,我通过方法通道调用本机屏幕。 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 Screen。

【问题讨论】:

标签: flutter flutter-navigation


【解决方案1】:

您需要在这里了解 Flutter 如何与 native 和 Activity 堆栈配合使用。

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

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

之后当你打电话时:

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

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

所以解决办法是:

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

这会破坏当前的原生活动,让FlutterActivity来到前台,你可以看到搜索屏幕在颤动。

【讨论】:

  • 谢谢。完成活动正在工作,但如果我不想完成本机活动,因为在后按时我想查看该活动。可以通过其他解决方案来实现吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2019-09-07
  • 2021-10-25
相关资源
最近更新 更多