在 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/