【发布时间】:2019-06-06 04:08:26
【问题描述】:
Flutter (Dart) 中如何释放前台到前一个应用程序?我的意思是,如何强制调用onPause或viewWillDisappear让我的应用消失,让之前的应用回到前台。
有没有我可以调用的方法?
编辑:我不想关闭我的应用,只是“最小化”它。
【问题讨论】:
-
我不想关闭我的应用程序。我只是想“最小化”它。我的意思是,让以前的应用程序在不关闭我的情况下回到前台。
Flutter (Dart) 中如何释放前台到前一个应用程序?我的意思是,如何强制调用onPause或viewWillDisappear让我的应用消失,让之前的应用回到前台。
有没有我可以调用的方法?
编辑:我不想关闭我的应用,只是“最小化”它。
【问题讨论】:
终于有办法了!我还没有找到 IOS 方面的解决方案:我正在努力。
我使用MethodChannel 要求原生端最小化自身。对于 Android 使用 this.moveTaskToBack(true); !如果你有一个 Objectif-C 替代方案,那将是完美的!
飞镖:
class _MyHomePageState extends State<MyHomePage> {
static const MethodChannel actionChannel = MethodChannel('method.channel');
Future<void> _minimize() async{
try{
await actionChannel.invokeMethod('minimize');
} on PlatformException catch(e) {
print('${e.message}');
}
}
}
安卓:
public class MainActivity extends FlutterActivity {
private static final String ACTION_CHANNEL = "method.channel";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Action-post-alert method
new MethodChannel(getFlutterView(), ACTION_CHANNEL).setMethodCallHandler(
new MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("minimize")) {
this.moveTaskToBack(true);
result.success(true);
} else {
result.notImplemented();
}
}
}
);
}
}
【讨论】:
ios 呢?
您正在为 Flutter 的架构与 Android 的架构不匹配而苦苦挣扎。在your previous question 中,您需要一种将 Flutter 应用程序带到前台的方法,答案是全屏意图通知。问题在于,在原生 Android 中,您可能会使用 NEW_TASK 标志来启动新任务。由于 Flutter 只有一个 Activity,所以需要使用 USE_CURRENT 代替。
使用NEW_TASK,您将使用Activity.finish() 关闭它,只关闭新活动。如果你用 Flutter 这样做,那可能会关闭整个应用程序(因为使用了USE_CURRENT)。
可能有一个原生 Android 应用程序(允许您更直接地控制 Activity 的启动)并使用 Add2App 添加 Flutter 屏幕。如果你让它工作,我想知道。
【讨论】:
NEW_TASK 之间的根本冲突。我相信解决方案将位于 Add2App 区域的某个地方,但我还没有找到它。 (我也需要它;-))查看其他框架,例如 React Native,它们的行为可能不同并且更适合您的用例。