从本机方法调用打开 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中的搜索屏幕。
在 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中的搜索屏幕。